sungwony

[웹프로그래밍] 필터 본문

development/웹프로그래밍

[웹프로그래밍] 필터

일상이상삼상 2017. 5. 23. 14:04

필터 - '서블릿 실행 전후에 어떤 작업을 하고자 할 때 사용하는 기술'


클라이언트가 보낸 데이터의 암호를 해제한다거나, 서블릿이 실행되기 전에 필요한 자원을 미리 준비한다거나, 서블릿이 실행될 때마다 로그를 남긴다거나 하는 작업을 필터를 활용해서 처리할 수 있다.


필터 클래스는 javax.servlet.Filter 인터페이스를 구현해야 한다.


javax.servlet.Filter 인터페이스의 구현이 필요한 메소드는 다음과 같다.


init()

: 필터 객체가 생성되고 나서 준비 작업을 위해 딱 한 번 호출.

: Servlet 인터페이스의 init()와 같은 용도.

: 매개변수는 FilterConfig 객체이며, 이 객체를 통해 필터 초기화 매개변수의 값을 꺼낼 수 있다.


doFilter()

: 필터와 연결된 URL에 대해 요청이 들어오면 항상 호출되는 메서드


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


/* 서블릿 요청이 들어왔을 때 서블릿 실행 전 해야할 작업 */

//예제

request.setCharacterEncoding(config.getInitParameter("encoding"));


// 다음 필터를 호출. 더이상 필터가 없다면 서블릿의 service()가 호출된다

nextFilter.doFilter(request, response);


/* 서블릿을 실행한 후, 클라이언트에게 응답하기 전에 해야할 작업 */

}


destroy()

: 웹 애플리케이션을 종료하기 전에 호출하여 할당받은 자원을 해제하는 등의 마무리 작업을 수행.


*필터의 배치


1) DD 파일에 필터 배치 정보 설정


<!-- 필터 선언 -->

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

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

</init-param>

</filter>


<!-- 필터 URL 매핑 -->

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

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

</filter-mapping>


2) 애노테이션을 이용한 필터 배치


@WebFilter 애노테이션을 사용하면 필터의 소스 파일에 직접 배치 정보를 설정할 수 있다.


import javax.servlet.annotation.WebFilter;

import javax.servlet.annotation.WebInitParam;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;


@WebFilter(

urlPatterns="*.do",

initParams={

@WebInitParam(name="encoding", value="UTF-8")

})

public class CharacterEncodingFilter implements Filter{

...

}


※ WebFilter 애노테이션은 'javax.servlet.annotation.WebFilter'를 import 해야한다.