Filter の適用

servlet/JSPの複数ファイル内で同一の処理が記述されている場合
その同一処理部分だけをFilterと呼ばれる別ファイルに置いておき
各ファイルからFilterを呼び出す形で処理を簡潔化することができる

Filterの作成
インタフェースjavax.servlet.Filterをimplements(実装)するクラスを宣言し
アノテーションを @WebFilter(urlPatterns={"URL"}) と指定し、加えて
以下3つのメソッドをオーバーライドすることで作成できる
(アノテーションで指定するFilter対象はワイルドカードも使用可 {"/*"}等)

◇doFilter request時毎回実行されるメソッド

void doFilter(ServletRequest request, ServletResponse response,   
            FilterChain chain) throws IOException, ServletException

request, response, chainと3つの引数を持つ、chainはFilter適用ファイルとの
処理引き渡しに使用される

System.out.println("処理前");
chain.doFilter(request, response);
System.out.println("処理後");

上記であれば、処理前⇒Filter適用ファイル内処理⇒処理後と順番に処理する

init フィルタの開始時(サーバー起動時)に呼ばれるメソッド

void init(FilterConfig filterConfig)throws ServletException 

destroy フィルタの終了時(サーバーダウン時)に呼ばれるメソッド

void destroy()

web.xml内記述でのフィルター適用

<filter>
 <filter-name>filterlink</filter-name>
 <filter-class>hoge.class</filter-class>
</filter>
<filter-mapping>
 <filter-name>filterlink</filter-name>
 <url-pattern>/hoge/servlet</url-pattern>
</filter-mapping>

例えばFilter"class"とそのFilterを適用したい"servlet"がある場合
web.xml上で指定するには上記の様に書き加える
<filter>タグ内に
 リンクさせる名前<filter-name>とFilterクラスの位置<filter-class>
<filter-mapping>タグ内に
 リンクさせる名前<filter-name>と適用クラスのURL<url-pattern>

※web.xmlで記述すれば、1つのファイル内で複数のFilterを適用できる

Filterの解除
・アノテーションの場合
 @WebFilter(urlPatterns={"/dummy"})
 実際には使用しないダミーパスを指定する
・web.xmlの場合
 <!--
  <filter></filter><filter-mapping></filter-mapping>
 -->
 とコメントアウトする