2009/04/07 18:50
Filter

클라이언트가 요청을하고 난 후 서블릿이 요청을 받기전~ 필터를 거칠수 있습니다(Request Filter). 또는 반대로 서블릿이 브라우저로 응답을 하기전 클라이언트가 응답을 받기전에도 필터를 거칠 수 있습니다. 
예를 들어 request에 한글인코딩을 적용할 때 매번 페이지나 서블릿에서 작업을 하지 않고 Request 필터에 등록을 하기만 하면 서블릿에서는 이 인코딩 작업이 필요가 없다는 것이죠.

용도

Request 필터
- 보안 관련 체크
- 요청정보를 로그파일로 작성
- 인코딩 작업
Response 필터
- 응답결과를 압축
- 응답결과에 내용추가/수정
- 총 서비스 시간 측정

사용방법
- java.servlet.Filter구현합니다.
- destroy(), doFilter(), init() 메소드를 반드시 구현합니다. (Filter가 인터페이스입니다.)
- DD에 등록을 해줍니다.

예제 - Request필터로 UTF-8f 로 인코딩을 합니다.
Filter의 구현

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class CharsetFilter implements Filter {

  private String encoding;


  public void init(FilterConfig config) throws ServletException {

    encoding = config.getInitParameter("requestEncoding");


    if (encoding == null)

      encoding = "UTF-8";

  }


  public void doFilter(ServletRequest request, ServletResponse response,

      FilterChain chain) throws IOException, ServletException {

    // Respect the client-specified character encoding

    // (see HTTP specification section 3.4.1)

    if (null == request.getCharacterEncoding())

      request.setCharacterEncoding(encoding);


    chain.doFilter(request, response);

  }


  public void destroy() {

  }


DD에 등록

...
...
  <!--CharsetFilter start--> 

  <filter>

    <filter-name>Charset Filter</filter-name>

    <filter-class>filter.CharsetFilter</filter-class>

      <init-param>

        <param-name>requestEncoding</param-name>

        <param-value>UTF-8</param-value>

      </init-param>

  </filter>


  <filter-mapping>

    <filter-name>Charset Filter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

  <!--CharsetFilter end-->

...

...


위와같이 해주면 모든 request에  UTF-8 인코딩이 적용됩니다.
Posted by 개발자 용이~