javaweb——session绑定解绑、钝化活化

1、session钝化、活化

钝化、活化的本质就是序列化和反序列化
当有一个用户访问服务器时,服务器就会为该用户创建一个session,有多少用户,就有多少session,但服务器内存有限,用户达到一定数量时,session就不能全放在内存中了,这时可以把session放在硬盘里,这就是session的钝化(序列化)。反过来,将硬盘中的session放到内存中就是session的活化。

钝化: 内存——>硬盘
活化: 硬盘——>内存

2、session的绑定和解绑

session.setAttribute("userA","aaa"); // 绑定
session.removeAttribute("userA"); // 解绑

3、监听session的绑定和解绑

PS:该监听器不需要配置web.xml
session绑定和解绑的监听器需要实现 HttpSessionBindingListener 接口
实现接口的方法

监听器中的代码

	// ps:这里的this表示当前session域中绑定的对象
	// 绑定
	@Override
	public void valueBound(HttpSessionBindingEvent event) {
		System.out.println("绑定对象"+this+"\nsession:"+event.getSession());
	}
	
	// 解绑
	@Override
	public void valueUnbound(HttpSessionBindingEvent event) {
		System.out.println("解绑对象"+this+"\nsession:"+event.getSession());
	}

测试用jsp页面中的代码

	<%
		sessionBindListener sessionbind = new sessionBindListener();
		session.setAttribute("bind", sessionbind); // 绑定
	%>

第一次访问:

绑定对象org.hp.listener.sessionBindListener@5fceda44
session:org.apache.catalina.session.StandardSessionFacade@becb63

刷新页面:

绑定对象org.hp.listener.sessionBindListener@76ee93cf
session:org.apache.catalina.session.StandardSessionFacade@becb63
解绑对象org.hp.listener.sessionBindListener@5fceda44
session:org.apache.catalina.session.StandardSessionFacade@becb63

可以看到两次的访问响应结果的不同之处
第一次访问,由于页面在session域中绑定了监听器的对象
所以监听器在控制台打印出来 绑定对象和对应的session域

第二次访问(刷新页面)
同样的原因,首先打印出来的就是session域中绑定了一个新对象,然而却是在和第一次访问时相同的session中
然后,监听器解除了前一次访问时绑定的对象(解绑)

4、session钝化、活化监听器

PS:该监听器不需要配置web.xml
监听session钝化、活化需实现 HttpSessionActivationListener接口
并实现接口的两个方法

钝化活化本质上是序列化和反序列化因此需要同时实现Serializable接口

	// 为了更好观察,加入一些信息
	private String user;
	
	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}
	
	// 监听session活化(已经活化之后 did)
	@Override
	public void sessionDidActivate(HttpSessionEvent se) {
		
	}
	
	// 监听session钝化(钝化之前 will)
	@Override
	public void sessionWillPassivate(HttpSessionEvent se) {
		
	}

如何把session钝化、活化

配置tomcat安装目录的 /conf/context.xml
或在eclipse中开启托管模式,打开server中的context.xml(建议这么做,因为tomcat只能在项目修改然后同步到本地,而不能在本地修改自动同步到项目)

以下是context.xml具体配置

	<!--
		通过配置xml实现session钝化、活化
		maxIdleSwap:最大空闲时间,超过空闲时间后session将被钝化
		saveOnRestart:设定服务器重启时是否保存session信息
		directory:session文件保存路径,可填相对/绝对路径
		相对路径是相对于:Tomcat 8.5\work\Catalina\localhost\项目名\
    -->
    <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false" maxIdleSwap="5">
        <Store className="org.apache.catalina.session.FileStore" directory="test"/>
    </Manager>

以下是大致的配置步骤
在这里插入图片描述
打开文件,可以看到文件中大部分都注释

在文件中添加标签 <Manager></Manager>

快捷键ctrl+shift+T文本框输入PersistentManager
在这里插入图片描述
打开该类,复制全类名 org.apache.catalina.session.PersistentManager粘贴到manager标签的classname属性中

在Manager标签中添加新标签,<Store className=" org.apache.catalina.session.FileStore" />
该类名通过
在这里插入图片描述
最后在store标签中添加directory属性,并填入session文件保存路径

要session钝化,等待空闲时间超过之后,服务器会自动将session文件保存在指定目录
要session活化,内存中的session被清空之后,若要获取之前session中保存的对象,服务器就会自动去保存路径的文件中寻找并读取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值