|
||||||||||||||||||||||
|
ホーム > Web アプリケーションの開発 > JSP/サーブレット・フィルターの基本 JSP/サーブレット・フィルターの基本ここでは JSP/Servlet に対するフィルター・プログラムを開発するための基本について説明します。 フィルター (Filter) は、JSP や Servlet を処理する前後に組み込んで使い、JSP や Servlet の動作をカスタマイズするために利用できます。 フィルターの開発方法フィルターは次のような手順で作成します。
それぞれの手順をみてみましょう。 まず javax.servlet.Filter インターフェイスを実装したクラスを作ります。 Filter インターフェイスは init メソッド、destroy メソッド、doFilter メソッドを持っているので、基本的な雛形は次のような形になります。
import java.io.IOException;
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 TestFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(
ServletRequest req,
ServletResponse resp,
FilterChain filterChain)
throws IOException, ServletException {
filterChain.doFilter(req, resp);
}
@Override
public void init(FilterConfig filterConfig)
throws ServletException {
}
}
doFilter メソッド内で filterChain.doFilter を呼出していますが、これについては後述します。 init メソッド、destroy メソッドは、フィルターオブジェクトのロード、アンロード時にそれぞれ一度だけ呼び出されます。 何らかのリソースをフィルター内部で保持する場合は、init メソッド、destroy メソッドで取得、解放を行うと良いです。 doFilter メソッドは、まさにフィルター処理を行う場所で、必要に応じて何度も呼出されます。 doFilter の第一パラメータはそれぞれ ServletRequest タイプですが、 HTTP のハイレベルな情報にアクセスするには、これを HttpServletRequest にキャストすれば OK です。 これで通常のサーブレットの doGet や doPost などで取得できるパラメータと同様に扱えます。 FilterChain の doFilter の呼出しフィルタは複数登録できます。複数のフィルタがある場合 Filter1 → Filter2 → Filter3 ... という風に順番に呼出されますが、 行儀良く次のフィルターを呼出す責任はそれぞれのフィルターにあります。 こうすることによって、フィルターのチェーンを途中で断ち切るようなフィルターを書くこともできるようなり開発の自由度が高まります。 例えば、認証を行うフィルターを開発するなら、認証が成功すればフィルター・チェーン内の次のフィルターを呼出し、 認証が失敗した場合は、フィルター・チェーンを断ち切り、ログインページへリダイレクトする処理を行うこともできます。 フィルターのデプロイメント・デスクリプタ web.xml への登録フィルタを有効にするには、web.xml にフィルタクラスを登録します。 <filter> <filter-name>TestFilter</filter-name> <filter-class>com.keicode.java.test.TestFilter</filter-class> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> filter-name/filter-class のペアについては、通常のサーブレットクラスの登録と同様です。 filter-mapping の設定ではどのリクエストに対してフィルターを有効にするか url-pattern で指定します。 特定のディレクトリ以下、特定の JSP のみ、あるいは全てのリクエストなど、 * をワイルドカードとして指定することができます。 ホーム > Web アプリケーションの開発 > JSP/サーブレット・フィルターの基本 |
|
© 2010 Java 入門 |
|||||||||||||||||||