JSPフィルター
サーブレットおよび JSP のフィルターは、次の目的で存在する Java クラスです:
バックエンド リソースへのアクセス要求が行われたときのインターセプト
サーバーからクライアントに返される応答を管理する
以下に、一般的に使用されるフィルターの種類をいくつか示します。
認証フィルター
データ圧縮フィルター
暗号化フィルター
リソースアクセスイベントをトリガーするフィルター
画像変換フィルター
ログインおよび認証フィルター
MIME タイプ チェーン フィルター
トークン フィルター
XSL/T XML コンテンツを変換するフィルター
それを web.xml ファイルに挿入し、その名前をマッピングしますサーブレット、JSP ファイル、または URL パターン。デプロイメント記述ファイル web.xml は、<Tomcat-installation-directory>conf ディレクトリにあります。
JSP コンテナが Web アプリケーションを開始すると、各フィルターのインスタンスが作成されます。これらのフィルターはデプロイメント記述子ファイル web.xml で宣言され、宣言された順序で実行される必要があります。
サーブレットフィルターメソッド
フィルターは、javax.servlet.Filter インターフェースを実装する Java クラスです。 javax.servlet.Filter インターフェースは 3 つのメソッドを定義します:
数値 | メソッド & 説明 |
---|---|
1 | public void doFilter (サーブレット)リクエスト、サーブレット応答、フィルターチェーン) |
2 | public void init(FilterConfig filterConfig)
|
3 | public void destroy() |
JSP フィルターの例
この例では、JSP ファイルへの各アクセスの IP アドレスと日時が出力されます。もちろん、これは単純なフィルターの使用方法を説明するための単純な例にすぎませんが、これらの概念を使用して、より複雑なプログラムを自分で構築することができます。
// 引入Java包 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // 实现 Filter 类 public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException{ // 获取初始化参数 String testParam = config.getInitParameter("test-param"); //打印初始化参数 System.out.println("Test Param: " + testParam); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // 获取客户端ip地址 String ipAddress = request.getRemoteAddr(); // 输出ip地址及当前时间 System.out.println("IP "+ ipAddress + ", Time " + new Date().toString()); // 传递请求道过滤器链 chain.doFilter(request,response); } public void destroy( ){ /* 在Filter实例在服务器上被移除前调用。*/ } }
LogFilter.java ファイルをコンパイルし、コンパイルされたクラス ファイルを <Tomcat インストール ディレクトリ>/webapps/ROOT/WEB-INF/classes ディレクトリに配置します。
Web での JSP フィルター マッピング。デプロイメント記述ファイル web.xml で、フィルター マッピングに <filter> タグを使用します。
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
設定で「/*」を指定したため、上記のフィルターはすべてのサーブレットと JSP プログラムに適用されます。少数のサーブレットまたは JSP プログラムにのみフィルターを適用する場合は、サーブレットまたは JSP パスを指定することもできます。
ここで、通常どおりサーブレットまたは JSP ページにアクセスすると、このアクセスの記録がサーバー ログに生成されることがわかります。 Log4J ロガーを使用して他のファイルにログを記録することもできます。
Web アプリケーションでは、さまざまなフィルターを定義できます。 AuthenFilter と LogFilter という 2 つのフィルターが定義されたので、次のような別のマッピングを作成することを除いて、他の手順は前と同じです:
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter> <filter-name>AuthenFilter</filter-name> <filter-class>AuthenFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>Web 上のフィルター アプリケーションの順序
。 XML 内の <filter> 要素は、コンテナがこれらのフィルターを適用する順序を決定します。アプリケーションの順序を逆にするには、web.xml で <filter> 要素が定義されている順序を逆にするだけです。
たとえば、上記の例では最初に LogFilter を適用し、次に AuthenFilter を適用しますが、次の例では適用順序を逆にします:
<filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>