【Listener机制】HttpSessionListener和HttpSessionAttributeListener

来源:互联网 发布:北大青鸟java班学费 编辑:程序博客网 时间:2024/05/22 03:34

一、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 implementsHttpSessionAttributeListener {// 加入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()");}}

0 0
原创粉丝点击