개발/servlet
리스너(Listener)
함수형 인간
2025. 3. 13. 05:49
서블릿 리스너 (Servlet Listener)
서블릿 리스너는 웹 애플리케이션에서 발생하는 특정 이벤트(Event)를 감지하고, 이벤트 발생 시 미리 정의된 동작을 수행하는 컴포넌트이다. 리스너를 사용하면 웹 애플리케이션의 라이프사이클, 세션 관리, 속성(Attribute) 변경 등 다양한 이벤트에 대한 처리를 구현할 수 있다.
주요 특징
- 이벤트 기반 프로그래밍: 특정 이벤트 발생 시 자동으로 리스너의 메서드가 호출된다.
- 선언적 구성: web.xml (Deployment Descriptor) 또는 애노테이션(@WebListener)을 사용하여 리스너를 등록.
- 다양한 이벤트 유형 지원: 웹 애플리케이션, 컨텍스트, 세션, 요청 등과 관련된 다양한 이벤트를 처리할 수 있다.
리스너의 종류 및 역할
Java EE는 다양한 종류의 리스너 인터페이스를 제공하며, 각 인터페이스는 특정 이벤트 유형에 대응된다. 주요 리스너 종류는 다음과 같다.
- ServletContextListener:
- 웹 애플리케이션(컨텍스트)의 시작과 종료 이벤트를 처리.
- contextInitialized(ServletContextEvent sce): 웹 애플리케이션 초기화 시 호출. (웹 애플리케이션 시작 시 한 번)
- contextDestroyed(ServletContextEvent sce): 웹 애플리케이션 종료 시 호출. (웹 애플리케이션 종료 시 한 번)
- 용도: 웹 애플리케이션 초기화 작업 (데이터베이스 연결, 설정 로드 등), 자원 해제 등.
- ServletContextAttributeListener:
- 웹 애플리케이션(컨텍스트)의 속성(Attribute) 추가, 제거, 변경 이벤트를 처리.
- attributeAdded(ServletContextAttributeEvent event): 속성 추가 시 호출
- attributeRemoved(ServletContextAttributeEvent event): 속성 제거 시 호출
- attributeReplaced(ServletContextAttributeEvent event): 속성 변경 시 호출
- 용도: 컨텍스트 속성 변경 로깅, 특정 속성 값에 따른 처리 등
- HttpSessionListener:
- 세션 생성 및 소멸 이벤트를 처리.
- sessionCreated(HttpSessionEvent se): 세션 생성 시 호출
- sessionDestroyed(HttpSessionEvent se): 세션 소멸 시 호출 (타임아웃, invalidate() 호출)
- 용도: 세션 카운팅, 사용자 로그인/로그아웃 처리, 세션 자원 관리 등
- HttpSessionAttributeListener:
- 세션의 속성 추가, 제거, 변경 이벤트를 처리.
- attributeAdded(HttpSessionBindingEvent event): 세션 속성 추가
- attributeRemoved(HttpSessionBindingEvent event): 세션 속성 제거
- attributeReplaced(HttpSessionBindingEvent event): 세션 속성 변경
- 용도: 세션에 attribute가 추가, 삭제, 수정될때 이벤트를 처리.
- ServletRequestListener:
- 클라이언트의 요청(Request) 생성 및 소멸 이벤트를 처리.
- requestInitialized(ServletRequestEvent sre): 요청 초기화 시 호출 (요청이 들어올 때마다)
- requestDestroyed(ServletRequestEvent sre): 요청 소멸 시 호출 (응답이 완료될 때마다)
- 용도: 요청 처리 시간 측정, 요청 정보 로깅 등
- ServletRequestAttributeListener:
- 요청(Request)의 속성 추가, 제거, 변경 이벤트를 처리.
- attributeAdded(ServletRequestAttributeEvent srae): 속성 추가 시 호출
- attributeRemoved(ServletRequestAttributeEvent srae): 속성 제거 시 호출
- attributeReplaced(ServletRequestAttributeEvent srae): 속성 변경 시 호출
- 용도: 요청 속성 변경 로깅, 특정 속성 값에 따른 처리 등
리스너 설정 방법
web.xml (Deployment Descriptor):
XML
<listener>
<listener-class>com.example.MyServletContextListener</listener-class>
</listener>
애노테이션 (@WebListener): (Servlet 3.0 이상)
Java
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// 웹 애플리케이션 초기화 시 처리
System.out.println("Web Application Initialized!");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// 웹 애플리케이션 종료 시 처리
System.out.println("Web Application Destroyed!");
}
}