반응형
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>com.jsp.study.Filter</filter-class>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

xml에서 설정하는 방법입니다.

package com.jsp.study;

import java.io.IOException;

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("/*") // 모든 url 호출에 대해서 이 필터를 거친다.
public class Filter implements javax.servlet.Filter {



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

		response.setCharacterEncoding("UTF-8");			// 서블릿에서 직접 브라우저에 출력해줄 경우 쓴다 (out.print를 사용할 시)
		response.setContentType("text/html; charset=UTF-8");	// HTML이 UTF-8 형식이라는 것을 브라우저에게 전달한다.
		request.setCharacterEncoding("UTF-8");			// 파라미터에 해당하는 값을 UTF-8로 보내준다는 의미 (해당 로직에 POST 방식으로 데이터 보낼시)

		 System.out.println("before filter");
		 chain.doFilter(request, response); // 중간에 다른 Filter로 전이 시킬 수 있다.
		 System.out.println("after filter");
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// 서블릿 컨테이너가 필터를 초기화 시킨다.
		
	}

	@Override
	public void destroy() {
		// 인스턴스를 소멸하기 전에 호출하는 메소드
	}


}

annotation을 이용한 방법입니다.

 

- 동작 방식

init으로 서블릿 컨테이너가 필터를 초기화시킵니다. 그 후 doFilter로 원하는 행위를 진행 시킨 후에 ServletRequest(Controller)에 전달합니다. 처리 후 destory를 실행시킵니다. 만약 종료하기 전에 해주고 싶은 행위가 있으면 destory를 실행하면 됩니다.

 

반응형