当服务器关闭时,将session存入到硬盘中称为钝化,启动服务器将session取出,称为活化。
钝化:内存-->硬盘
活化:硬盘-->内存
session对象的四种状态: 个别监听器不需要配置web.xml
HttpSessionBindingListener
HttpSessionActivationListener
监听session对象的绑定和解绑:HttpSessionBindingListener
a.session.setAttribute("a","xx") 将对象a【绑定】在session中
b.session.removeAttribute("a")讲对象a从session中【解绑】
建立一个HttpBindingListener 类继承HttpSessionBindingListener实现邦定和解绑的监听
其中 this表示的就是绑定的setAttribute("a","xx")里面的a,
arg0可以用它获取到session
package Listener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; public class HttpBindingListener implements HttpSessionBindingListener{ @Override public void valueBound(HttpSessionBindingEvent arg0) { //绑定 System.out.println("绑定:bean对象(将bean对象加入到session域),绑定的对象"+this+"sessionId"+arg0.getSession().getId()); } @Override public void valueUnbound(HttpSessionBindingEvent arg0) { // 解绑 System.out.println("解绑bean对象"+this+"sessionId"+arg0.getSession().getId()); } }
建立一个测试类
<%@page import="Listener.HttpBindingListener"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% HttpBindingListener bean = new HttpBindingListener(); session.setAttribute("bean", bean);// %> </body> </html>可以看到控制台显示session的绑定和解绑过程
刷新之后的第一个session会被解绑,因为重新new了一个相同的session对象a
导致第一session对象被覆盖并解绑
监听session对象的钝化和活化:HttpSessionActivationListener
c.钝化
d.活化