[Servlet] 서블릿 이벤트 (Servlet Event)
웹에서 이벤트가 사용되는 경우는 다음과 같다.
- 세션의 생성, 소멸
- 속성 변경
- 컨텍스트 초기화
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) { } }
확인~