Java/Servlet & JSP

리스너 예제

체리필터 2009. 2. 3. 11:10
728x90
반응형
1. 세션 카운터

package com.example;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class BeerSessionCounter implements HttpSessionListener {
    static private int activeSessions;

    public static int getActiveSessions() {
        return activeSessions;
    }

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        activeSessions++;
        System.out.println("activeSessions : " + activeSessions);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        activeSessions--;
        System.out.println("activeSessions : " + activeSessions);
    }
}

  <listener>
      <listener-class>
          com.example.BeerSessionCounter
      </listener-class>
  </listener>

위와 같이 하게 되면 웹 애플리케이션에 있는 활성화된 세션의 개수를 확인할 수 있다.

2. 속성 리스터

package com.example;

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

public class BeerAttributeAdded implements HttpSessionAttributeListener {

    @Override
    public void attributeAdded(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        String name = arg0.getName();
        Object value = arg0.getValue();
       
        System.out.println("Attribute added : " + name + ": " + value);
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        String name = arg0.getName();
        Object value = arg0.getValue();
       
        System.out.println("Attribute removed : " + name + ": " + value);
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        String name = arg0.getName();
        Object value = arg0.getValue();
       
        System.out.println("Attribute replaced : " + name + ": " + value);
    }

}

  <listener>
      <listener-class>
          com.example.BeerAttributeAdded
      </listener-class>
  </listener>

위와 같이 하게 되면 속성이 세션에 추가, 제거, 대체 되는 경우를 리슨 할 수 있다.
System.out.printl으로 출력하게 되면 톰캣의 경우 catalina.out 파일에 로그로 쌓이게 된다.

3. 속성 클래스

package com.example;

import java.io.Serializable;

import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent;

public class Dog implements HttpSessionBindingListener, HttpSessionActivationListener, Serializable {
    private String breed;
   
    public Dog(String breed) {
        this.breed = breed;
    }
   
    public String getBreed() {
        return breed;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void sessionDidActivate(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void sessionWillPassivate(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
       
    }
}

  <listener>
      <listener-class>
          com.example.Dog
      </listener-class>
  </listener>

valueBound, valueUnbound는 앞에서도 설명했듯이 자신이 세션에 들어가고 나오는 것을 리슨 하는 것이다.
반면에 sessionDidActivate, sessionWillPassivate는 새로운 가상머신으로 옮겨 가더라도 세션이 살아 있게 만드는 경우에 리슨 하는 것이다.
sessionWillPassivate는 새로운 가상머신으로 옮겨 가기 전에 직렬화 되지 않은 필드들을 읽어 들이는 부분이고, sessionDidActivate는 새로운 가상머신으로 옮겨 간 후 필드들을 원래대로 돌려 놓는(sessionWillPassivate와 반대) 부분이다.

따라서 HttpSessionBindingListener 부분은 DD(web.xml)에 설정할 필요가 없으며, HttpSessionActivationListener는 web.xml에 설정해야 한다.



728x90
반응형

'Java > Servlet & JSP' 카테고리의 다른 글

스크립틀릿에서 변수 선언하기  (0) 2009.02.04
간단한 Jsp 시작하기  (0) 2009.02.04
HttpSessionBindingListener와 HttpSessionAttributeListener  (0) 2009.02.02
Cookie 사용하기  (0) 2009.02.02
Session 관리  (0) 2009.01.30