수문장같은 역할. (인증과 권한 같은 걸 할 때 사용 가능)
모든 서블릿이 갖고 있는 기본적인 설정을 여기서 한 번만 설정하면 어차피 거쳐가기에 여기(서블릿 필터)서 설정한 것이 다 (서블릿에) 영향을 줄 수 있음.
서블릿보다 먼저 실행되기도 하지만, 실행된 결과를 반환하는 과정에서도 실행될 수 있음.
코드를 입력한 후 실행하면 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 에서 설정하는 것이 훨씬 더 간편!
'Servlet&JSP' 카테고리의 다른 글
023 - 여러 개의 Submit 버튼 사용하기 (0) | 2020.05.26 |
---|---|
021~022 - 학습과제(사용자 입력을 통한 계산 요청) (0) | 2020.05.20 |
019 - 한글 입력 문제 (0) | 2020.05.18 |
018 - 입력할 내용이 많은 경우는 POST 요청 (0) | 2020.05.16 |
017 - 사용자 입력을 통한 GET 요청 (0) | 2020.05.15 |