필터(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 |
필터와 리스너는 웹 애플리케이션의 요청과 응답을 가로채거나 이벤트를 처리하여 애플리케이션의 기능을 확장하고 모니터링할 수 있습니다. 이를 활용하면 보다 유연하고 모듈화된 웹 애플리케이션을 개발할 수 있습니다.