session 的钝化和活化

本文介绍了Session钝化和活化的概念及配置方法,详细解释了如何通过设置maxIdleSwap参数来控制Session钝化的时间,并演示了实现HttpSessionActivationListener接口以监控Session状态变化的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

session的钝化和活化

就是如果网站的session的个数过多的话,内存就会消耗的太多,为了不使内存消耗的太多,所以就把session序列化

放到硬盘中,如果用户再访问你的时候再从硬盘中反序列化放到内存中,这个过程是session 的钝化和活化

那么怎么控制session的要多长时间才要钝化

<Context>
	<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
		<Store className="org.apache.catalina.session.FileStore" directory="mysession"/>
	</Manager>
</Context>

配置在这个位置就是表示的是对所有的项目生效的

应该配置到单独的项目中,上面的maxIdleSwap="1" 表示的是session到了一分钟以后会钝化

启动服务器

如果是myeclipse 的话,过了一分钟会在mysession 的文件夹下面生成一个session的文件

在这个下面会一个文件生成一session

这就是钝化,即使是活化了以后这个文件也不会消失

再一次访问的时候,session就又加载到内存中了,用户是根本感受不到的

 

 

当javabean 实现了这个接口以后,当session序列化的时候,javabean 也就跟着序列化了,当session 活化的时候,javabean 也会跟着一起活化了

HttpSessionActivationListener 讲解 代码

public class User implements HttpSessionActivationListener{
    @Override
    public void sessionWillPassivate(HttpSessionEvent se) {
        //session 从内存到硬盘
        System.out.println("啊~我陪session去火星了,地球已经不安全了!");
    }

    @Override
    public void sessionDidActivate(HttpSessionEvent se) {
        //session 从硬盘到内存
        System.out.println("啊~我和session一起重返地球了!");
    }
}
 

开始演示

 

等待一分钟会钝化

实际上user 并没有陪着session 钝化到硬盘上,实际上它已经死了

最终的结果是

由于session 觉得地球不安全回火星了,user 对象准备要通往火星的火车,session问他,你有票吗,没有票就不让上,它就死在地球上了

由于user 对象已经死了,所以user 对象已经不能返回值了,所以返回的是null

哪里是火星啊,就是这个地方,由于对象没有实现序列化接口,所以是不能由内存到硬盘上的

有一个问题就是,session 保存的是字符串啊,也没有进行序列化和反序列化啊,为什么它没有死呢,是因为

保存的值实际上是new cn.itcast.User().toString() 实际上保存的是字符串,但是我们发现实际上

字符串已经实现了序列化

所以即使被session保存即使没有被序列化,也能保存下来

但是对象不行,必须要序列化

 

加上序列化以后演示

再等一分钟

已经钝化了,再等一分钟以后开始活化,再通过浏览器访问,user 又出现了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值