JavaWeb应用中,很多的地方都和session有关。因此session相关的事件监听器,在日常工作中非常有用。 Servlet 规范中定义了两个特殊的监听器接口”HttpSessionBindingListener和HttpSessionActivationListener”来帮助JavaBean 对象了解自己在Session域中的这些状态变化,实现这两个接口的类不需要 web.xml 文件中进行注册。 1、 HttpSessionBindingListener接口 实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和 Session中删除的事件 当对象被绑定到HttpSession对象中时,web服务器调用该对象的void valueBound(HttpSessionBindingEvent event)方法 当对象从HttpSession对象中解除绑定时,,web服务器调用该对象的void valueUnbound(HttpSessionBindingEvent event)方法
2、 HttpSessionActivationListener接口
实现了HttpSessionActivationListener接口的JavaBean对象可以感知自己被活化(反序列化)和钝化(序列化)的事件 当绑定到HttpSession对象中的javabean对象将要随HttpSession对象被钝化(序列化)之前,web服务器调用该javabean对象的void sessionWillPassivate(HttpSessionEvent event) 方法。这样javabean对象就可以知道自己将要和HttpSession对象一起被序列化(钝化)到硬盘中. 当绑定到HttpSession对象中的javabean对象将要随HttpSession对象被活化(反序列化)之后,web服务器调用该javabean对象的void sessionDidActive(HttpSessionEvent event)方法。这样javabean对象就可以知道自己将要和 HttpSession对象一起被反序列化(活化)回到内存中
3、 javaBean感知自己被绑定到session中的源代码 实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和 Session中删除的事件 当对象被绑定到HttpSession对象中时,web服务器调用该对象的void valueBound(HttpSessionBindingEvent event)方法 当对象从HttpSession对象中解除绑定时,web服务器调用该对象的void valueUnbound(HttpSessionBindingEvent event)方法。 示例源代码如下:
package com.servlet.listener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;/** * 简单实现HttpSessionBindingListener接口,知道本JAVABEAN是否被加入到session中。 * @author 范芳铭 */{private String name;public EasyLisenterSelf(String name){this.name = name;}(HttpSessionBindingEvent event) {System.out.println(name+”,加入session。”);}(HttpSessionBindingEvent event) {System.out.println(name+”,session移除。”);}public String getName() {return name;}}
4、 测试用的session.jsp
> > <body><%//将javabean对象绑定到Session中session.setAttribute(“bean”,new EasyLisenterSelf(“javaBean监控自己”));//从Session中移除javabean对象session.removeAttribute(“bean”);%> </body></html>
5、 运行结果 启动WEB中间件,从URL访问: :8080/webStudy/session.jsp 控制台打印情况: javaBean监控自己,加入session。 javaBean监控自己,session移除。
享受每一刻的感觉,欣赏每一处的风景,这就是人生。