728x90
반응형
1. 세션 카운터
위와 같이 하게 되면 웹 애플리케이션에 있는 활성화된 세션의 개수를 확인할 수 있다.
2. 속성 리스터
위와 같이 하게 되면 속성이 세션에 추가, 제거, 대체 되는 경우를 리슨 할 수 있다.
System.out.printl으로 출력하게 되면 톰캣의 경우 catalina.out 파일에 로그로 쌓이게 된다.
3. 속성 클래스
valueBound, valueUnbound는 앞에서도 설명했듯이 자신이 세션에 들어가고 나오는 것을 리슨 하는 것이다.
반면에 sessionDidActivate, sessionWillPassivate는 새로운 가상머신으로 옮겨 가더라도 세션이 살아 있게 만드는 경우에 리슨 하는 것이다.
sessionWillPassivate는 새로운 가상머신으로 옮겨 가기 전에 직렬화 되지 않은 필드들을 읽어 들이는 부분이고, sessionDidActivate는 새로운 가상머신으로 옮겨 간 후 필드들을 원래대로 돌려 놓는(sessionWillPassivate와 반대) 부분이다.
따라서 HttpSessionBindingListener 부분은 DD(web.xml)에 설정할 필요가 없으며, HttpSessionActivationListener는 web.xml에 설정해야 한다.
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);
}
}
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>
<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);
}
}
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>
<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
}
}
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>
<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 |