WebApp服务器 禁用/启用 SESSION持久化

通过观察不难发现,这两个错误都是发生在“loading sessions from persistent storage”之时,也就是从持久化文件还原session的时候。我们都知道Tomcat能够在容器关闭时将session中的数据持久化到文件系统中,待容器重启时将其还原,但前提条件是保存在session中的数据类型均实现了java.io.Serializable接口,glassfish的 Servlet容器是基于Tomcat构建的,所以原理基本相同,而且Glassfish是默认开启session持久化的。

于是解决第一个问题的答案就有了:cn.beans.UserSession中的time属性是java.util.Date类型的,而Date没有实现 Serializable接口、所以只需创建一个Date的子类令其实现Serializable接口,并将time定义为该子类的对象即可。

而解决第二个问题就需要彻底保证所有保存在session中的数据都是序列化了的才行。当然如果不考虑session持久化就不需要这样做了,只需禁用session持久化功能即可,这一点上tomcat与glassfish略有不同:

1.Tomcat中禁用/启用session持久化:在Tomcat的配置文件server.xml中添加以下内容:

禁用持久化:

<context path="..." reloadable="..." docbase="..." workdir="...">

<manager classname="org.apache.catalina.session.StandardManager">

</manager>

</context>



启用持久化:

<context path="..." reloadable="..." docbase="..." workdir="...">

<manager classname="org.apache.catalina.session.PersistentManager" saveonrestart="true">

</manager>

</context>

2.Glassfish中禁用/启用持久化:Glassfish项目中都有名为sun-web.xml的文件,要禁用session持久化只需在该文件中进行以下配置

<sun-web-app>  
<session-config>
<session-manager>
<manager-properties>
<property name="sessionFilename" value="" />
</manager-properties>
</session-manager>
</session-config>
</sun-web-app>



sessionFilename的值是用来指定一个自定义名称的文件来保存session数据的,而将其设为空值便能够取消session持久化的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值