javaweb - session的绑定解绑,钝化活化

session的绑定解绑

如果一个类实现了 HttpSessionBindingListener接口,则这个类绑定到session中时会进行监听,该监听不需要再xml中配置

a,session.setAttribute(“a”,zzz) 将对象a绑定到session中(将a对象增加到session域中)
b,session.removeAttribute(“a”) 将对象a从session中解绑

接口提供了两个方法,分别在该类绑定和解绑时进行监听

public class BindListener implements HttpSessionBindingListener{

	@Override
	public void valueBound(HttpSessionBindingEvent arg0) {
		System.out.println("绑定:绑定的对象——"+this+"【name】"+arg0.getName()+"【value】:"+arg0.getValue()+"【sessionId】:"+arg0.getSession().getId());
	}

	@Override
	public void valueUnbound(HttpSessionBindingEvent arg0) {
		System.out.println("解绑:解绑的对象——"+this+"【name】"+arg0.getName()+"【value】:"+arg0.getValue()+"【sessionId】:"+arg0.getSession().getId());
		
	}

}

this代表了 绑定的对象:”a“
event:可以获取存储a的session

session的钝化活化

一般来说,服务器启动后,就不会再关闭了,但是如果逼不得已需要重启,而用户会话还在进行相应的操作,这时就需要使用序列化将session信息保存起来放在硬盘,服务器重启后,又重新加载。这样就保证了用户信息不会丢失,实现永久化保存
2.淘宝每年都会有定时抢购的活动,很多用户会提前登录等待,长时间不进行操作,一致保存在内存中,而到达指定时刻,几十万用户并发访问,就可能会有几十万个session,内存可能吃不消,这时就需要进行对象的活化、钝化,让其在闲置的时候离开内存,将信息保存至硬盘,等要用的时候,就重新加载进内存.

监听session对象的钝化和活化:HttpSessionActivationListener 不需要配置xml

实现监听的对象需要实现HttpSessionActivationListener接口和Serializable接口

实现session的钝化活化

如何钝化活化:配置tomcat安装目录/conf/context.xml
钝化活化本质就是序列化,反序列化需要的serializable

<!--通过配置实现钝化活化-->

	maxIdleSwap:最大空闲时间,如果超出该时间,将会被钝化
	FileStore:通过该类 具体实现 钝化操作
	directory:钝化路径:相对tomcat/work下的项目路径(绝对路径)
	
    <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="5">
       <Store className="org.apache.catalina.session.FileStore" directory="lq"/>
    </Manager>

钝化:超出设定时间即钝化
活化:session中获取一个对象时,如果对象不存在,则直接尝试从之前钝化的文件中去获取

总结:钝化,活化 实际执行 是通过context.xml中进行配置 而进行
HTTP Session Activation Listener只是负责在session钝化和活化时进行监听

HttpSessionActivationListener接口提供了两个方法,当session钝化活化时进行监听

	private static final long serialVersionUID = 6841235213982131L;

	//监听时刻:刚刚进行了活化之后
	@Override
	public void sessionDidActivate(HttpSessionEvent arg0) {
		System.out.println("活化:ActivationListener对象会随着session的活化而活化");
	}
	
	//监听时刻:即将钝化之前
	@Override
	public void sessionWillPassivate(HttpSessionEvent arg0) {
		System.out.println("钝化:ActivationListener对象会随着session的钝化而钝化");
		
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值