感知SessioSession 绑定的事件监听器

来源:互联网 发布:宜人贷淘宝验证未通过 编辑:程序博客网 时间:2024/05/16 19:35
保存在Session 域中的对象可以有多钟状态,绑定到Session 中,从Session 域中解除绑定,随Session 对象持久化到一个存储设备中,随Session 对象从一个存储设备中恢复。
Servlet 规范中定义了两个特殊的监听器接口来帮助JavaBean 对象了解自己在Session 域中的这些状态。
HttpSessionBindingListener 接口
HttpSessionActivationListener 接口
实现这两个接口的类不需要在web.xml 文件中进行注册。
(1)HttpSessionBingdingListener 接口,此技术可以用来实现web页面踢人技术
实现了HttpSessionBingdingListener 接口的JavaBean 对象可以感知自己被绑定到session 中和从session 中删除的事件。当对象被绑定到了HttpSession 对象中,web 服务器调用该对象的valueBound 方法,反之当对象从session 中被删除的时候, web 服务器调用该对象的valueUnbound 方法。
(2)HttpSessionActivationListener 接口

实现了HttpSessionActivationListener 接口的JavaBean 对象可以感知自己被活化和钝化的事件。当绑定了HttpSession 对象中的对象将要岁Session 对象被钝化之前,web 服务器调用该对象的sessionWillPassivate 方法,当绑定到HttpSession 对象中的对象将要随HttpSession对象被活化之后,web 服务器调用该对象的void sessionDidActive(HttpSessionBindingEventevent)方法。

钝化:值将session有内存保存到硬盘中。

活化:将session从硬盘中导入到内存中

下面是示例代码:

//HttpSessionBingdingListener 监听器

import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;public class MyBean implements HttpSessionBindingListener {private String name;public void valueBound(HttpSessionBindingEvent event) {System.out.println("自己被加到session中了");}public void valueUnbound(HttpSessionBindingEvent event) {System.out.println("自己被session踢出来了");}}

//HttpSessionActivationListener接口

import java.io.Serializable;import javax.servlet.http.HttpSessionActivationListener;import javax.servlet.http.HttpSessionEvent;//一定要实现Serializable接口,否则不能被系列化public class MyBean2 implements HttpSessionActivationListener,Serializable {public void sessionDidActivate(HttpSessionEvent se) {System.out.println("session从硬盘回到内存了");}public void sessionWillPassivate(HttpSessionEvent se) {System.out.println("session被序列化到硬盘了");}}

需要注意的是,要将session序列化到硬盘中,需要实现Serializable接口。否则无法序列化。钝化和活化的技术,可以缓解服务器存储压力,当session过期,可以不用将其销毁,直接存到硬盘,到下次在访问是,直接从硬盘中加载多内存。这样不用在需要在服务器内存中申请存放session的空间。钝化和活化还需要建一个context.xml配置文件,如下:

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

0 0