HttpSessionActivationListener
- 实现此接口的JavaBean,可以感知自己被活化(从硬盘到内存)和钝化(从内存到硬盘)的过程。
- 如果需要同时保存Session中的JavaBean则JavaBean也要实现Serializable序列化接口。
- 实现此接口的JavaBean与HttpSessionBindingListener一样,不必配置到web.xml中。
要实现此功能,必须要先配置以下信息:
<Context path="/myProj" docBase="D:/programfiles/projects/MyProj/WebRoot">
<!-- 配置会话的持久化 -->
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
maxActiveSessions="1"
minIdleSwap="120"
maxIdleSwap="180"
maxIdleBackup="5"
maxInactiveInterval="1800">
<Store className="org.apache.catalina.session.FileStore"
directory=“保存目录">
</Store>
</Manager>
</Context>
本次测试运行环境是Tomcat8.5,该版本不需要配置,钝化的文件就在当前项目的运行目录中,当然要修改位置可以通过上面的模板进行配置。
运用场景
当项目已经投入运营时,遇到维护时需要重启服务器,而有些信息是存储在用户的session中,如果不进行钝化用户的一些信息存在丢失的可能。
测试过程
- 多次开启新的浏览器窗口,并记录SESSIONID。
- 使用shutdown.bat关闭tomcat应用。
- 观察指定的目录下是否存在*.session文件。
- 再次重新启动tomcat,并使用http://localhost:8080/projectName;jsessionid=xxxxx指定sessionid的方式访问服务器。
- 观察是否为关闭tomcat之前的同一个Session。
- 一般情况下,PersistentManager持久化Session与Cookie共同使用。
- HttpSessionActivationListener只做为监听类,监听自己是否钝化或是活化。