필터(Filter)와 리스너(Listener)는 Java Servlet API에서 제공하는 기능으로, 웹 애플리케이션의 요청과 응답을 가로채거나 이벤트를 처리하는 데 사용됩니다.
1. 필터(Filter)
필터는 요청과 응답을 변경하거나 처리할 수 있는 자바 클래스입니다. 필터는 요청이 서블릿이나 JSP에 도달하기 전에 요청을 가로채고, 응답이 클라이언트에 전송되기 전에 응답을 가로챕니다.
필터의 특징
- 요청과 응답을 변경하거나 처리할 수 있습니다.
 - 체인 형태로 여러 개의 필터를 연결할 수 있습니다.
 - 인코딩, 로깅, 인증, 보안 등의 작업에 사용될 수 있습니다.
 
필터 구현 예시
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
 | 
 public class LoggingFilter implements Filter { 
    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException { 
        HttpServletRequest httpRequest = (HttpServletRequest) request; 
        String requestURL = httpRequest.getRequestURL().toString(); 
        System.out.println(“Request URL: “ + requestURL); 
        chain.doFilter(request, response); // 다음 필터 또는 서블릿 호출 
        HttpServletResponse httpResponse = (HttpServletResponse) response; 
        int statusCode = httpResponse.getStatus(); 
        System.out.println(“Response Status Code: “ + statusCode); 
    } 
    // … 
} 
 | 
cs | 
2. 리스너(Listener)
리스너는 웹 애플리케이션에서 발생하는 이벤트를 처리하는 자바 클래스입니다. 리스너는 이벤트가 발생할 때 호출되며, 해당 이벤트에 대한 작업을 수행합니다.
리스너의 특징
- 웹 애플리케이션의 시작과 종료, 세션의 생성과 소멸 등의 이벤트를 처리할 수 있습니다.
 - 이벤트 처리를 통해 애플리케이션의 상태를 모니터링하거나 로깅할 수 있습니다.
 
리스너 구현 예시
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
 | 
 public class SessionListener implements HttpSessionListener { 
    @Override 
    public void sessionCreated(HttpSessionEvent event) { 
        HttpSession session = event.getSession(); 
        String sessionId = session.getId(); 
        System.out.println(“Session Created: “ + sessionId); 
    } 
    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { 
        HttpSession session = event.getSession(); 
        String sessionId = session.getId(); 
        System.out.println(“Session Destroyed: “ + sessionId); 
    } 
} 
 | 
cs | 
3. 필터와 리스너의 등록
필터와 리스너를 사용하려면 웹 애플리케이션의 배포 서술자(web.xml) 또는 어노테이션을 사용하여 등록해야 합니다.
web.xml에 등록
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
 | 
 <filter> 
    <filter-name>loggingFilter</filter-name> 
    <filter-class>com.example.LoggingFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>loggingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<listener> 
    <listener-class>com.example.SessionListener</listener-class> 
</listener> 
 | 
cs | 
어노테이션 사용
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
 | 
 @WebFilter(“/*”) 
public class LoggingFilter implements Filter { 
    // … 
} 
@WebListener 
public class SessionListener implements HttpSessionListener { 
    // … 
} 
 | 
cs | 
필터와 리스너는 웹 애플리케이션의 요청과 응답을 가로채거나 이벤트를 처리하여 애플리케이션의 기능을 확장하고 모니터링할 수 있습니다. 이를 활용하면 보다 유연하고 모듈화된 웹 애플리케이션을 개발할 수 있습니다.

			