Web
4 Jun 2020

Filtering

해당 게시글은 웹을 공부하기 위해 개인적으로 기록했던 자료입니다.

Filter interface


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에 명시되어 있습니다.

Filters in DD(Deploy Descriptor)


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개가 있습니다.

03FilterMethod

여기서 doFilter(request, response, chain)에 필터링 내용을 적었습니다. request와 response모두 UTF-8인코딩 처리를 진행해주었습니다.

FilterChain의 객체에서 doFilter를 해주면 체인의 다음 filter가 발생하도록 만들어 줄 수 있습니다.


Tags:
0 comments