Servlet Filter
Servlet 필터는 Java Servlet 기술의 핵심 기능 중 하나로 웹 애플리케이션에서 요청과 응답을 가로채고 처리할 수 있습니다.
필터는 요청과 응답에 대해 전처리와 후처리 작업을 수행하며, 필요한 경우 수정할 수도 있습니다.
필터는 중복 코드 없이 여러 서블릿에 공통 기능을 적용할 수 있는 방법을 제공함으로써 웹 애플리케이션 작업의 효율성과 효과성을 크게 향상시킵니다.
다음은 Servlet 필터에 대한 주요 포인트를 간결하게 정리한 내용입니다:
주요 특징
- 구현: 필터는
javax.servlet.Filter
인터페이스를 구현하는 Java 클래스입니다. - 다중 필터: 웹 애플리케이션에 여러 필터를 사용할 수 있으며, 필터 매핑 구성에 따라 정의된 순서대로 실행됩니다.
- 등록 및 구성: 필터는 배포 서술자(
web.xml
)에서 등록하고 구성하거나, 어노테이션(@WebFilter
)을 사용하여 구성할 수 있습니다. - 적용: 필터는
@WebFilter
어노테이션의urlPatterns
속성 또는web.xml
파일의<url-pattern>
요소를 사용하여 특정 URL 또는 URL 패턴에 적용할 수 있습니다.
필터 생명주기 메서드
- 초기화 (
init
메서드): 필터가 초기화될 때 이 메서드가 호출되며, 필요한 설정이나 초기화 작업을 수행할 수 있습니다. - 처리 (
doFilter
메서드): 이 메서드는 필터의 주 메서드로, 원하는 전처리를 수행하고,chain.doFilter(request, response)
를 사용하여 체인의 다음 필터 또는 서블릿을 호출하며, 필요한 후처리를 수행할 수 있습니다. - 파괴 (
destroy
메서드): 필터가 서비스에서 제거될 때 이 메서드가 호출되어, 정리 또는 리소스 해제 등의 작업을 수행할 수 있습니다.
예시 : 성능 측정 필터
성능 측정 필터를 구현하려는 경우를 예로 들어 보겠습니다.
이 필터는 시작 시간을 캡처하고, 요청을 체인의 다음 필터 또는 서블릿으로 전달한 후, 요청 처리 시간을 계산하고 출력합니다.
이 필터를 모든 요청에 (urlPatterns="/*"
)에 적용함으로써, 각 서블릿에서 동일한 코드를 반복하지 않고도 애플리케이션의 서블릿 성능을 측정할 수 있습니다.
필터를 적용하려면 web.xml
파일에서 구성하거나 @WebFilter
어노테이션을 사용할 수 있습니다.
필터는 요청을 가로채고 처리해야 하는 적절한 URL 패턴에 매핑되어야 합니다.
결국, 서블릿 필터의 사용은 코드를 모듈화하고 재사용 가능하게 유지하며, 중앙 집중식 방식으로 여러 서블릿에 공통 기능을 적용함으로써 코드 중복을 최소화하는 데 도움이 됩니다.
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/*")
public class PerformanceFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 초기화 코드
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
long startTime = System.currentTimeMillis();
chain.doFilter(request, response);
long endTime = System.currentTimeMillis();
System.out.println("Request Processing Time: " + (endTime - startTime) + " milliseconds");
}
@Override
public void destroy() {
// 해제 코드
}
}
위의 코드는 모든 요청(urlPatterns="/*"
)에 대한 성능을 측정하는 필터를 구현한 것입니다. doFilter
메서드에서 요청을 처리하기 전과 후에 시간을 측정하고, 처리 시간을 출력합니다.
Filter 인터페이스를 받아서 성능 측정 필터를 완성하고, URL 패턴을 주어, 맵핑 되는 요청에 대해 성능 측정을 합니다
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Java' 카테고리의 다른 글
Spring은 어떻게 매개변수만 적으면 라우팅을 해주는걸까 (0) | 2023.05.19 |
---|---|
Spring MVC @ModelAttribute (0) | 2023.05.19 |
Expression Language(EL) (0) | 2023.05.19 |
Servlet의 상태 정보 저장 (0) | 2023.05.19 |
Servlet (0) | 2023.05.19 |