ServletAdvertisementフィルタとは。
フィルタとはリクエストやリダイレクトに対してフィルタリングを行うメカニズムのこと。任意のサーブレットやJSPへのリクエストに対し、そのプログラムを実行する前にフィルタとして登録してあるクラスを実行することで、ロギング・認証などの仕組みをオリジナルのリソースを変更することなく、実現することが可能となる。
フィルタを後から追加する場合でも、すでにあるリソースやフィルタに変更を加えることなく追加することができる。 フィルタ実現の手順
フィルタの作成は以下の手順で行います。
フィルタクラスの作成
フィルタクラスを作成するには、javax.servlet.Filter インタフェースを実装する。Filter インタフェースには init(), doFilter(), destroy() という Servlet に良く似た3つのメソッドが用意されている。
各メソッドの役割も Servlet と同様で、
サンプル
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ConsoleFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter初期化");
}
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain){
System.out.println("Filter通過");
try{
// 次のフィルタに処理を送る
chain.doFilter(request, response);
}catch(ServletException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
public void destroy() {
System.out.println("Filter破棄");
}
}
次の処理にフィルタを送るメソッド chain.doFilter() を使用しているが、これは他のフィルタが存在する場合、そのフィルタに処理を送り、他のフィルタが存在しない場合には 実際のクラスへと処理を送るという動作を行う。
フィルタクラスのマッピング
フィルタクラスを作成したら、そのフィルタクラスを使用するために web.xml へ設定を行わなければならない。サーブレットにのマッピングと非常によく似ているため、理解しやすい。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.
//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>consolefilter</filter-name>
<filter-class>ConsoleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>consolefilter</filter-name>
<url-pattern>/sample</url-pattern>
</filter-mapping>
</web-app>
filter-name:コンテナ上でのフィルタの別名filter-class:フィルタの実際のクラス filter-pattern:どのURLにフィルタを適用するか。ワイルドカード指定(*)も使用可能。 実行
実行結果 ※(括弧)内はプログラム以外の動作。
(サーブレットコンテナの起動) (サーブレットへのアクセス http://localhost/Sample/sample ) Filter初期化 Filter通過 (サーブレットへのアクセス http://localhost/Sample/sample ) Filter通過 (サーブレットへのアクセス http://localhost/Sample/sample ) Filter通過 (サーブレットコンテナの停止) Filter破棄Servlet と同じく、init() メソッドは一番初めのクラスロード時にのみ行われている。 Advertisement |
ショートカット・634・634ブログ ・このカテゴリのトップページに戻る ・Incubator(Pukiwiki) ・634ラボ UIコレクションギャラリー ZO-3ジェネレーター サイト検索Y!ログール |