세션 리스너 ( Session Listener ) 사용 예제

2014. 7. 29. 11:05공부/SPRING

세션 리스너


세션 리스너는 세션이 생성되거나 사라질 때, 알림을 받는 녀석입니다.


이 녀석은 로그를 남기거나, 생성되어 있는 모든 세션을 관리할 때 사용하면 참 좋은 녀석입니다.


이 녀석은 또한 분산 웹 어플리케이션을 작성할 때, 클러스터의 다른 장비로 세션 복제가 기대된대로 잘 작동하는지 확인하는 데 참 좋은 녀석입니다. 


만약, 세션의 변화를 알고싶다면, Session Attribute Listener 를 확인해봐라. 이 두 인터페이스들은 생성, 삭제, 변화 이벤트를 잡는 하나의 리스너를 만들기 위해, 하나의 클래스에 구현될 수 있습니다.


이 페이지는 오직 세션 리스너 인터페이스만을 다룹니다.



세션 리스너 생성


세션 리스너를 생성하기 위해 HttpSessionListener 인터페이스를 구현하는 클래스를 만듭니다.


이는 다음 두 메쏘드를 구현하는 것을 수반합니다.


public void sessionCreated(HttpSessionEvent sessionEvent);
public void sessionDestroyed(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>