Servlet Filter
Client에서 Server로 요청이 들어오기 전에 서블릿을 거쳐서 먼저 필터링 하는 것을 서블릿 필터라고 한다. 서블릿마다 공통된 로직을 처리하기위해서 Filter를 사용한다.
공통적인 기능들을 서블릿이 호출되기 전에 수행(전처리)되게 하고 싶거나
서블릿이 호출 되고 난 뒤에 수행(후처리) 하고 싶으면 공통적인 기능들을 서블릿 필터로 구현하면 된다.
Filter Chain
필터가 한개 이상 있을 때를 Filter Chain이라고 한다.
Filter1의 전처리 -> Filter2의 전처리 -> Filter3의 전처리 -> 서블릿 호출 -> Filter3의 후처리 -> Filter2의 후처리 -> Filter1의 후처리 순으로 처리된다.
어떻게 쓰이나?
예제 - 수행시간 측정
// 필터를 적용할 요청의 패턴 지정 - 모든 요청에 필터를 적용.
@WebFilter("/*")
public class HttpFilter implements Filter { // Filter 인터페이스를 implements
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 초기화 작업
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 1. 전처리 작업
long startTime = System.currentTimeMillis();
// 2. 서블릿 또는 다음 필터를 호출
chain.doFilter(request, response);
// 3. 후처리 작업
System.out.println("[" + ((HttpServletRequest) request).getRequestURI() + "]");
System.out.println(" 소요시간 = " + (System.currentTimeMillis() - startTime + "ms"));
}
@Override
public void destroy() {
// 정리 작업
}
}
전처리에서 현재시간을 저장하고 서블릿을 호출한 다음 후처리에서 현재시간 - 시작시간을 해서 소요시간을 설정한다.
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] @ModelAttribute와 WebDataBinder (0) | 2021.12.31 |
---|---|
[Spring] @RequestParam에 대해 알아보자 (0) | 2021.12.31 |
[Spring] Servlet/JSP URL패턴과 DispatcherServlet (0) | 2021.12.30 |
[Spring] Servlet/JSP Scope에 대해 알아보자 (0) | 2021.12.30 |
[Spring] Servlet에 대해 간단히 알아보자 (0) | 2021.12.30 |