Java Servletフィルタ実装手順

2009/06/25 14:02Update
TAGS: Java | Servlet | フィルタ | Filter

Java Servletフィルタは、J2EEの標準仕様で、リクエストとレスポンスを横取りして、共通する前処理及び後処理を行うことができます。本文はその実装手順について解説します。

Java Servletフィルタは、J2EE(SERVLET 2.3)標準で定義されています。そのため、TomcatやJBoss、WeblogicなどJ2EE(JavaEE)サーバもデフォルトで「Servletフィルタ」仕様を実装しています。

Servletフィルタについて、次の記事をご参照ください。

コアJ2EEパターン - Intercepting Filterパターン

以下はJava Servletフィルタの実装手順について解説します。

1)javax.servlet.Filterインターフェースを実装するクラスを定義します。


public interface Filter
{
    /** 初期化時呼び出される */
    public abstract void init(FilterConfig filterconfig)
        throws ServletException;

    /** フィルタ処理(リクエストごとに呼び出される) */
    public abstract void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
        throws IOException, ServletException;

    /** フィルタ消滅時呼び出される */
    public abstract void destroy();
}

リクエストに対してフィルタを設置したい時、上のFilterから継承したクラスを定義します。

例:
package mypackage;

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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyFilter implements Filter {

    /**
     * 後処理
     */
    public void destroy() {
    }

    /**
     * Filter実行
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
               
        //ログや認証などの共通処理
        
        //引き続き実装する(他のFilterやServlet)
        chain.doFilter(request, response);
    }

    /**
     * 初期処理
     */
    public void init(FilterConfig config) throws ServletException {
        //...
    }

}


2)web.xmlにFilterクラスを登録する


<!-- 抜粋 -->
 <!-- Filter -->
 <filter>
  <filter-name>MyFilter</filter-name>
  <filter-class>mypackage.ApplicationFilter</filter-class>
 </filter>

...

 <!-- filter-mapping -->
 <filter-mapping>
  <filter-name>MyFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>



これで、*.jsp のようなページがアクセスされる際に、MyFilterが呼ばされます。

有关作者
Syboos.jp編集長システム設計や開発、保守運営などを行ってます。オープンソース技術に興味があります。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation