ぱそくま ろご
開発 > Java Servlet > Servletでフィルターを使う

Servletでフィルターを使う

フィルターとは?

複数のServletで同じような処理(例えば入力された文字コードを変換したい、ログを出力したいなど)を行いたい場合があります。 そこで便利なのがフィルターです。 フィルターはクライアントからのリクエストがくるとServletの前に実行されるクラスです。 なお、フィルターはjavax.servlet.Filterを実装(implements)する必要があります。



フィルターの作り方

まずはフィルターのクラスを作ります。フィルタークラスはjavax.servlet.Filterを実装すればOK。

Servletのフィルターサンプルクラス

package net.pasokuma.filters;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;

/**
 *
 * @author paso
 */
public class SampleFilter implements Filter {

    private String initParamValue = "";
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
 
        //web.xmlから初期パラメタを取得し、メンバー変数に。
        initParamValue = filterConfig.getInitParameter("testParam");
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
   
        PrintWriter out=response.getWriter();  
        out.print("init value :" + initParamValue);  
        
        //これをしないとリクエストのページが呼ばれません。
        chain.doFilter(request, response);
          
        out.print("after chain.doFilter");  
    }

    @Override
    public void destroy() {}
}

フィルターをweb.xmlに登録

フィルターのクラスを作成したので、次はフィルターをweb.xmlに登録し、使えるようにします。また、登録時にはフィルターの適用範囲を決める必要があります。

フィルターの登録サンプル(web.xml)


<web-app version="3.1" ....
.
.
    <!-- フィルターの定義をします。 -->
    <filter>
        <filter-name>sample</filter-name>
        <filter-class>net.pasokuma.filters.SampleFilter</filter-class>

        <!-- 初期化パラメタの定義をします。 -->
        <init-param>
            <param-name>testParam</param-name>
            <param-value>param's value</param-value>
        </init-param>
    </filter>
    
    <!-- フィルターの適用範囲(今回は全てのURL)を指定します。 -->
    <filter-mapping>
        <filter-name>sample</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

これで実行可能となります。