什么是活化与钝化
当一个会话开始时,Servlet容器会为会话创建一个HttpSession对象。Servlet容器在某些情况下会把这些HttpSession对象从内存中转移到永久性存储设备中(钝化),并在需要访问HttpSession信息时再把它们加载到内存中(活化)。
如果要钝化一个JavaBeen对象之类的,这个对象必须被实现Serializable接口。
上述过程被称为会话的持久化,持久化有两个好处:
- 节约内存空间
- 确保服务器重启或单个Web应用重启后,能够恢复重启前的会话。
以下情况会被持久化
- 服务器或单个应用终止
- 会话不活动时间到达限定值
- 会话数目太多,到达了限定值
以下情况会被活化
- 服务器或者是单个Web应用被重启
- 客户端向Web应用发起HTTP请求,相应的会话会被激活
Tomcat中如何配置活化与钝化
Tomcat的会话管理器包括两种:`org.apache.catelina.session.StandardManager`类:标准会话管理器
org.apache.catalina.session.PersistentManager类:功能更强大
StandardManager
标准会话管理器的持久化对象文件被保存在:<CATALINA_HOME>/work/Catalina/[hostname]/[application_name]/SESSIONS.ser
PersistentManager
- 具有容错功能,及时把HttpSession对象备份到会话Store中,当Tomcat服务器意外关闭后再重启时,可以恢复HttpSession。
- 可以灵活的控制内存中HttpSession对象的数目,将部分HttpSession对象转移到会话store中。
默认存储目录
<CATALINA_HOME>/work/Catalina/[hostname]/[application_name]/SESSIONS.ser
配置如下,在META-INF目录下的Context.xml(不一定要在这个位置配置,配置context元素的五种方法都可以配置,但这样最简单方便)
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="C:\Users\victor\Desktop\js"/>
</Manager>
</Context>
className:指定会话管理器的类名
saveOnRestart:设置为true,当web应用终止时,会把内存中所有的
HttpSession对象都持久化。
maxActiveSessions:设定可以处于运行时状态的会话的最大数目,如果超过这一数目,Tomcat会将一下HttpSession对象持久化。-1表示不限制。
minIdleSwap:指定会话处于不活动状态的最短时间(单位为秒),超过这一时间的HttpSession对象会被持久化。-1表示不限制。
maxIdleSwap:指定处于不活动状态的最长时间。
maxIdleBackup:指定会话处于不活动状态的最长时间,超过这一时间Tomcat
将为这个HttpSession持久化。
maxInactiveInterval:指定会话处于不活动状态的最长时间,超过,Tomcat会使这个会话过期。