HttpSessionListener:监听Session对象
package com.listener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; public class HttpSessionListener implements javax.servlet.http.HttpSessionListener { /** * 通知会话已创建。 * session创建之后调用 */ @Override public void sessionCreated(HttpSessionEvent event) { System.out.println("session创建之后"); HttpSession session = event.getSession(); } /** * 通知会话即将失效。 * session销毁之前调用 */ @Override public void sessionDestroyed(HttpSessionEvent event) { System.out.println("session销毁之前"); HttpSession session = event.getSession(); } }
<!-- HttpSession对象监听器 --> <listener> <listener-class>com.listener.HttpSessionListener</listener-class> </listener>
HttpSessionAttributeListener:监听Session中的属性操作
package com.listener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionBindingEvent; public class HttpSessionAttributeListener implements javax.servlet.http.HttpSessionAttributeListener { /** * 通知某个属性已被添加到会话中。 在添加属性后调用。 */ @Override public void attributeAdded(HttpSessionBindingEvent event) { System.out.println("session添加属性后调用"); HttpSession session = event.getSession(); String name = event.getName(); Object value = event.getValue(); System.out.println("被添加到session中的属性:" + "key=" + name + " ,value=" + value); } /** * 通知某个属性已从会话中删除。 在属性被删除后调用。 */ @Override public void attributeRemoved(HttpSessionBindingEvent event) { System.out.println("session删除属性后调用"); HttpSession session = event.getSession(); String name = event.getName(); Object value = event.getValue(); System.out.println("被删除的session中的属性:" + "key=" + name + " ,value=" + value); } /** * 在会话中通知属性已被替换。 在属性被替换后调用。 */ @Override public void attributeReplaced(HttpSessionBindingEvent event) { System.out.println("session替换属性后调用"); HttpSession session = event.getSession(); String name = event.getName(); Object value = event.getValue(); System.out.println("被替换的session中的属性:" + "key=" + name + " ,替换之前的value=" + value); } }
<!-- HttpSession属性的操作监听器 --> <listener> <listener-class>com.listener.HttpSessionAttributeListener</listener-class> </listener>
HttpSessionBindingListener监听器:感知Session绑定的事件监听器
package com.listener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionBindingEvent; public class HttpSessionBindingListener implements javax.servlet.http.HttpSessionBindingListener { /** * 通知对象它正在被绑定到会话并标识会话。(还未绑定) */ @Override public void valueBound(HttpSessionBindingEvent event) { System.out.println("当前对象正在绑定到session中,还未绑定"); HttpSession session = event.getSession(); String name = event.getName(); Object value = event.getValue(); System.out.println("将要被绑定到session中的key值:" + name + "value值:" + value); System.out.println("value值是否是当前对象:" + (value == this));//true Object valueNow = session.getAttribute(name); System.out.println("valueNow:" + valueNow);//null,还未绑定 } /** * 通知对象它正在从会话中解除绑定并标识会话。(还未解除绑定) */ @Override public void valueUnbound(HttpSessionBindingEvent event) { System.out.println("当前对象它正在从会话中解除绑定"); HttpSession session = event.getSession(); String name = event.getName(); Object value = event.getValue(); System.out.println("将要解除绑定session中的key值:" + name + "value值:" + value); System.out.println("value值是否是当前对象:" + (value == this));//true Object valueNow = session.getAttribute(name); System.out.println("valueNow:" + valueNow);//null,还未解除绑定 } }
测试页面
<%@page import="cn.itcast.erp.listener.session.HttpSessionBindingListener"%> <%@page import="cn.itcast.erp.listener.session.HttpSessionActivationListener"%> <%@page language="java" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试HttpSessionActivationListener监听(session的活化和钝化)</title> </head> <body> <% //测试session活化和钝化监听器HttpSessionActivationListener session.setAttribute("sessionActivation",new HttpSessionActivationListener1()); //测试session绑定和解绑监听器 session.setAttribute("sessionBind", new HttpSessionBindingListener1()); session.removeAttribute("sessionBind"); %> <h1>session活化和钝化监听</h1> </body> </html>
HttpSessionActivationListener:监听HTTP会话的active和passivate情况,passivate是指非活动的session被写入持久设备(比如硬盘),active相反。注意:HttpSessionActivationListener不需要web.xml配置文件。