본문 바로가기

Servlet&JSP

020 - 서블릿 필터

수문장같은 역할. (인증과 권한 같은 걸 할 때 사용 가능)

모든 서블릿이 갖고 있는 기본적인 설정을 여기서 한 번만 설정하면 어차피 거쳐가기에 여기(서블릿 필터)서 설정한 것이 다 (서블릿에) 영향을 줄 수 있음.

서블릿보다 먼저 실행되기도 하지만, 실행된 결과를 반환하는 과정에서도 실행될 수 있음.

 

코드를 입력한 후 실행하면 localhost:8080/notice-reg 창에선 아무것도 뜨는 게 없고,

해당 사이트를 새로고침하면 프로그램 콘솔창에서 "hello filter" 가 뜨는 걸 볼 수 있음.

 

왜 필터는 출력이 되는데 NoticeReg는 실행되지 않는 걸까.

 

필터가 실행된 후 이 요청을 서블릿 실행하는 쪽으로 전이를 할까말까는 FilterChain 에서 결정.

 

chain.doFilter(request, response);

System.out.println("hello filter");

첫번째 줄 : 요청이 오면 흐름을 넘겨서, 다음 필터 혹은 서블릿을 실행되게 한다는 것이고,

두번째 줄 : 그 후, 결과가 다시 필터에 돌아오면 해당 줄이 실행됨.

 

 

우리의 경우 서블릿이 실행되기 전에 인코딩 작업을 해야하기에 before filter 영역을 이용할 것.

 

 

web.xml

<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>

 

CharacterEncodingFilter.java

@WebFilter("/*")

 

위와 아래는 동일한 기능을 함.

web.xml 보다 annotation 에서 설정하는 것이 훨씬 더 간편!