javaにおけるurlrewriteの配置と使用

4412 ワード

簡明な教程:
http://www.cnblogs.com/stream1/archive/2012/06/14/2549986.html
http://www.chenzongyong.cn/article-detail-article_id-78.
urlrewriteは名前の通り、URLを書き換えることです。ユーザーが得たのは全部処理した後のURLアドレスです。
一:安全性を高めて、いくつかのパラメータ名、IDなどが完全にユーザーの前に露出することを避けることができます。もしユーザが勝手に負けたら、規則に合わないなら、直接に404またはエラーページを返します。
二:URLを美化して、*.doなどの拡張子名、長いパラメータ列などを削除して、自分で整理して簡単にできます。アクセスモジュールの内容を反映できるURLです。
検索エンジンの収入に有利であり、URLの最適化を通じて、検索エンジンのより良い識別とウェブサイトの情報を収録することができます。
まず、web.xmlに下記の構成を入れます。
<!-- url     -->
    <filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/blog/*</url-pattern>
    <!--
        
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    -->
    </filter-mapping>
  
    ここで私はユーザーブログの機能を作りたいです。ユーザーブログのアドレスフォーマットは以下の通りです。http://www.xxx.com/blog/+ユーザーがカスタマイズした個性的な住所ですが、実際にやりたいのはユーザーの個性的な住所を通じてユーザーのブログの関連情報を調べてからユーザーのブログのホームページに移動します。実際に呼び出す住所はhttp://www.xxx.com/cblog.do?action=forwardIndex&hostUrl=ユーザーがカスタマイズした住所は、ユーザーにいい経験を与えるために、私たちはurlrewriteを使って住所欄に記入する必要があります。http://www.xxx.com/blog/+ユーザーがカスタマイズした個人アドレスを変換して、実際のアドレスを要求する目的に達しました。
我々は、WEB-INFの下に、urlrewriteのルールを設定するためのxmlファイルを作成したいです。作成したファイル名は、urlrewrite.xmlで、全部小文字で書いてください。urlrewrite.xmlで実現した場合は全部小文字です。もし定義が別の名前であれば、web.xmlにロードする必要があります。そうでなければ、自動的にロードされません。
私が定義したxmlのファイルの内容は以下の通りです。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
"http://tuckey.org/res/dtds/urlrewrite2.6.dtd">
<urlrewrite>
    <rule>
    <from>^/blog/(\w+)</from>
        <to type="forward">/cblog.do?action=forwardIndex&amp;hostUrl=$1</to>
    </rule>
</urlrewrite>
プロジェクトを起動します。住所欄に入力すればいいです。http://localhost:8080/test/blog/czykeith
私が実際に要請した住所は:http://localhost:880/test/cblog.do?action=forwardIndex&hosturl=czykeith
rule結点におけるformのルールは、デフォルトでは正規表現で一致しています。ユーザがサーバにアクセスするときのURLは、この設定と比較します。ルールに該当すると、次のto結点の配置に従ってジャンプします。デフォルトではforwardジャンプであり、type=redirectでも良いです。もちろんこの両者は違いがあります。
forward:デフォルト.こののすべてのにマッチするように要求し、URLは内部を使って「to」で指定されたアドレスにジャンプします。ステータスコード302。一時リダイレクト
Redirect:Reponse.Redirectで実現し、すべてのとこのとの一致を要求するは、クライアントに通知して指定アドレスにジャンプして、ステータスコードは302であるべきです。
permant-redirect:永久リダイレクト。状態コード301。次のようなことをしました。
      レスポンス.set Sttus(HttpServlet Resonse.SC_MOVE D_PERMANENTLY)
      レスポンス.set Header(「Location」、[to/]指定の値])
パッシシュ:forwardと同じです。具体的な違いは分かりません。
temporary-redirect:一時リダイレクト。ステータスコード302次のようなことをしました。
レスポンス.set Startus.SCMOVE D_TEMPORARILY)
レスポンス.set Header(「Location」、[to/]指定の値])
urlrewriteを使う時は注意が必要です。
1.&記号を使うには&代わりに
2.簡単のために、<from/>の構成の前と後ろにそれぞれ^を付けます。この二つは正規表現における強制開始と終了フラグです。
3.を使う場合はコードのurlは全部コード化されています。
4.contexは非常に重要です。アプリケーションのcontextがあれば、「myap」です。そして、あなたの要求は「/myap/somefolder/somepage.jsp」です。容器をUrlRewriteFilterに渡すurlは「/somefolder/somepage.jsp」です。これは理解しにくいですが、「contrue」ということです。
5.正規表現は非常に複雑で柔軟です。java.util.regex.Patternのjava正則を読んでください。正則を理解するのが難しいなら、ワイルドカード方式を使用してもいいです。
6.ワイルドカードを適用して、ワイルドカードマッチングエンジンを正規表現に置き換えることができます。<condition>と<rule>では、match-typeをwildcard用に設定して、ワイルドカードをオープンします。(またはdefault-match-typeを設定します。)
たとえば:
/big/url/マッチング/big/url/abc.は不整合/big/url/abc/dir/または/big/url/abc/
/big/url/***マッチング/big/url/abc.は、/big/url/abc/dir/と/big/url/abc/
正則と同様に、各*は一つのパラメータを表し、<set>と<to>では$Nで使用することもできます。
7.はnullとすることができ、もしマッチング要求がもう継続されないなら、chain.doFilterを呼び出していないことに相当する。
補足:上の配置の中に$1があるのを見ましたが、意味が分かりません。説明します。$1は^/blog/(\w+)(\w+)の中の(\w+)の内容が一致しています。順番に$2、$6があればいいです。fromの中で合う内容を含めると、javaの例外が出ます。