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的钝化而钝化");
}