개발/servlet

리스너(Listener)

함수형 인간 2025. 3. 13. 05:49

서블릿 리스너 (Servlet Listener)

서블릿 리스너는 웹 애플리케이션에서 발생하는 특정 이벤트(Event)를 감지하고, 이벤트 발생 시 미리 정의된 동작을 수행하는 컴포넌트이다. 리스너를 사용하면 웹 애플리케이션의 라이프사이클, 세션 관리, 속성(Attribute) 변경 등 다양한 이벤트에 대한 처리를 구현할 수 있다.

주요 특징

  • 이벤트 기반 프로그래밍: 특정 이벤트 발생 시 자동으로 리스너의 메서드가 호출된다.
  • 선언적 구성: web.xml (Deployment Descriptor) 또는 애노테이션(@WebListener)을 사용하여 리스너를 등록.
  • 다양한 이벤트 유형 지원: 웹 애플리케이션, 컨텍스트, 세션, 요청 등과 관련된 다양한 이벤트를 처리할 수 있다.

리스너의 종류 및 역할

Java EE는 다양한 종류의 리스너 인터페이스를 제공하며, 각 인터페이스는 특정 이벤트 유형에 대응된다. 주요 리스너 종류는 다음과 같다.

  1. ServletContextListener:
    • 웹 애플리케이션(컨텍스트)의 시작과 종료 이벤트를 처리.
    • contextInitialized(ServletContextEvent sce): 웹 애플리케이션 초기화 시 호출. (웹 애플리케이션 시작 시 한 번)
    • contextDestroyed(ServletContextEvent sce): 웹 애플리케이션 종료 시 호출. (웹 애플리케이션 종료 시 한 번)
    • 용도: 웹 애플리케이션 초기화 작업 (데이터베이스 연결, 설정 로드 등), 자원 해제 등.
  2. ServletContextAttributeListener:
    • 웹 애플리케이션(컨텍스트)의 속성(Attribute) 추가, 제거, 변경 이벤트를 처리.
    • attributeAdded(ServletContextAttributeEvent event): 속성 추가 시 호출
    • attributeRemoved(ServletContextAttributeEvent event): 속성 제거 시 호출
    • attributeReplaced(ServletContextAttributeEvent event): 속성 변경 시 호출
    • 용도: 컨텍스트 속성 변경 로깅, 특정 속성 값에 따른 처리 등
  3. HttpSessionListener:
    • 세션 생성 및 소멸 이벤트를 처리.
    • sessionCreated(HttpSessionEvent se): 세션 생성 시 호출
    • sessionDestroyed(HttpSessionEvent se): 세션 소멸 시 호출 (타임아웃, invalidate() 호출)
    • 용도: 세션 카운팅, 사용자 로그인/로그아웃 처리, 세션 자원 관리 등
  4. HttpSessionAttributeListener:
    • 세션의 속성 추가, 제거, 변경 이벤트를 처리.
    • attributeAdded(HttpSessionBindingEvent event): 세션 속성 추가
    • attributeRemoved(HttpSessionBindingEvent event): 세션 속성 제거
    • attributeReplaced(HttpSessionBindingEvent event): 세션 속성 변경
    • 용도: 세션에 attribute가 추가, 삭제, 수정될때 이벤트를 처리.
  5. ServletRequestListener:
    • 클라이언트의 요청(Request) 생성 및 소멸 이벤트를 처리.
    • requestInitialized(ServletRequestEvent sre): 요청 초기화 시 호출 (요청이 들어올 때마다)
    • requestDestroyed(ServletRequestEvent sre): 요청 소멸 시 호출 (응답이 완료될 때마다)
    • 용도: 요청 처리 시간 측정, 요청 정보 로깅 등
  6. 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!");
    }
}