<filter>要素と<filter-mapping>要素
例として「/hello/」で始まるURLでサーブレットが呼ばれた場合に適用するフィルタを作成する場合
<web-app>
<filter>
<filter-name>
filtertest // ←フィルタ名
</filter-name>
<filter-class>
FilterTest // ←フィルタとして実行するサーブレットクラス名
</filter-class>
</filter>
<filter-mapping>
<filter-name>
filtertest // ←フィルタ名
</filter-name>
<url-pattern>
/hello/* // ←URLパターン
</url-pattern>
</filter-mapping>
</web-app>
フィルタを使う場合でも、もちろん<servlet>要素や<servlet-mapping>要素を記述する必要がある。
フィルタの記述する位置は<servlet>要素よりも前に記述する。
Filterインターフェース
"init"メソッド、"destroy"メソッド、"doFilter"メソッドを実装する。
import java.io.*;
import javax.servlet.*;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
public class FilterTest implements Filter{
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain){
try{
/* フィルタで行う処理 */
}catch (ServletException se){
}catch (IOException e){
}
}
public void init(FilterConfig filterConfig){
}
public void destroy(){
}
}
次のサーブレットへ処理を移すには、FilterChainインターフェースで定義されている"doFilter"メソッドを使用する。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain){
try{
/* フィルタで行う処理 */
chain.doFilter(request, response);
}catch (ServletException se){
}catch (IOException e){
}
}
FilterChainインターフェースの"doFilter"メソッドを呼び出さずに、他のサーブレットへフォワードやリダイレクトしてフィルタの流れを切る事も可能。
if (認証が行われている) then{
chain.doFilter(request, response);
}else{
((HttpServletResponse)response).sendRedirect("/Login");
}
URL |
http://localhost:8080/filter/helloworld |
アプリケーション配置場所 |
c:\servlet-sample\filter\ |
web.xmlファイル |
c:\servlet-sample\filter\WEB-INF\web.xml |
コンテキストファイル |
C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\Catalina\localhost\filter.xml |
フィルタを多重に設定する
<filter>要素と<filter-mapping>要素を複数記述すればよい。
フィルタの実行順は、<filter-mapping>が定義されている順となる。
<web-app>
<filter>
<filter-name>filtertest</filter-name>
<filter-class>FilterTest</filter-class>
</filter>
<filter>
<filter-name>filtertest2</filter-name>
<filter-class>FilterTest2</filter-class>
</filter>
<filter-mapping>
<filter-name>filtertest</filter-name> // ←最初に実行されるフィルタ
<url-pattern>/hello/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filtertest2</filter-name> // ←後に実行されるフィルタ
<url-pattern>/hello/*</url-pattern>
</filter-mapping>
</web-app>
<dispatcher>要素
サーブレットから別のサーブレットへフォワードされた時にフィルタが呼び出されるように設定することも可能。
<filter-mapping>要素の子要素の1つに<dispatcher>要素があり、<dispatcher>要素にどのタイミングでフィルタが実行されるのかを指定する。
値 |
フィルタのタイミング |
REQUEST |
URLがリクエストされた時 |
FORWARD |
フォワードが行われた時 |
INCLUDE |
インクルードが行われた時 |
ERROR |
エラーページへ処理が移る時 |
1つの<filter-mapping>要素内で<dispatcher>要素は0回から4回まで設定出来、4つの全てのタイミングを指定することも可能。
<web-app>
<filter>
<filter-name>filtertest</filter-name>
<filter-class>FilterTest</filter-class>
</filter>
<filter-mapping>
<filter-name>filtertest</filter-name>
<url-pattern>/hello/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
</web-app>
最終更新:2009年03月10日 22:56