【Listener機制】HttpSessionListener和HttpSessionAttributeListener

一、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()");
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章