Filterテクノロジー
一、Filter開発入門
Filter開発は2つのステップに分けられます.
1 javaクラス実装Filterインタフェースを記述し、そのdoFilterメソッドを実現する.
2,web.xmlファイルでは、および要素を使用して作成したfilterクラスを登録し、ブロックできるリソースを設定します.
1、登録説明:
フィルタの名前を指定します.この要素の内容は空にできません.
要素は、フィルタの完全な限定クラス名を指定するために使用されます.
要素は、フィルタに初期化パラメータを指定し、そのサブ要素はパラメータの名前を指定し、はパラメータの値を指定します.フィルタでは、FilterConfigインタフェースオブジェクトを使用して初期化パラメータにアクセスできます.
2、マッピングの説明:
要素は、Filterがブロックするリソースを設定するために使用されます.
サブ要素は、filterの登録名を設定するために使用されます.この値は、要素で宣言されたフィルタの名前でなければなりません.
filterによってブロックされたリクエストパスを設定します(フィルタに関連付けられたURLスタイル)
フィルタによってブロックされたリソースがウェブコンテナによって呼び出される方法を指定します.REQUEST、INCLUDE、FOrWARD、ERRORのいずれかであり、デフォルトのREQUESTです.ユーザーは複数のサブエレメントを設定して、Filterがリソースの複数の呼び出し方法をブロックすることを指定できます.
3,サブエレメントが設定できる値とその意味
REQUEST:ユーザーが直接ページにアクセスすると、Webコンテナからフィルタが呼び出されます.ターゲットリソースがRequestDispatcherのinclude()またはforward()メソッドでアクセスされている場合、フィルタは呼び出されません.
INCLUDE:ターゲットリソースがRequestDispatcherのinclude()メソッドでアクセスされている場合、フィルタが呼び出されます.このほか、フィルタは呼び出されません.
FOrWARD:ターゲットリソースがRequestDispatcherのforward()メソッドでアクセスされている場合、このフィルタは呼び出されます.それ以外は呼び出されません.
ERROR:ターゲットリソースが宣言型例外処理メカニズムによって呼び出された場合、フィルタが呼び出されます.それ以外は、フィルタは呼び出されません.
二、Filterのライフサイクル
init(FilterConfig filterConfig)throws ServletException:
私たちが作成したサーブレットプログラムと同様に、Filterの作成と破棄はWEBサーバが担当します.Webアプリケーションが起動すると、WebサーバはFilterのインスタンスオブジェクトを作成し、そのinitメソッドを呼び出してオブジェクトの初期化機能を完了し、後続のユーザー要求にブロックの準備を完了します(注:filterオブジェクトは1回しか作成されず、initメソッドも1回しか実行されません.例)開発者はinitメソッドのパラメータを使用して、現在のfilter構成情報を表すFilterConfigオブジェクトを取得できます.
destroy():
WebコンテナがFilterオブジェクトをアンインストールする前に呼び出されます.このメソッドはFilterのライフサイクルで1回のみ実行されます.この方法では、フィルタで使用されるリソースを解放することができる.
FilterConfigインタフェース
ユーザは、filterを構成する際にを使用してfilterの初期化パラメータを設定することができ、ウェブコンテナがFilterオブジェクトをインスタンス化し、そのinitメソッドを呼び出すと、filterの初期化パラメータをカプセル化したfilter Configオブジェクトが渡されます.そのため、開発者はfilterを作成する際に、filterConfigオブジェクトの方法によって、以下の方法を得ることができます.
String getFilterName():filterの名前を取得します.
String getInitParameter(String name):デプロイメント記述で指定した名前の初期化パラメータの値を返します.存在しない場合nullを返します.Enumeration getInitParameterName():フィルタのすべての初期化パラメータの名前の列挙セットを返します.
public ServiceletContext getServiceletContext():Serviceletコンテキストオブジェクトの参照を返します.
filterパラメータを設定するには、次の手順に従います.
フィルタパラメータを取得するには、次の手順に従います.
三、Filterチェーン
1つのウェブアプリケーションでは、複数のFilterを作成することができ、これらのFilterを組み合わせて1つのFilterチェーンと呼ぶことができる.
WebサーバはFilterに従ってWeb上にある.xmlファイルの登録順序は、どのFilterを先に呼び出すかを決定し、最初のFilterのdoFilterメソッドが呼び出されると、WebサーバはFilterチェーンを表すFilter Chainオブジェクトを作成してメソッドに渡します.doFilterメソッドでは、開発者がFilterChainオブジェクトのdoFilterメソッドを呼び出すと、WebサーバはFilterChainオブジェクトにfilterがあるかどうかをチェックし、ある場合は2番目のfilterを呼び出し、ない場合はターゲットリソースを呼び出す.
Filter開発は2つのステップに分けられます.
1 javaクラス実装Filterインタフェースを記述し、そのdoFilterメソッドを実現する.
public class FilterDemo1 implements Filter {
//FilterChain filter
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("filter1111 ");
chain.doFilter(request, response); //
System.out.println("filter1111 ");
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
public void destroy() {
// TODO Auto-generated method stub
}
}
2,web.xmlファイルでは、
<filter>
<filter-name>FilterDemo1</filter-name>
<filter-class>cn.yujian.web.filter.FilterDemo1</filter-class>
<init-param>
<param-name>word_file</param-name>
<param-value>/WEB-INF/word.txt</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
1、登録説明:
2、マッピングの説明:
3,
REQUEST:ユーザーが直接ページにアクセスすると、Webコンテナからフィルタが呼び出されます.ターゲットリソースがRequestDispatcherのinclude()またはforward()メソッドでアクセスされている場合、フィルタは呼び出されません.
INCLUDE:ターゲットリソースがRequestDispatcherのinclude()メソッドでアクセスされている場合、フィルタが呼び出されます.このほか、フィルタは呼び出されません.
FOrWARD:ターゲットリソースがRequestDispatcherのforward()メソッドでアクセスされている場合、このフィルタは呼び出されます.それ以外は呼び出されません.
ERROR:ターゲットリソースが宣言型例外処理メカニズムによって呼び出された場合、フィルタが呼び出されます.それ以外は、フィルタは呼び出されません.
二、Filterのライフサイクル
init(FilterConfig filterConfig)throws ServletException:
私たちが作成したサーブレットプログラムと同様に、Filterの作成と破棄はWEBサーバが担当します.Webアプリケーションが起動すると、WebサーバはFilterのインスタンスオブジェクトを作成し、そのinitメソッドを呼び出してオブジェクトの初期化機能を完了し、後続のユーザー要求にブロックの準備を完了します(注:filterオブジェクトは1回しか作成されず、initメソッドも1回しか実行されません.例)開発者はinitメソッドのパラメータを使用して、現在のfilter構成情報を表すFilterConfigオブジェクトを取得できます.
destroy():
WebコンテナがFilterオブジェクトをアンインストールする前に呼び出されます.このメソッドはFilterのライフサイクルで1回のみ実行されます.この方法では、フィルタで使用されるリソースを解放することができる.
FilterConfigインタフェース
ユーザは、filterを構成する際に
String getFilterName():filterの名前を取得します.
String getInitParameter(String name):デプロイメント記述で指定した名前の初期化パラメータの値を返します.存在しない場合nullを返します.Enumeration getInitParameterName():フィルタのすべての初期化パラメータの名前の列挙セットを返します.
public ServiceletContext getServiceletContext():Serviceletコンテキストオブジェクトの参照を返します.
filterパラメータを設定するには、次の手順に従います.
<filter>
<filter-name>FilterDemo3</filter-name>
<filter-class>cn.yujian.web.filter.FilterDemo3</filter-class>
<init-param>
<param-name>xxx</param-name>
<param-value>yyyy</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterDemo3</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
フィルタパラメータを取得するには、次の手順に従います.
public class FilterDemo3 implements Filter {
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init!!!!!!!!!!!!!!!!!!!!!!");
this.filterConfig = filterConfig;
}
public void destroy() {
System.out.println("destroy!!!!!!!!!!!!!!!!!!!!!");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("filter3.............................");
String filterName = this.filterConfig.getFilterName();
String parameterValue = this.filterConfig.getInitParameter("xxx");
Enumeration enumeration = this.filterConfig.getInitParameterNames();
ServletContext ctx = this.filterConfig.getServletContext();
}
}
三、Filterチェーン
1つのウェブアプリケーションでは、複数のFilterを作成することができ、これらのFilterを組み合わせて1つのFilterチェーンと呼ぶことができる.
WebサーバはFilterに従ってWeb上にある.xmlファイルの登録順序は、どのFilterを先に呼び出すかを決定し、最初のFilterのdoFilterメソッドが呼び出されると、WebサーバはFilterチェーンを表すFilter Chainオブジェクトを作成してメソッドに渡します.doFilterメソッドでは、開発者がFilterChainオブジェクトのdoFilterメソッドを呼び出すと、WebサーバはFilterChainオブジェクトにfilterがあるかどうかをチェックし、ある場合は2番目のfilterを呼び出し、ない場合はターゲットリソースを呼び出す.