반응형
<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를 실행하면 됩니다.
반응형