앎/web

[Servlet] 서블릿 이벤트 (Servlet Event)

후니아부지 2014. 3. 17. 13:37

웹에서 이벤트가 사용되는 경우는 다음과 같다.

  • 세션의 생성, 소멸
  • 속성 변경
  • 컨텍스트 초기화


web.xml 에 <listener>에 등록해주면 웹 서버가 자동으로 이벤트를 감지하여 지정한 클래스 메서드를 실행시켜 준다.

<listener> 태그는 최상위에 넣는다.

  <listener>
    <display-name>이벤트 리스너 명</display-name>
    <listener-class>리스너클래스</listener-class>
  </listener>
  
  <filter>
    ....
  </filter>
  
  <filter-mapping>
    ....
  </filter-mapping>
  
  <servlet>
    ....
  </servlet>
  
  <servlet-mapping>
    ....
  </servlet-mapping>


설정할 수 있는 이벤트는 다음과 같다.

 이벤트

 ServletContextListener 

 발생시점 

 ServletContext 객체의 초기화 또는 소멸 시 발생

 메서드

 contextInitialized() 

 contextDestroyed()

 이벤트

 ServletContextAttributeListener

 발생시점

 ServletContext 객체에 속성이 추가, 삭제, 수정될 때 발생

 메서드

 attributeAdded()

 attributeRemoved()

 attributeReplaced()

 이벤트

 HttpSessionListener

 발생시점

 HttpSession 객체가 생성되거나 소멸될 때 발생

 메서드

 sessionCreated()

 sessionDestroyed()

 이벤트

 HttpSessionAttributeListener

 발생시점

 HttpSession 객체에 속성이 추가, 삭제, 수정될 때 발생

 메서드

 attributeAdded()

 attributeRemoved()

 attributeReplaced()

 이벤트

 ServletRequestListener

 발생시점

 ServletRequest 객체의 초기화 또는 소멸 시 발생 

 메서드

 requestInitialized()

 requestDestroyed()

 이벤트

 ServletRequestAttributeListener

 발생시점

 ServletRequest 객체에 속성이 추가, 삭제, 수정될 때 발생

 메서드

 attributeAdded()

 attributeRemoved()

 attributeReplaced()


앞서 작성한 서블릿 필터의 예제 소스에 추가해서 테스트한다.

예제) 세션에 속성 추가 시 이벤트 발생을 확인한다.

web.xml

<servlet> 태그보다 앞에 추가한다.

  ....
  <listener>
    <display-name>SessionListener</display-name>
    <listener-class>com.study.SessionListener</listener-class>
  </listener>
  ....


SessionListener.java

리스너 클래스를 생성한다.

package com.study;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class SessionListener implements HttpSessionAttributeListener {
  public void attributeAdded(HttpSessionBindingEvent _evt) {
    System.out.println("Event (attributeAdded)");
    System.out.println("  => Name: " + _evt.getName());
    System.out.println("  => Value: " + _evt.getValue());
  }
  
  public void attributeRemoved(HttpSessionBindingEvent _evt) {
  }

  public void attributeReplaced(HttpSessionBindingEvent _evt) {
  }
}


확인~