1。フィルタの概要
フィルタは、クライアントのリソースへのアクセスをフィルタリングするためのものです。条件が満たされた場合は解放され、条件が満たされない場合は解放されず、ターゲットリソースへのアクセスの前後に論理処理を実行できます。
2、準備ステップ
- Filterインターフェースを実装するフィルタークラスを作成します
- インターフェイスにまだ実装されていないメソッドを実装する
web.xml
設定する(主にフィルタするように構成されているリソース)
ケース:
最初のステップ:インターフェースを実装し、メソッドを書き直します
public class QuickFilter1 implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("quick1 running...");
//放行请求
chain.doFilter(request, response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
ステップ2:構成web.xml
ファイル
<filter>
<filter-name>QuickFilter1</filter-name>
<filter-class>com.filter.filter.QuickFilter1</filter-class>
</filter>
<filter-mapping>
<filter-name>QuickFilter1</filter-name>
<!--对该web应用下的所有的资源进行过滤 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
ステップ3:テスト用のサーブレットを作成する
public class Servlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("Servlet1 running...");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
注意:
chain.doFilter(request, response)
このコードを記述しないと、Servlet1のコンテンツにアクセスできなくなります。このコードを記述した場合、必要に応じてServlet1のコンテンツにアクセスします。これはリリースリクエストです。
3、フィルターアクセスプロセス
を構成するときは<url-pattern>/*</url-pattern>
、Webアプリケーション全体をフィルタリングします。実際、サーブレットにアクセスすると、複数のフィルターを通過します、これらを渡したい場合は、複数のフィルターがチェーンを形成します。chain.doFilter(request,response)
リリースするには、すべて上記を実行する必要があります。
四。フィルタのライフサイクルとAPIの詳細な説明
1.フィルターのライフサイクルとそれに関連する方法
フィルタインターフェイスには、次の3つの方法があります。
init(Filterconfig)
:フィルターオブジェクトの作成時に実行されるフィルターオブジェクト初期化メソッドに代わってdoFilter(ServletRequest,ServletResponse,FilterChain)
:フィルター実行のコアメソッドを表します。リソースがこのフィルターにフィルター処理用に構成されている場合、リソースにアクセスするたびにdoFilterメソッドが実行されます。destory()
:フィルターオブジェクトが破棄されたときに実行されるフィルター破棄メソッドを表します
2. Filterオブジェクトのライフサイクル:
- フィルタはいつ作成されますか:サーバーの起動時にフィルタオブジェクトが作成されます
- フィルタが破棄されるタイミング:サーバーが閉じられるとフィルタが破棄されます
3.フィルターの詳細なAPI
init(FilterConfig)方法
パラメータconfigは、Filterオブジェクトの構成情報のオブジェクトを表し、内部カプセル化はフィルターの構成情報です。
場合:
最初のステップ:最初にweb.xml
コンテンツを書く
<filter>
<filter-name>QuickFilter1</filter-name>
<filter-class>com.filter.filter.QuickFilter1</filter-class>
<init-param>
<param-name>aaa</param-name>
<param-value>AAA</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>QuickFilter1</filter-name>
<!--对该web应用下的所有的资源进行过滤 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
ステップ2:initメソッドを使用してweb.xmlの情報を取得します
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//获得web.xml中的filter的名称——————
//<filter-name>QuickFilter1</filter-name>
filterConfig.getFilterName();
//获得当前filter的初始化参数
filterConfig.getInitParameter("aaa");
//获得ServletContext
filterConfig.getServletContext();
}
-
destory()方法
フィルタオブジェクトが破棄されたときに実行され、サーバーが閉じられたときに実行できます。 -
doFilter方法
doFilter(ServletRequest、ServletResponse、FilterChain)
パラメータの中で: -
ServletRequest/ServletResponse
:doFilterメソッドが実行されるたびに、Webコンテナーは、doFilterのパラメーターとして要求および応答オブジェクトを作成する責任があります。要求と応答は、ターゲットリソースのサービスメソッドにアクセスするときの要求と応答です。 -
FilterChain
:チェーンオブジェクトをフィルタリングします。リクエストは、オブジェクトのdoFilterメソッドを介して解放できます。彼は私たちのフィルターオブジェクトをFilterChainオブジェクトに入れます。フィルタの順序は、記述されたweb.xmlの順序に従って実行されます。
場合:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Filter</display-name>
<filter>
<filter-name>QuickFilter1</filter-name>
<filter-class>com.filter.filter.QuickFilter1</filter-class>
<init-param>
<param-name>aaa</param-name>
<param-value>AAA</param-value>
</init-param>
</filter>
<!-- 注意此处的filter-mapping-->
<filter-mapping>
<filter-name>QuickFilter1</filter-name>
<!--对该web应用下的所有的资源进行过滤 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 注意此处的filter-mapping-->
<filter>
<filter-name>QuickFilter2</filter-name>
<filter-class>com.filter.filter.QuickFilter2</filter-class>
</filter>
<filter-mapping>
<filter-name>QuickFilter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
注意:
web.xmlでは、QuickFilter1は<filter-mapping>
QuickFilter2の<filter-mapping>
前にあります。したがって、フィルターを使用する場合、filter1が最初にフィルターされ、次にfilter2がフィルターされます。
示されているように:
4.4。フィルタのweb.xml構成ファイル
url-patternを構成する場合、次の3つの記述方法があります。
- 完全に一致:/ sertvle1
- ディレクトリマッチング:/ aaa / bbb / *
- 拡張機能のマッチング:* .abc * .jsp
注意:Url-patternは、servlet-nameに置き換えるか
、次のように組み合わせることができます。
<filter-mapping>
<filter-name>QuickFilter1</filter-name>
<!--对该web应用下的所有的资源进行过滤 -->
<!-- <url-pattern>/*</url-pattern> -->
<servlet-name>Servlet1</servlet-name>
</filter-mapping>
フィルタには別の設定方法があります。
発車係
REQUEST
:デフォルト値。これは、リソースに直接アクセスしたときにフィルターが実行されることを意味します。FORWARD
:転送時にのみフィルターが実行されますINCLUDE
:リソースが含まれているときにフィルターを実行するERROR
:エラー発生時にジャンプするのはフィルターを実行することです
次のように:
<filter-mapping>
<filter-name>QuickFilter1</filter-name>
<!--对该web应用下的所有的资源进行过滤 -->
<!-- <url-pattern>/*</url-pattern> -->
<!-- <servlet-name>/Servlet1</servlet-name> -->
<url-pattern>/*</url-pattern>
<dispatcher>可以再次进行上述配置</dispatcher>
</filter-mapping>