Tomcat实现Session对象的持久化原理及配置方法介绍
来源:互联网 发布:ajax如何获取json数据 编辑:程序博客网 时间:2024/06/05 20:27
当一个Session开始时,Servlet容器会为Session创建一个HttpSession对象。Servlet容器在某些情况下把这些 HttpSession对象从内存中转移到文件系统或数据库中,在需要访问 HttpSession信息时再把它们加载到内存中。
实现:
要完成session持久化,存放在session里的对象必须要实现java.io.Serializable 接口。
Session的持久化是由Session Manager来管理的。Tomcat提供了两个实现类:
org.apache.catalina.session.StandardManager (默认)
org.apache.catalina.session.PersistentManager
下面分别就StandardManager和PersistentManager两种实现进行介绍。
配置:
Tomcat默认是已经启用持久化配置,若要禁用持久化功能,则只需要在<Context>节点里配置
<Manager pathname="" />;
持久化配置可进行全局配置和针对某一站点进行配置。全局配置需要在cof文件夹context.xml的
<Context>节点中配置<Manager>,若要针对某一站点配置则需要在cof文件夹server.xml的<Host><Context>
节点中添加<Manager>配置。
1.StandardManager
StandardManager是默认的Session Manager。它的实现机制为:当Tomcat服务器关闭或重启,或者Web应用被重新加载时,会对在内存中的HttpSession对象进行持久化, 并把它们保存到文件系统中,默认的文件为<CATALINA_HOME>/work/Catalina/hostname/ applicationname/SESSIONS.ser。
<Manager
className=”org.apache.catalina.session.StandardManager”
debug=”0”
maxInactiveInterval=”-1″
/>
注:如果突然终止该服务器,则所有会话都将丧失,因为StandardManager没有机会实现存盘处理。
2.PersistentManager
PersistentManager能够把Session对象保存到Session Store中,它提供了比 StandardManager更为灵活的Session管理功能,它具有以下功能:
对内存中的HttpSession对象进行持久化,把它们保存到Session Store中。
具有容错功能,可以及时把Session备份到Session Store中,当Tomcat服务器意外关闭后再重启时,可以从Session Store中恢复Session对象。
可以灵活控制在内存中的Session数目,将部分Session转移到Session Store中。
通过使用Store,将内存中的session备份到文件或数据库中。当备份一个session对象时,该session对象会被复制到存储器中,而原对象仍然留在内存中。因此如果服务器崩溃,就可以从存储器中获取活动的session对象。当session被换出时,他会被移动到存储器中,因为当前活动的session对象超过了上限值,或者session对象闲置了过长时间。换出session节省内存空间。
Tomcat实现持久化Session Store的接口为org.apache.Catalina.store,目前提供了两个实现这一接口的类,即 org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore。
实现配置PersistentManager大多是两种形式
形式一:存储在本地文件中需要配置conf目录里的context.xml文件
在<Context>节点下添加如下<Manager>节点:
<Manager className="org.apache.catalina.session.PersistentManager"
debug="0"
saveOnRestart="false"
maxActiveSession="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1">
<Store className="org.apache.catalina.session.FileStore" directory="../session" />
</Manager>
形式二:存储在数据库中需要配置store节点
<Store
calssName="org.apache.catalina.JDBCStore"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password="
sessionTable="tomcat_session"
sessionIdCol="session_id"
sessionDataCol="session_data"
sessionValidCol="session_valid"
sessionMaxInactiveCol="max_inactive"
sessionLastAccessedCol="last_access"
sessionAppCol="app_name"
checkInterval="60"
debug="99" />
参数说明:
maxActiveSessions-可处于活动状态的session数,default -1 不限制
checkInterval -检查session是否过期的时间间隔,default 60s
saveOnRestart-服务器关闭时,是否将所有的session保存到文件中;
minIdleSwap/maxIdleSwap-session处于不活动状态最短/长时间(s),sesson对象转移到File Store中;(-1表示没有限制)
maxIdleBackup-超过这一时间,将session备份。(-1表示没有限制)
directory-文件存储位置work\Catalina\host name\web app\session\文件名.session
可能出现的问题:
1、
严重: storing attribute '/test/ip/testAction!send.action' with value NOT_SERIALIZED
也就是说程序在运行的时候会把访问路径放到session中,但这个数据是没有序列化过的,导致反序列化的时候出错。
在关闭和重启Tomcat 5时, tomcat 会试图 serialize存在的session资源. 如果 sessions中相关的对象没有实现 serializable 接口, 就会出现Cannot serialize session attribute XXX for 异常.
如果你不想看到该异常, 也不想保存session. 那么你可以在项目部署描述文件中(如. test.xml,)(instead of just exploding the war) 的 <Context> tags中间 加上 :
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="false"/>
这样 tomcat 在关闭的时候就不会保存session资源了.
你也可以在server.xml中指定上面的值. 这也所有的程序都使用这个设置了.
- Tomcat实现Session对象的持久化原理及配置方法介绍
- Tomcat实现Session对象的持久化原理及配置方法介绍
- TOMCAT SESSION的持久化方法
- tomcat配置session持久化
- 实现Session持久化的配置
- Tomcat实现Session ID的持久化保存实现
- Tomcat实现Session ID的持久化保存实现
- Tomcat默认的Session持久化的配置
- session的持久化原理
- tomcat中session持久化配置
- Session数据的持久化读取实现原理
- 基于redis实现tomcat8及以上版本的tomcat集群的session持久化实现(tomcat-redis-session-manager二次开发)
- hibernate 持久化对象 session中的方法
- tomcat session 持久化
- tomcat session 持久化
- tomcat session持久化
- Tomcat5.5.12 实现Session持久化的配置
- Tomcat提供的session持久化
- hdoj--5615--Jam's math problem(数学)(交叉相乘)
- 委托和协议
- 欢迎使用CSDN-markdown编辑器
- mysql心得
- Spring MVC之 请求
- Tomcat实现Session对象的持久化原理及配置方法介绍
- 顺序表
- mysql心得
- JavaScript事件绑定与删除
- 1004 problem E
- Unity 怪名称、血条和飘血跟随
- yum install出错问题
- NuSOAP详细项目案例
- Tomcat虚拟目录配置