session的監聽

fsz521job發表於2005-12-05

所有的偵聽事件都必須在web.xml裡做一下配置,如下:


listenerClass

參考:

Session監聽http://www.ublog.net/user2/3346/archives/2005/5522.shtml

Session詳解http://xiangxyz.blogchina.com/3312231.html

[@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介面,它的作用是計算當前有多少個線上使用者:

  1. /**
  2. *@Author bromon
  3. *2004-6-12
  4. */
  5. package org.bromon.test;
  6. import javax.servlet.*;
  7. import javax.servlet.http.*;
  8. public class SessionCount implements
  9. {
  10. private static int count=0;
  11. public void sessionCreated( se)
  12. {
  13. count++;
  14. .out.println(“session建立:”+new java.util.());
  15. }
  16. public void sessionDestroyed( se)
  17. {
  18. count--;
  19. .out.println(“session銷燬:”+new java.util.());
  20. }
  21. public static int getCount()
  22. {
  23. return(count);
  24. }
  25. }



  怎麼樣,是不是一目瞭然?count被定義為static,是因為要保證整個系統只有這一個count。如果你實在不放心,可以把它寫成一個單例類。
  然後在web.xml中宣告這個監聽器:

org.bromon.test.SessionCount

  編寫一個測試頁面test.jsp,內容是獲得count:

  需要注意的是,這裡根本不涉及任何session的操作。重啟動App server,試著連線test.jsp,可以看到監聽器已經開始工作。

2、 Attribute監聽
  作為一個站內訊息系統,肯定要獲得所有登陸者的ID,才有可能互發訊息。這就涉及Attribute監聽。假設我們寫了個使用者登陸的模組,使用者透過身份驗證之後會產生一個session,儲存它的相關資訊,比如:
  1. //check.jsp
  做過jsp的兄弟應該對這段程式碼再熟悉不過了,下面寫個監聽器來監聽使用者登陸,把所有使用者的ID儲存到一個List當中,這個監聽器實作HttpSessionAttributeListener介面:
  1. /**
  2. *@Author bromon
  3. *2004-6-12
  4. */
  5. package org.bromon.test;
  6. import javax.servlet.*;
  7. import javax.servlet.http.*;
  8. import java.util.*;
  9. public class OnlineList implements
  10. {
  11. private static list=new ();
  12. public void attributeAdded( se)
  13. {
  14. if(“user”.equals(se.getName()))
  15. {
  16. list.add(se.getValue());
  17. }
  18. }
  19. public void attributeRemoved( se)
  20. {
  21. if(“user”.equals(se.getName()))
  22. {
  23. list.remove(se.getValue());
  24. }
  25. }
  26. public void attributeReplaced( se){}
  27. public static getList()
  28. {
  29. return(list);
  30. }
  31. }


寫個簡單的jsp來得到使用者列表

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/300209/viewspace-811226/,如需轉載,請註明出處,否則將追究法律責任。

相關文章