728x90
Filter
HTTP 요청과 응답을 가로채고 처리하는 컴포넌트로, 서블릿 스펙을 따르는 웹 애플리케이션에서 사용됨
서블릿 컨테이너가 구동되는 시점에 생성되며, 대표적으로 Encoding 이 있음
Filter 구동 순서
- 웹 애플리케이션이 시작될 때, 서블릿 컨테이너는 web.xml 파일로 등록된 필터의 인스턴스를 생성하고 init()을 호출
- 클라이언트로부터 HTTP 요청이 서버에 도달하면 해당하는 필터의 doFilter()를 호출함
- doFilter()에서 작업을 실행하고 다음 필터의 doFilter()를 호출함
- 마지막 필터까지 3을 반복함
- 마지막 필터는 서블릿의 service()를 호출
- 서블릿의 service()가 끝나면 service()를 호출했던 이전 필터로 돌아감
- 제일 처음 호출됐던 필터까지 돌아감
- 클라이언트에게 결과 보냄
Init()
Filter 객체가 초기화되고 설정되는 시점에 호출되는 메소드
Filter 객체가 생성되고 최초에 한번만 실행되는 메소드
doFilter()
Filter는 HTTP 요청이 서블릿에 도달하기 전에 doFilter() 를 호출하여 요청을 가로채며, 서블릿이 응답을 생성한 후에 다시 doFilter()를 호출하여 응답을 가로챔
destroy()
Filter 객체의 생명주기 중 마지막에 호출되며, 필터 객체를 해제하고 정리하는 작업을 수행
Filter 가 서비스에서 제거될 때 또는 웹 애플리케이션이 종료될 때 destroy() 메소드가 호출됨
실습
인코딩 적용해보기
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<context-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</context-param>
</web-app>
EncFilter.java
@WebFilter("*.jsp")
public class EncFilter extends HttpFilter implements Filter {
private String encoding;
public EncFilter() {
super();
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(this.encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
this.encoding=fConfig.getServletContext().getInitParameter("encoding");
}
}
728x90
'Web > JSP' 카테고리의 다른 글
| [JSP] FrontController (0) | 2023.07.05 |
|---|---|
| [JSP] Listener (0) | 2023.07.05 |
| [JSP] POJO 와 NOT POJO (0) | 2023.07.04 |
| [JSP] 커스텀태그 (0) | 2023.07.04 |
| [JSP] EL 표현식 (0) | 2023.07.03 |