プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

Java サーブレット(基礎編⑤ フィルタークラス)

■サーブレットのフィルタークラス

 
前回までの内容はこちら→Java サーブレット(基礎編④ JavaBeans)
 
 

フィルタークラスとは?

サーブレットのdoGet()メソッドやdoPost()メソッドの前後で自動実行されるクラス
 
【基本構文】

@WebFilter("/URLパターン")
public class フィルタークラス名 implements Filter {
    public EncodeFilter() {
    }

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        //サーブレットクラス実行前の処理を記述

        chain.doFilter(request, response);

        //サーブレットクラス実行後の処理を記述
    }

    public void init(FilterConfig fConfig) throws ServletException {
    }
}

 
 


【フィルタークラスの作成方法】
Eclipseなら簡単に作成可能
対象のプロジェクトで「右クリック」⇒「新規」⇒「フィルター」⇒「任意のパケージ名とクラス名を入力」⇒「完了」押下

 

 
 


【使用例】
・サーブレットクラス

package action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import beans.LoginBean;

@WebServlet("/LoginAction")
public class LoginAction extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public LoginAction() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/login.jsp");
        dispatcher.forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //フィルタークラスに記述する為、コメントアウト
        //request.setCharacterEncoding("UTF-8");

        String userName = request.getParameter("userName");
        String pass = request.getParameter("pass");

        LoginBean lb = new LoginBean(userName, pass);
        request.setAttribute("lb", lb);

        RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/menu.jsp");
        dispatcher.forward(request, response);
    }
}

 
・フィルタークラス

package filter;

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.annotation.WebFilter;

@WebFilter("/LoginAction")
public class EncodeFilter implements Filter {

    public EncodeFilter() {
    }

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //フィルタークラスに文字エンコードを記述
        request.setCharacterEncoding("UTF-8");

        chain.doFilter(request, response);
    }

    public void init(FilterConfig fConfig) throws ServletException {
    }
}