2014. 7. 29. 11:05ㆍ공부/SPRING
세션 리스너
세션 리스너는 세션이 생성되거나 사라질 때, 알림을 받는 녀석입니다.
이 녀석은 로그를 남기거나, 생성되어 있는 모든 세션을 관리할 때 사용하면 참 좋은 녀석입니다.
이 녀석은 또한 분산 웹 어플리케이션을 작성할 때, 클러스터의 다른 장비로 세션 복제가 기대된대로 잘 작동하는지 확인하는 데 참 좋은 녀석입니다.
만약, 세션의 변화를 알고싶다면, Session Attribute Listener 를 확인해봐라. 이 두 인터페이스들은 생성, 삭제, 변화 이벤트를 잡는 하나의 리스너를 만들기 위해, 하나의 클래스에 구현될 수 있습니다.
이 페이지는 오직 세션 리스너 인터페이스만을 다룹니다.
세션 리스너 생성
세션 리스너를 생성하기 위해 HttpSessionListener 인터페이스를 구현하는 클래스를 만듭니다.
이는 다음 두 메쏘드를 구현하는 것을 수반합니다.
public void sessionCreated(HttpSessionEvent sessionEvent); |
각 리스너 클래스들은 매개변수가 없는 생성자를 가져야 합니다.
sessionCreated()
이 메쏘드는 세션이 생성될 때마다 호출됩니다.
sessionDestroyed()
이 메쏘드는 세션이 사라질 때마다 호출됩니다. ( 예를 들면 세션 타임아웃으로 인한 )
HttpSession
세션은 HttpSessionEvent 객체를 통해 위 메쏘드들로 전달되어집니다.
다음과 같이 사용할 수 있습니다.
HttpSession session = sessionEvent.getSession();
전체 예제
import javax.servlet.*;
public final class MySessionListener
implements HttpSessionListener {
public MySessionListener() {
}
public void sessionCreated(HttpSessionEvent sessionEvent) {
// 생성된 세션을 받습니다.
HttpSession session = sessionEvent.getSession();
// 세션에 무언가 저장을 하고, 메시지를 남깁니다.
try {
System.out.println("[MySessionListener] Session created: "+session);
session.setAttribute("foo", "bar");
} catch (Exception e) {
System.out.println("[MySessionListener] Error setting session attribute: " + e.getMessage());
}
}
public void sessionDestroyed(HttpSessionEvent sessionEvent) {
// 사라질 세션을 받습니다.
HttpSession session = sessionEvent.getSession();
// 메시지를 남깁니다.
System.out.println("[MySessionListener] Session invalidated: "+session);
System.out.println("[MySessionListener] Value of foo is: " + session.getAttribute("foo"));
}
}
web.xml에 세션 리스너 추가
위에서 만든 클래스를 WEB-INF/classes 에 넣고, 세션 리스너를 작동시키기 위해 web.xml에 다음 내용을 추가합니다.
<listener>
<listener-class>MySessionListener</listener-class>
</listener>