DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 用xmlhttp和Java session監聽改善站內消息系統
用xmlhttp和Java session監聽改善站內消息系統
編輯:關於JavaScript     

  這個題目含有許多需要解釋的概念,最容易說明的是“站內消息”,這是很多論壇都有的功能,可以通過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接口,它的作用是計算當前有多少個在線用戶:


package org.bromon.test;

import javax.servlet.*;
import javax.servlet.http.*;

public class SessionCount implements HttpSessionListener
{
private static int count=0;

public void sessionCreated(HttpSessionEvent se)
{
count++;
System.out.println(“session創建:”+new java.util.Date());
}

public void sessionDestroyed(HttpSessionEvent se)
{
count--;
System.out.println(“session銷毀:”+new java.util.Date());
}

public static int getCount()
{
return(count);
}
}


  怎麼樣,是不是一目了然?count被定義為static,是因為要保證整個系統只有這一個count。如果你實在不放心,可以把它寫成一個單例類。

  然後在web.xml中聲明這個監聽器:

<listener>
<listener-class>
org.bromon.test.SessionCount
</listener-class>
</listener>


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

<%
int count=org.bromon.test.SessionCount.getCount();
out.println(count);
%>


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


  作為一個站內消息系統,肯定要獲得所有登陸者的ID,才有可能互發消息。這就涉及Attribute監聽。假設我們寫了個用戶登陸的模塊,用戶通過身份驗證之後會產生一個session,保存它的相關信息,比如:


//check.jsp
<%
String name=request.getParameter(“name”);
Name=new String(name.getBytes(“ISO8859-1”));
session.setAttribute(“user”,name);
%>


  做過jsp的兄弟應該對這段代碼再熟悉不過了,下面寫個監聽器來監聽用戶登陸,把所有用戶的ID保存到一個List當中,這個監聽器實作HttpSessionAttributeListener接口:


package org.bromon.test;

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class OnlineList implements HttpSessionAttributeListener
{
private static List list=new ArrayList();

public void attributeAdded(HttpSessionBindingEvent se)

{
if(“user”.equals(se.getName()))
{
list.add(se.getValue());
}
}

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved