フィルターは、HTTP要求、応答、ヘッダー情報を変換するために使用できる再利用可能なコードスニペットです。フィルターはサーブレットのようなものではありません。リクエストや応答を生成することはできません。特定のリソースへの要求を変更するか、特定のリソースからの応答を変更するだけです。
最近、スクリプトを使用するとき、私はCookieを使用してコンピューターを識別し、フィルタリングを追加し、慎重に研究したサーブレットとフィルターを使用しました。主な違いは次のとおりです。
フィルターのライフサイクルは、一般に次の3つの段階を経ます。
サーブレットの特徴は次のとおりです。
初期化
init()メソッドは、コンテナが最初にフィルターをロードするときに呼び出されます。このクラスには、このメソッドのフィルター構成オブジェクトへの参照が含まれています。初期化情報は使用されていないため、実際にこれを行う必要はありません。ここでは、デモンストレーションのためだけです。
フィルター
フィルターのほとんどの時間はここで消費されます。ドフィルター法はコンテナによって呼び出され、リクエスト/応答チェーンのサーブレット要求、サーブレット応答、フィルターチェーンオブジェクトへの参照が同時に渡されます。その後、フィルターには要求を処理し、処理タスクをチェーン内の次のリソースに渡す機会があります(フィルターチェーンオブジェクト参照のDoFilterメソッドを呼び出すことにより)。そして、処理制御がフィルターに戻るときに応答を処理します。
破壊
コンテナは、ガベージコレクションの直前にDestroy()メソッドを呼び出して、必要なクリーンアップコードを実行できるようにします。
Chain.dofilter(リクエスト、応答)に関して、彼の関数は、フィルターチェーンの次のオブジェクトにリクエストを転送することです。ここの次のフィルターは次のフィルターを指します。フィルターがない場合、それはあなたが要求したリソースです。一般に、フィルターは1つのチェーンであり、Web.xmlには少数の構成しかありません。 1つずつ接続します
リクエスト - > filter1-> filter2-> filter3-> ....->リクエストリソース。
フィルターはチェーン操作であるため、単一のフィルターを処理するときは、最終的にサーブレットにジャンプしてリクエストに応答する必要があります。
チェーンを通過すると、Chain.dofilter(リクエスト、応答)メソッドがインターセプトされたサーブレットにすぐにジャンプし、フィルターに戻ります。フィルターを呼び出す方法は、それをWeb.xmlで構成することであり、傍受するために必要なサーブレットと同じURLパターンを構成する必要があります。
<! - フィルターを構成 - > <filter> <filter-name> suibianxie </filter-name> <filter-class> com.etoak.filter.myencoding </filter-class> <! - プライベートパラメーターを構成 - > <init-mame> mycode> mycode </name> <param-param> gbk </parm-value>インターセプトは、マッピングの順序に関連しています - > <フィルターマッピング> <filter-name> suibianxie </filter-name> <! - これはサーブレットのURLパターンと一致する必要があることに注意してください。 <filter-name> suibianxie2 </filter-name> <filter-class> com.etoak.filter.naming </filter-class> </filter> <filter-mapping> <filter-name> suibianxie2 </filter-name> <url-pattern>/servet/test </url-pattern> </fervlet> servlet> <servlet> <servlet> <servlet> <servlet-name> <Servlet-Class> com.etoak.servlet.test </servlet-class> </servlet> <servlet-mapping> <servlet-name> test </servlet-name> <url-pattern>/servlet/test </url-pattern> </servet-mapping>
上記は、編集者が紹介したサーブレットとフィルターの違いと接続です。私はそれが誰にでも役立つことを願っています!