Java Session对象的钝化和活化
钝化和活化的本质是序列化和反序列化
钝化:将内存中的session对象存储到硬盘,防止会话结束后session遗失。
活化:钝化的逆过程,读取硬盘中的session对象于内存中。
实现钝化的操作步骤如下:
1.配置apache-tomcat-9.0.27\conf\context.xml文件
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="2">
<Store className="org.apache.catalina.session.FileStore" directory="pow" />
</Manager>
上面的maxIdleSwap是最大时间限制,单位是秒,超过了这个时间,内存中的session对象,会自动的存储到directory指定的目录:apache-tomcat-9.0.27\work\Catalina\localhost\该项目\pow中。
2.创建一个监听器,并实现HttpSessionActivationListener,Serializable这两个接口
第一个接口实现监听(钝化和活化)的功能,第二个接口实现反序列化(活化)。
特别说明一下:该监听器不需要额外的配置web.xml.
public class A implements HttpSessionActivationListener,Serializable{
private String key;
public String setKey(String key){
this.key = key ;
}
public String getKey(){
return key;
}
@Override
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("活化完成!!!");
}
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("钝化完成!!!");
}
}
3.我们现在就可以通过jsp将上面的实例化对象放入session中
<body>
钝化页面:
<%
A a = new A();
a.setKey("卢泽龙大帅比");
session.setAttributte("a",a);
%>
</body>
运行上面的jsp过了一段时间就会看见控制台提示钝化完成!!
此时apache-tomcat-9.0.27\work\Catalina\localhost\该项目中可以看见新创建的文件夹pow。
4.验证(调用硬盘里面的session):
<body>
活化页面:<br/>
key的值为${sessionScope.a.key}
</body>
结果很成功的取出key值为“卢泽龙大帅比”,并且控制台打印出活化完成!
这些只是在下的片面理解,如有不对还望大佬指教!