一、HttpSessionListener
HttpSessionListener是对Session的一个监听,主要监听关于Session的两个事件,即初始化和销毁。
【原理】
接口HttpSessionListener有两个方法,分别为:
VoidsessionCreated(HttpSessionEvent se):当session创建时会收到通知。
VoidsessionDestroyed(HttpSessionEvent se):当session销毁时也会收到通知。
【实现】
Web.xml
<listener>
<listener-class>com.bjpowernode.drp.util.listener.TestHttpSessionListener</listener-class>
</listener>
监听类:
package com.bjpowernode.drp.util.listener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class TestHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
System.out
.println("----------TestHttpSessionListener.sessionCreated()-----------");
}
public void sessionDestroyed(HttpSessionEvent se) {
System.out
.println("----------TestHttpSessionListener.sessionDestroyed()-----------");
}
}
【应用】
根据HttpSessionListener的特性,如果想在用户登录或者退出时做些什么,就可以设置session监听,例如:防止用户重复登录,统计用户在线数量,统计用户登录频率等等。
二、HttpSessionAttributeListener
HttpSessionAttributeListener是SessionAttribute的监听,当在会话对象中加入属性、移除属性或替换属性时,就会调用HttpSessionAttributeListener监听器。可以和HttpSessionBindingEvent合作着使用。
【原理】
接口HttpSessionAttributeListener有3个方法:
public voidattributeAdded(HttpSessionBindingEvent se):在session中添加对象时触发此操作
public voidattributeRemoved(HttpSessionBindingEvent se):修改、删除session中添加对象时触发此操作
public voidattributeReplaced(HttpSessionBindingEvent se):在Session属性被重新设置时
【实现】
Web.xml:
<listener>
<listener-class>com.bjpowernode.drp.util.listener.TestHttpSessionAttributeListener</listener-class>
</listener>
监听类:
package com.bjpowernode.drp.util.listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class TestHttpSessionAttributeListener implements
HttpSessionAttributeListener {
// 加入session时的监听方法.
public void attributeAdded(HttpSessionBindingEvent se) {
System.out
.println("TestHttpSessionAttributeListener-->>>attributeAdded()");
System.out.println("name=====" + se.getName());
System.out.println("value=====" + se.getValue());
// 判断
if ("user_info".equals(se.getName())) {
Integer count = (Integer) se.getSession().getServletContext()
.getAttribute("count");
if (count == null) {
count = 1;
} else {
count++;
}
se.getSession().getServletContext().setAttribute("count", count);
}
}
// session失效时的监听方法
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out
.println("TestHttpSessionAttributeListener-->>>attributeRemoved()");
}
// session覆盖时的监听方法.
public void attributeReplaced(HttpSessionBindingEvent se) {
System.out
.println("TestHttpSessionAttributeListener-->>>attributeReplaced()");
}
}