해당 게시글은 웹을 공부하기 위해 개인적으로 기록했던 자료입니다.
javax.servlet 패키지에는 Filter interface가 있습니다. Filter interface에 있는 메소드를 이용해서 request와 response를 handling하기 전에 원하는 작업을 진행할 수 있습니다. 보통 인코딩을 많이 다룹니다.
public interface Filter
– A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both.
-> 요청과 응답 모두를 다룹니다.
– Filters perform filtering in the doFilter method. Every Filter has access to a FilterConfig object from which it can obtain its initialization parameters, a reference to the ServletContext which it can use
-> doFilter()를 이용해 필터링을 합니다.
-> 각각의 Filter는 초기화 파라미터가 담긴 FilterConfig에 접근해야 합니다.
– Filters are configured in the deployment descriptor of a web application
-> Filter는 DD에 명시되어 있습니다.
web.xml에서 아래와 같이 Filter을 정의할 수 있습니다.
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>servlet.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
태그에는 <filter-name>
과 <filter-class>
태그가 들어갑니다.
<filter-class>
태그에는 필터링 기능을 정의한 Class이름을 적고 <filter-name>
은 해당 Class의 이름을 지정해줍니다.
<filter-maping>
태그에는 <filter-name>
과 바인딩한 <url-pattern>
을 적을 수 있습니다. 보통 인코딩같은 경우 모든 요청과 응답에 적어야 하므로 /*
표현을 <url-pattern>
에 적어줍니다.
아래는 Filter Interface를 implements한 클래스입니다.
package servlet.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;
public class EncodingFilter implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//사전작업(한글처리)의 내용이 서버상의 다음번 컴포넌트에게 계속 적용되기 위한 작업....
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
Filter 인터페이스에는 메소드가 3개가 있습니다.
여기서 doFilter(request, response, chain)에 필터링 내용을 적었습니다. request와 response모두 UTF-8인코딩 처리를 진행해주었습니다.
FilterChain의 객체에서 doFilter를 해주면 체인의 다음 filter가 발생하도록 만들어 줄 수 있습니다.