UrlRewriteFilter美化器の使用方法の擬似静化の解決方法
10820 ワード
一、URL美化器の紹介
UrlRewriteFilterはURLを書き換えるためのWebフィルタで、Apacheのmod_に似ています.rewrite任意のWebアプリケーションサーバ(Resin,Orion,Tomcatなど)に適用されます.その典型的なアプリケーションは動的なURLを静的にして、検索エンジンの爬虫類があなたの動的なウェブページをつかむのに便利です.
そのホームページ:http://tuckey.org/urlrewrite/
二、開発手順
1,urlrewrite-3.20.jarをプロジェクトに追加します.
2,web.xmlにフィルタを追加します.以下の通りです.
struts 2のフィルタにREQUEST とFOWARD を追加します.
また、urlrewriteFilterのフィルターはstruts 2の前がいいです.(ネットではこう言われていますが、後ろに置いても大丈夫です.
3,urlrewrite.xmlファイルを作成します.ファイルをWEB-INFフォルダの下に置いてください.(必ずファイル名がurlrewrite.xmlの場合)ファイルの内容は以下の通りです.
上のソースコードから見てもいいです.ラベルの中の経路の書式は私達が美化するスタイルです.ト>ラベルの中の実際は私達の真実な要求です.ここでは、この構成ファイルを通じて、私達が要求した美化後の擬静的なページをリアルなaction要求にマッピングすると簡単に考えられます.
上から見ました.「to」には二つのタイプがあります.それぞれ「forward」と「redirect」です.これは私たちがよく言っているforwardとredirectジャンプと同じことです.
forwardを使用する場合は、「to」に限定される要求は、urlRewriteFilterと同じコンテキスト環境にある必要があります.redirectは制限なしに他の工程にジャンプできます.
また、ラベルには正規表現、つまり^と$の間の内容が使われています.正規表現については、ここでは詳しく説明しません.
最後に、fromは複数の正規表現を含み、その対応するパラメータは、<to>では$1、$2などを用いて順番に受信することができる.
三、よくある問題:
1,URL美化器を使用した後、ジャンプページ報404がエラーです.ここで注意したいのは、struts 2のフィルタには、「dispatcher」REQUEST(/dispatcher)が設定されていなければ、redict方式は利用できません.FOWARDを追加していない場合、forward方式は使えません.ですから、先に説明しましたが、struts 2にこの2つを追加しなければなりません.また、ネット上でも「dispatcher」INCLUDE(/dispatcher)を追加するという人がいます.でも、これは何をするものかまだ分かりません.添付していません.問題もありません.
2,redirect方式を使って、forward方式より性能が低いです.したがって、システムが至るところにURL美化器を使用する場合は、redirectを慎重に選択する必要があります.
3,forward方式を使うなら、経路の問題をうまく処理します.なぜなら、美化されると、URLの経路の中にいくつかのディレクトリが多くなったり、少なくなったりして、そのジャンプしたページの中で、相対的なパスのリソース(例えば、ピクチャ)を使用すると、経路は現在のURLパスをもとに位置を計算するために要求されなくなるからである.
解決方法:1、ジャンプしているjspページでは、リソースの経路位置は絶対パスを使用します.2,異なるディレクトリの間でforwardを使って転送を要求しないでください.現在のパスが変化しないようにしてください.3,redirect方式に変えます.
本論文の転載は:(原文)http://blog.163.com/wunan_23/blog/static/195562320271926483993/
UrlRewriteFilterはURLを書き換えるためのWebフィルタで、Apacheのmod_に似ています.rewrite任意のWebアプリケーションサーバ(Resin,Orion,Tomcatなど)に適用されます.その典型的なアプリケーションは動的なURLを静的にして、検索エンジンの爬虫類があなたの動的なウェブページをつかむのに便利です.
そのホームページ:http://tuckey.org/urlrewrite/
二、開発手順
1,urlrewrite-3.20.jarをプロジェクトに追加します.
2,web.xmlにフィルタを追加します.以下の通りです.
<!-- urlRewriteFilter -->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts 2のフィルタに
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
また、urlrewriteFilterのフィルターはstruts 2の前がいいです.(ネットではこう言われていますが、後ろに置いても大丈夫です.
3,urlrewrite.xmlファイルを作成します.ファイルをWEB-INFフォルダの下に置いてください.(必ずファイル名がurlrewrite.xmlの場合)ファイルの内容は以下の通りです.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<!--
Configuration file for UrlRewriteFilter
http://tuckey.org/urlrewrite/
-->
<urlrewrite>
<rule>
<from>/noParams.html</from>
<to type="forward">noParams.action</to>
</rule>
<rule>
<from>^/withParams/([a-zA-Z0-9]+).html$</from>
<to type="forward">withParams.action?name=$1</to>
</rule>
<rule>
<from>^/withParams2/([a-zA-Z0-9]+).html$</from>
<to type="redirect">%{context-path}/withParams.action?name=$1</to>
</rule>
</urlrewrite>
上のソースコードから見てもいいです.ラベルの中の経路の書式は私達が美化するスタイルです.ト>ラベルの中の実際は私達の真実な要求です.ここでは、この構成ファイルを通じて、私達が要求した美化後の擬静的なページをリアルなaction要求にマッピングすると簡単に考えられます.
上から見ました.「to」には二つのタイプがあります.それぞれ「forward」と「redirect」です.これは私たちがよく言っているforwardとredirectジャンプと同じことです.
forwardを使用する場合は、「to」に限定される要求は、urlRewriteFilterと同じコンテキスト環境にある必要があります.redirectは制限なしに他の工程にジャンプできます.
また、
最後に、fromは複数の正規表現を含み、その対応するパラメータは、<to>では$1、$2などを用いて順番に受信することができる.
三、よくある問題:
1,URL美化器を使用した後、ジャンプページ報404がエラーです.ここで注意したいのは、struts 2のフィルタには、「dispatcher」REQUEST(/dispatcher)が設定されていなければ、redict方式は利用できません.FOWARDを追加していない場合、forward方式は使えません.ですから、先に説明しましたが、struts 2にこの2つを追加しなければなりません.また、ネット上でも「dispatcher」INCLUDE(/dispatcher)を追加するという人がいます.でも、これは何をするものかまだ分かりません.添付していません.問題もありません.
2,redirect方式を使って、forward方式より性能が低いです.したがって、システムが至るところにURL美化器を使用する場合は、redirectを慎重に選択する必要があります.
3,forward方式を使うなら、経路の問題をうまく処理します.なぜなら、美化されると、URLの経路の中にいくつかのディレクトリが多くなったり、少なくなったりして、そのジャンプしたページの中で、相対的なパスのリソース(例えば、ピクチャ)を使用すると、経路は現在のURLパスをもとに位置を計算するために要求されなくなるからである.
解決方法:1、ジャンプしているjspページでは、リソースの経路位置は絶対パスを使用します.2,異なるディレクトリの間でforwardを使って転送を要求しないでください.現在のパスが変化しないようにしてください.3,redirect方式に変えます.
本論文の転載は:(原文)http://blog.163.com/wunan_23/blog/static/195562320271926483993/