Jsp-writing-filters
JSP-フィルター
この章では、JSPのフィルターについて説明します。 サーブレットとJSPフィルターは、次の目的のためにサーブレットとJSPプログラミングで使用できるJavaクラスです-
- バックエンドでリソースにアクセスする前にクライアントからのリクエストをインターセプトする。
- クライアントに返される前にサーバーからの応答を操作するため。
仕様で提案されているフィルターのさまざまな種類があります-
- 認証フィルター
- データ圧縮フィルター
- 暗号化フィルター
- リソースアクセスイベントをトリガーするフィルター
- 画像変換フィルター
- ロギングおよび監査フィルター
- MIME-TYPEチェーンフィルター
- トークン化フィルター
- XMLコンテンツを変換するXSL/Tフィルター
フィルターはデプロイメント記述子ファイル web.xml にデプロイされ、アプリケーションのデプロイメント記述子のサーブレット名またはJSP名またはURLパターンにマップされます。 デプロイメント記述子ファイルweb.xmlは、_ <Tomcat-installation-directory> \ conf_ディレクトリにあります。
JSPコンテナがWebアプリケーションを起動すると、デプロイメント記述子で宣言した各フィルターのインスタンスが作成されます。 フィルターは、デプロイメント記述子で宣言されている順序で実行されます。
サーブレットフィルターメソッド
フィルターは、単に javax.servlet.Filter インターフェースを実装するJavaクラスです。 javax.servlet.Filterインターフェイスは3つのメソッドを定義します-
S.No. | Method & Description |
---|---|
1 |
public void doFilter (ServletRequest, ServletResponse, FilterChain) このメソッドは、チェーンの最後にあるリソースに対するクライアントリクエストのために、リクエスト/レスポンスペアがチェーンを通過するたびにコンテナによって呼び出されます。 |
2 |
public void init(FilterConfig filterConfig) このメソッドは、サービスに配置されていることをフィルターに示すために、Webコンテナーによって呼び出されます。 |
3 |
public void destroy() このメソッドは、Webコンテナによって呼び出され、サービスが停止されていることをフィルターに示します。 |
JSPフィルターの例
次の例は、JSPファイルにアクセスするたびに、クライアントのIPアドレスと現在の日時を印刷する方法を示しています。 この例では、JSPフィルターの基本的な理解が得られますが、同じ概念を使用してより高度なフィルターアプリケーションを作成できます-
通常の方法で LogFilter.java をコンパイルし、 LogFilter.class ファイルを <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes に配置します。
Web.xmlでのJSPフィルターマッピング
サーブレットを定義してから web.xml ファイルのURLパターンにマップするのとほぼ同じ方法で、フィルターを定義してからURLまたはJSPファイル名にマップします。 デプロイメント記述子ファイル web.xml にフィルタータグの次のエントリを作成します
上記のフィルターは、構成で / *を指定したため、すべてのサーブレットとJSPに適用されます。 一部のサーブレットまたはJSPのみにフィルターを適用する場合は、特定のサーブレットまたはJSPパスを指定できます。
ここで、サーブレットまたはJSPを呼び出そうとすると、Webサーバーログに生成されたログが表示されます。 * Log4Jロガー*を使用して、上記のログを別のファイルに記録できます。
複数のフィルターを使用する
Webアプリケーションでは、特定の目的でいくつかの異なるフィルターを定義できます。 _AuthenFilter_と_LogFilter_の2つのフィルターを定義することを検討してください。 以下で説明するように、別のマッピングを作成する必要がある場合を除いて、プロセスの残りは上記で説明したままになります-
フィルターの適用順序
web.xml内のfilter-mapping要素の順序により、WebコンテナがサーブレットまたはJSPにフィルターを適用する順序が決まります。 フィルターの順序を逆にするには、 web.xml ファイルのfilter-mapping要素を逆にするだけです。
たとえば、上記の例では、最初にLogFilterを適用してから、AuthenFilterをサーブレットまたはJSPに適用します。次の例は順序を逆にします-