Listener

kailyn·2024년 9월 18일

Servlet

목록 보기
6/6

01. Servlet Listener

01. Servlet Listener 개요

01-01. Servlet Listener란

  • 웹 컨테이너가 관리하는 LifeCycle 사이에 발생하는 이벤트를 감지하여, 이벤트 발생 시 그에 대한 일련의 로직을 처리하는 인터페이스이다.

01-02. Servlet Listener 동작 구조

  • 대상 서블릿 동작에 따른 리스너 메소드가 동작한다.

01-03. Servlet Listener 사용하는 경우

  1. Context 변경이 발생하는 경우 (→ 톰캣 컨테이너 자체에 리스너 연결)
    1. 웹 애플리케이션의 시작, 종료 시점
    2. context에 attribute 추가, 제거, 수정 시점
  2. Session 객체에 변경이 발생하는 경우 (→ 세션에서 발생 가능한 이벤트)
    1. HttpSession의 시작, 종료 시점
    2. HttpSession에 attribute 추가, 제거 , 수정 시점
  3. Request 객체에 변경이 발생하는 경우 (→ request 관련 이벤트)
    1. ServletRequest 생성, 소멸 시점
    2. ServletRequest에 attribute 추가, 제거, 수정 시점

02. Servlet Listener 종류

02-01. Context Listener

  1. ServletContextListener
    • 웹 애플리케이션의 시작과 종료 시 자동 발생하는 이벤트로, Context 생성/소멸 및 Application 생성/소멸 시점에 로직을 처리한다.
    • Method
      • contextInitialized (ServletContextEvent e) : void → 웹 컨테이너가 처음 구동되어 ServletContext가 생성될 때 작동
      • contextDestoryed (ServletContextEvent e) : void → 웹 컨테이너가 종료될 때, ServletContext가 소멸될 때 작동
  2. ServletContextAttributeListener
    • 웹 컨테이너에 저장된 속성의 값이 변경될 경우 발생하는 이벤트로, ServletContext 객체에 속성이 추가, 삭제, 수정되는 시점에 로직을 처리한다.
    • Method
      • attributeAdded (ServletContextAttributeEvent e) : void → 새로운 속성 값이 추가될 때 실행
      • attributeRemoved (ServletContextAttributeEvent e) : void → 속성 값이 제거될 때 실행
      • attributeReplaced (ServletContextAttributeEvent e) : void → 속성 값이 변경될 때 실행

02-02. Session Listener

  1. HttpSessionListener

    • HTTP session의 생성 및 소멸 시에 작동하는 이벤트로, HttpSession 객체가 생성되거나 소멸되는 시점에 로직을 처리한다.
    • Method
      • sessionCreated (HttpSession e) : void → Session 생성 시 실행
      • sessionDestoryed (HttpSession e) : void → Session 무효화 될 때 실행
  2. HttpSessionAttributeListener

    • Session에 대한 속성의 값이 변경될 경우 발생하는 이벤트로, HttpSession에 대한 속성 값이 변경될 경우 로직을 처리한다.
    • Method
      • attributeAdded (HttpSessionBindingEvent e) : void → Session에 새로운 속성 값이 추가될 때 실행
      • attributeRemoved (HttpSessionBindingEvent e) : void → Session에 속성 값이 제거될 때 실행
      • attributeReplaced (HttpSessionBindingEvent e) : void → Session에 속성 값이 변경될 때 실행
  3. HttpSessionBindingListener

    • 현재 Session에 객체가 추가되거나 해제될 때 발생하는 이벤트로, 사용자의 현재 Session에 바인딩 되거나 해제될 객체가 발생할 경우 로직을 수행한다.
    • Method
      • valueBound (HttpSessionBindingEvent e) : void → 객체가 Session에 연결될 때 실행
      • valueUnBound (HttpSessionBindingEvnet e) : void → 객체가 Session으로부터 연결이 해제될 때 실행
    • (참고) HttpSessionAttributeListener 와 HttpSessionBindingListener 의 차이
      • HttpSessionAttributeListener : 세션에 어떤 속성이 추가/수정/삭제되는 이벤트가 발생한 경우
      • HttpSessionBindingListener : 자신이 세션에 속성으로 추가/삭제된 경우
  4. HttpSessionActivationListener

    • HTTP session이 활성화 또는 비활성화를 감지했을 때 작동하며, HttpSession이 새로 생성되어 활성화될 때 로직을 처리한다.

    • Method

      • sessionDidActivate (HttpSessionEvent e) : void → Session 활성화 될 때
      • sessionWillPassivate (HttpSessionEvent e) : void → Session 비활성화 되려고 할 때
    • (참고) session migration , changes to id

      • session migration : session 활성화 상태에 따라 동작한다.

      • changes to id : session id 새로 발급되거나 변경되었을 때, session migration과 엮어서 사용한다.

      • session migration이 필요한 경우는 다음과 같다.

        • 사용자가 많아지면 똑같은 프로그램 탑재한 서버를 추가로 사용한다.

        • 이런 경우 클라이언트로부터 요청이 들어왔을 때 중간에서 요청을 각 서버로 분산시키는 역할을 하는 것이 L4 스위치로 로드 밸런서라고도 부른다. 이 스위치는 라운드 로빈 방식 사용한다.

        • 서버가 분산된 경우 세션을 공유해 사용(= 세션 클러스트링)할 수 있도록 하는데, 이때 세션이 유효한지, 활성화 상태인지 등을 확인하기 위해 이벤트 리스너를 사용한다.

02-03. Request Listener

  1. ServletRequestListener
    • 클라이언트로부터 서버로 요청 시 자동 발생하는 이벤트로, request 객체가 생성되거나 소멸되는 시점에 로직을 처리한다.
    • Method
      • requestInitialized (ServletRequestEvent e) : void → request 생성 시 작동
      • requestDestroyed (ServletRequestEvent e) : void → request 소멸 시 작동
  2. ServletRequestAttributeListener
    • request에 대한 속성의 값이 변경될 경우 발생하는 이벤트로, request객체에 대한 속성 값이 변경될 경우 로직을 처리한다.
    • Method
      • attributeAdded (ServletRequestAttributeEvent e) : void → request에 새로운 속성 값이 추가될 때 실행
      • attributeRemoved (ServletRequestAttributeEvent e) : void → request에 속성 값이 제거될 때 실행
      • attributeReplaced (ServletRequestAttributeEvent e) : void → request에 속성 값이 변경될 때 실행
profile
나는 할 수 있다...!

0개의 댓글