서블릿&JSP/뉴렉쳐 서블릿&JSP강의

[서블릿/jsp] 서블릿 필터

째로스 2023. 6. 17. 16:25

1. 웹 동작 과정

톰캣(WAS)에서 Servlet Container에 있는 Servlet에 접근하기 전에 필터를 거치게된다.

해당 필터에서 추가적인 내용을 수행하거나, 다음 서블릿 또는 필터가 작동하거나 작동하지 못 하게 할 수 있다.

(필터는 여러개 있을 수 있다.)

 

2. 필터 생성

public class CharacterEncodingFilter implements Filter {

	//기존보다 더 추가된 추상 메소드
	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request
			, ServletResponse response
			, FilterChain chain)
			throws IOException, ServletException {
		
		//다음 필터나 서블릿 실행 전 인코딩 설정
		request.setCharacterEncoding("UTF-8");
		
		//다음 필터나 서블릿이 실행되기 전에 before filter 출력
		System.out.println("before filter");
		//조건 검사를 통해 다음 필터나 서블릿을 실행시키는 함수
		chain.doFilter(request, response);
		//다음 필터나 서블릿이 실행된 후 after filter 출력
		System.out.println("after filter");
	}

	//기존보다 더 추가된 추상 메소드
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub

	}

}

doFilter 메소드에서 해당 필터가 작동하기 전, 후 작업을 추가하거나 다음 필터를 실행시키거나

실행하지 않도록 할 수 있다. (다음 필터 또는 서블릿은 메소드 내에서 chain.doFilter를 사용하여 실행시킨다.)

<filter>
  	<filter-name>characterEncodingFilter</filter-name>
  	<filter-class>com.newlecture.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

web.xml에 추가하는 내용으로

/* 경로 밑에 있는 모든 서블릿 클래스들은 실행 전 characterEncodingFilter라는 필터를 적용시킨다는 의미이다.

 

3. 실행 결과

필터를 통해 다음 서블릿 및 필터 적용 전, 인코딩이 되어 한글이 올바르게 표기된 것을 확인할 수 있다.

또한 서블릿이나 다음 필터가 작동 전후, 미리 입력해두었던 문자열이 출력되는 것을 확인할 수 있다.