HttpSessionBindingListener:
保存在Session域中的对象有两种绑定状态:绑定到Session中与从Session域中解除绑定
实现了HttpSessionBindingListener接口的类可以通过实现该接口的两个抽象方法来感知该类对象是否被添加进了HttpSession对象中,和是否有该类对象被从HttpSession对象中删除了
创建HttpSessionBindingListener监听器:
- 1、创建一个普通Java类,实现HttpSessionBindingListener接口
- 2、(eclipse)直接创建一个Listener,选择实现HttpSessionBindingListener接口
在该监听器中实现HttpSessionBindingListener接口的两个抽象方法:
- 1、valueBound():向HttpSession对象中添加该类对象数据时自动执行该方法
- 2、valueUnbound():从HttpSession对象中删除该类对象数据时会自动执行该方法
例:
package cn.jingpengchong.listener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class Student implements HttpSessionBindingListener {
private String name;
public Student(String name) {
this.name = name;
}
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println("Student类对象" + this.name + "被添加到了session");
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println("Student类对象" + this.name + "被从session中删除了");
}
}
当执行“session.setAttribute(“student”, new Student(“沙悟净”));”时,会在eclipse控制台打印出“Student类对象沙悟净被添加到了session”;
当执行“session.removeAttribute(“student”);”时,会在eclipse控制台打印出“Student类对象沙悟净被从session中删除了”。
HttpSessionActivationListener:
保存在Session域中的对象有两种存储状态:文件“SESSION.ser”中或内存中
HttpSessionActivationListener接口用于监听实现该接口和Serializable接口的Java类的对象随session钝化和活化事件,可以通过实现HttpSessionActivationListener接口的两个抽象方法来感知存储在HttpSession对象中的该类对象数据从内存保存到“SESSION.ser”文件中和从“SESSION.ser”文件中读取到内存中的时机
创建HttpSessionActivationListener监听器:
- 1、创建一个普通Java类,实现HttpSessionActivationListener接口
- 2、(eclipse)直接创建一个Listener,选择实现HttpSessionActivationListener接口
在该监听器中实现HttpSessionActivationListener接口的两个抽象方法:
- 1、sessionDidActivate():当绑定到HttpSession对象中的对象将要随HttpSession对象被活化(从硬盘中“SESSION.ser”文件内读到内存中)之后,自动执行该方法
- 2、sessionWillPassivate():当绑定到HttpSession对象中的对象将要随HttpSession对象被钝化(向硬盘中“SESSION.ser”文件内写入HttpSession对象)之前,自动执行该方法
例:
package cn.jingpengchong.listener;
import java.io.Serializable;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
public class UserInfo implements Serializable, HttpSessionActivationListener {
private String name;
private static final long serialVersionUID = 1L;
public UserInfo(String name) {
this.name = name;
}
public void sessionDidActivate(HttpSessionEvent arg0) {
System.out.println("文件-->内存");
}
public void sessionWillPassivate(HttpSessionEvent arg0) {
System.out.println("内存-->文件");
}
}
将该类对象存储在session对象中,关闭服务器时会在eclipse控制台打印出“内存–>文件”;开启服务器时,会在eclipse控制台打印出“文件–>内存”。