session的監聽
所有的偵聽事件都必須在web.xml裡做一下配置,如下:
參考:
Session監聽http://www.ublog.net/user2/3346/archives/2005/5522.shtml
[@more@] 這個題目含有許多需要解釋的概念,最容易說明的是“站內訊息”,這是很多論壇都有的功能,可以透過web向其他的線上使用者傳送訊息,很多使用者都使用過。站內訊息的第一個好處是大家都不需要安裝客戶端,你不用知道對方的MSN或者QQ,就能與他聯絡,稱讚他的觀點或者是給他一頓臭罵。第二個好處是客戶管理方便,利用session來維護線上名單,各種指令碼都已經把session操作封裝得很易用了,不用像其他無狀態的即時通訊工具(比如使用UDP通訊的工具)一樣,要費一些腦細胞來解決線上名單的問題。缺點嘛,就是實時性不好,一般是在使用者跳轉或者重新整理頁面才能探測訊息、更新線上名單。
Session監聽嘛,沒什麼好解釋的,java提供了很靈活的事件機制來監聽session,可以監聽session的建立和銷燬,監控session所攜帶資料的建立、變化和銷燬,可以監聽session的銳化和鈍化(瞭解物件序列化的兄弟應該知道這個),其他的平臺是個什麼情況我不太清楚,估計也差不多吧。如果能夠對所有客戶的session進行監控,就不用再去操作麻煩而危險的Application了。
Xmlhttp是MS推的一項技術,功能很複雜,可以做很多事情,比如客戶端可以在簡單的HTML中開啟HTTP連線,主動向server請求資料並獲得返回資料,是DOM技術一個非常重要的應用,利用它來寫無重新整理的動態頁面簡直是so easy,做過web開發的兄弟應該明白它的意義有多麼重大。
一、 session監聽
servlet中對session的監聽有很多介面,功能很靈活,最常用的是監聽Session和Attribute。這裡要澄清一下概念,servlet中的session監聽和Attribute監聽含義有差別,session監聽指的不是我們一般所理解的放置一個session或者銷燬一個session,這是Attribute監聽的功能,因為servlet中放置session的語法是session.setAttribute(“session名”,要放入的物件)。而session監聽,監聽的是HTTP連線,只要有使用者與server連線,就算連線的是一個空白的jsp頁面,也會觸發session事件,所以此處的session實際上指的是connection,用來統計當前線上使用者數最合適了。不知道我說清楚了沒有。下面分別講解這兩種監聽方式。
1、 session監聽
首先編寫一個session監聽類,實作HttpSessionListener介面,它的作用是計算當前有多少個線上使用者:
- /**
- *@Author bromon
- *2004-6-12
- */
- package org.bromon.test;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class SessionCount implements
- {
- private static int count=0;
- public void sessionCreated( se)
- {
- count++;
- .out.println(“session建立:”+new java.util.());
- }
- public void sessionDestroyed( se)
- {
- count--;
- .out.println(“session銷燬:”+new java.util.());
- }
- public static int getCount()
- {
- return(count);
- }
- }
怎麼樣,是不是一目瞭然?count被定義為static,是因為要保證整個系統只有這一個count。如果你實在不放心,可以把它寫成一個單例類。
然後在web.xml中宣告這個監聽器:
org.bromon.test.SessionCount
編寫一個測試頁面test.jsp,內容是獲得count:
需要注意的是,這裡根本不涉及任何session的操作。重啟動App server,試著連線test.jsp,可以看到監聽器已經開始工作。
2、 Attribute監聽
作為一個站內訊息系統,肯定要獲得所有登陸者的ID,才有可能互發訊息。這就涉及Attribute監聽。假設我們寫了個使用者登陸的模組,使用者透過身份驗證之後會產生一個session,儲存它的相關資訊,比如:
- //check.jsp
- /**
- *@Author bromon
- *2004-6-12
- */
- package org.bromon.test;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.util.*;
- public class OnlineList implements
- {
- private static list=new ();
- public void attributeAdded( se)
- {
- if(“user”.equals(se.getName()))
- {
- list.add(se.getValue());
- }
- }
- public void attributeRemoved( se)
- {
- if(“user”.equals(se.getName()))
- {
- list.remove(se.getValue());
- }
- }
- public void attributeReplaced( se){}
- public static getList()
- {
- return(list);
- }
- }
寫個簡單的jsp來得到使用者列表
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/300209/viewspace-811226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SESSION監聽Session
- session監聽器怎樣得到request和responseSession
- 監聽Session事件不能編譯,大家幫忙看看Session事件編譯
- [20160513]Restrict Session與靜態監聽.txtRESTSession
- 記錄springboot專案裡關於session的一個問題(session監聽器失效)Spring BootSession
- 監聽 watch props物件屬性監聽 或深度監聽物件
- 動態監聽與靜態監聽
- 動態監聽和靜態監聽
- java鍵盤監聽之視窗監聽的實現Java
- Oracle監聽的作用Oracle
- 【監聽】兩庫互配靜態監聽
- ORACLE動態監聽與靜態監聽Oracle
- oracle靜態監聽和動態監聽Oracle
- 【oracle】動態監聽與靜態監聽Oracle
- Vue3.0的遞迴監聽和非遞迴監聽Vue遞迴
- 事件監聽事件
- Oracle 監聽Oracle
- swift 訊息監聽和鍵值監聽(kvo)Swift
- javaWeb中的監聽器JavaWeb
- nodejs監聽的方式NodeJS
- Laravel 中的事件監聽Laravel事件
- oracle的監聽問題Oracle
- passive 的事件監聽器事件
- 動態監聽與靜態監聽的一些特點。
- 同時配置動態監聽與靜態監聽
- oracle listener 靜態監聽與動態監聽的一些小事Oracle
- Flutter事件監聽Flutter事件
- jQuery事件監聽jQuery事件
- 監聽滑鼠事件事件
- Oracle監聽(1)Oracle
- JavaScript 事件監聽JavaScript事件
- 時間監聽
- js 監聽事件JS事件
- 7、listener監聽
- listener監聽監控指令碼指令碼
- 【listener】oracle靜態監聽和動態監聽 【轉載】Oracle
- 監聽所有模型的 saved 事件模型事件
- Web中的監聽器【Listener】Web