亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用xmlhttp和Java session監聽改善站內消息系統

2019-11-18 11:34:04
字體:
來源:轉載
供稿:網友

使用xmlhttp和java session監聽改善站內消息系統

bromon 原創  引自:http://www.javaresearch.org/article/showarticle.jsp?column=106&thread=25340

  這個題目含有許多需要解釋的概念,最輕易說明的是“站內消息”,這是很多論壇都有的功能,可以通過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 HttpSessionListener
  9. {
  10.     PRivate static int count=0;
  11.     public void sessionCreated(HttpSessionEvent se)
  12.     {
  13.         count++;
  14.         System.out.println(“session創建:”+new java.util.Date());
  15.     }
  16.     public void sessionDestroyed(HttpSessionEvent se)
  17.     {
  18.        count--;
  19.        System.out.println(“session銷毀:”+new java.util.Date());
  20.     }
  21.     public static int getCount()
  22.     {
  23.        return(count);
  24.      }
  25. }

  怎么樣,是不是一目了然?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,保存它的相關信息,比如:
  1. //check.jsp
  2. <%
  3.     String name=request.getParameter(“name”);
  4.     Name=new String(name.getBytes(“ISO8859-1”));
  5.     session.setAttribute(“user”,name);
  6. %>


  做過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 HttpSessionAttributeListener
  10. {
  11.     private static List list=new ArrayList();
  12.     public void attributeAdded(HttpSessionBindingEvent se)
  13.     {
  14.         if(“user”.equals(se.getName()))
  15.         {
  16.             list.add(se.getValue());
  17.          }
  18.     }
  19.     public void attributeRemoved(HttpSessionBindingEvent se)
  20.     {
  21.          if(“user”.equals(se.getName()))
  22.          {
  23.             list.remove(se.getValue());
  24.          }
  25.     }
  26.     public void attributeReplaced(HttpSessionBindingEvent se){}
  27.     public static List getList()
  28.     {
  29.          return(list);
  30.      }
  31. }


寫個簡單的jsp來得到用戶列表:
<%
    java.util.List list=org.bromon.test.OnlineList.getList();
    out.println(“共有”+list.size()+”名用戶已登陸:”);
    for(int I=0;I<lise.size();i++)
    {
        out.println(list.get(i));
    }
%>

也許你說,這有什么神奇呢,監聽session而已,不著急,看看xmlhttp。

二、 XMLHTTP

  XMLHTTP的用處很多,這里只說我們需要的,就是無刷新的與server通信,看這段代碼:

  1. <script language="Javascript"> 
  2. xml = new ActiveXObject("Microsoft.XMLHTTP"); 
  3. var post=" ";//構造要攜帶的數據 
  4. xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POST方法打開一個到服務器的連接,以異步方式通信 
  5. xml.setrequestheader("content-length",post.length); 
  6. xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
  7. xml.send(post);//發送數據 
  8. var res = xml.responseText;//接收服務器返回的數據 
  9. document.write(res); 
  10. </script>



  豁然開朗,這段代碼就是打開一個HTTP連接,以標準的HTTP格式傳遞數據,假如你喜歡,可以用XML的格式來傳遞。更改一下xml對象的構造方式就可以兼容Mozilla和Netscape。下面來寫一個輪詢,每隔一段時間刷新一次用戶列表,當然,是不需要刷新頁面的:

  1. <html>
  2. <head><title>探測器</title>
  3. <script language="javascript">
  4. function detect()
  5. {
  6. xml = new ActiveXObject("Microsoft.XMLHTTP"); 
  7. var post=" ";//構造要攜帶的數據 
  8. xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POST方法打開一個到服務器的連接,以異步方式通信 
  9. xml.setrequestheader("content-length",post.length); 
  10. xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
  11. xml.send(post);//發送數據 
  12. var res = xml.responseText;//接收服務器返回的數據 
  13. list.innerText=res;
  14. setTimeout(“detect()”,5000);//每隔5秒鐘輪詢一次
  15. </script>
  16. <body onload=”detect()”>
  17. <a id=”list”></a>
  18. </body>
  19. </html>


  這樣的通信方式數據量很小,不用重新傳遞整個頁面,5秒鐘輪一次,普通PC也能承受較大的在線數。構造一個探測器來監聽在線列表和消息,效果是很好的,即使你的客戶坐在電腦前袖手旁觀,鍵鼠都不碰一下,也能保證數據即時傳遞,頁面也不會發生跳轉和刷新。

  Session監聽加上XMLHTTP通信,開發一個較為完善的站內消息系統實在易如反掌。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品av网站| 精品久久久久久久久久久| 亚洲综合最新在线| 成人av色在线观看| 一区二区成人av| 亚洲国产成人精品久久久国产成人一区| 91av在线免费观看视频| 欧美性理论片在线观看片免费| 国产欧美一区二区三区四区| 国产精品一区二区三| 亚洲精品suv精品一区二区| 日韩人体视频一二区| 91社影院在线观看| 97视频在线看| 热久久免费国产视频| 午夜精品一区二区三区在线播放| 亚洲精品日韩在线| 国产精品1区2区在线观看| 国产精品一区二区三区毛片淫片| 国产精品女视频| 全亚洲最色的网站在线观看| 中文字幕av一区二区三区谷原希美| 亚洲欧美日本另类| 成人欧美在线视频| 国产精品白嫩美女在线观看| 97国产精品视频人人做人人爱| 91欧美激情另类亚洲| 欧美一区二区三区四区在线| 久久99精品久久久久久琪琪| 欧美日韩裸体免费视频| 久久精品国产欧美亚洲人人爽| 欧美极品xxxx| 538国产精品一区二区免费视频| 欧美在线一级视频| 欧美亚洲激情在线| 亚洲女人被黑人巨大进入| 中文字幕无线精品亚洲乱码一区| 日韩成人xxxx| 91日本在线视频| 国产精品久久久久久亚洲调教| 国产高清视频一区三区| 欧美另类第一页| 国产成人在线亚洲欧美| 中文字幕av一区二区三区谷原希美| 久久精品青青大伊人av| 一区二区三区四区在线观看视频| 日韩在线视频一区| 国产成人精彩在线视频九色| 一本久久综合亚洲鲁鲁| 日韩av在线免费观看| 国产成人鲁鲁免费视频a| 欧美一级淫片丝袜脚交| 欧美极品xxxx| 欧美黑人xxxⅹ高潮交| 欧美在线视频观看| 成年无码av片在线| 奇米4444一区二区三区| 成人疯狂猛交xxx| 精品国内亚洲在观看18黄| 欧美成人全部免费| 日韩欧美国产免费播放| 国产一区视频在线| 久久99久久99精品中文字幕| 国产精品久久久久久久久男| 亚洲bt欧美bt日本bt| 日韩精品在线观看一区| 国产精品亚洲第一区| 日韩精品极品视频| 8090理伦午夜在线电影| 98精品在线视频| 亚洲国产高潮在线观看| 国产丝袜精品第一页| 少妇高潮 亚洲精品| 欧美亚洲激情在线| 国产日韩中文字幕在线| 欧美日韩国产成人高清视频| 欧美精品情趣视频| 欧美高跟鞋交xxxxhd| 性色av一区二区三区免费| 亚洲欧美国产高清va在线播| 欧美激情videoshd| 欧美日韩国产一区二区三区| 国产日韩欧美黄色| 欧美日韩亚洲网| 国内偷自视频区视频综合| 97色在线观看免费视频| 欧美国产高跟鞋裸体秀xxxhd| 2018日韩中文字幕| 97在线看免费观看视频在线观看| 欧美精品免费在线观看| 精品香蕉一区二区三区| 亚洲天堂一区二区三区| 国产成人精品在线播放| 亚洲欧美日韩一区二区在线| 欧美老女人www| 国产精品一区二区久久精品| 日韩视频在线免费| 久久久久久久久久久91| 国产精品成人观看视频国产奇米| 国产精品成人国产乱一区| 国产精品h在线观看| 国产精品日韩欧美综合| 国产精品中文字幕在线| 国产欧美一区二区三区视频| 91欧美精品成人综合在线观看| 在线不卡国产精品| 亚洲国产高清高潮精品美女| 最近2019中文字幕mv免费看| 国产成人精品日本亚洲| 91情侣偷在线精品国产| 亚洲四色影视在线观看| 久久久国产精品一区| 亚洲第一偷拍网| 668精品在线视频| 精品国产区一区二区三区在线观看| 日韩毛片在线观看| 精品中文字幕在线观看| 9.1国产丝袜在线观看| 中文字幕日韩av| 国产精品99久久久久久人| 国产精品电影观看| 日产精品99久久久久久| 亚洲欧美日韩国产成人| 国产精品人成电影在线观看| 亚洲电影免费观看| 日韩av在线免费观看一区| 国产网站欧美日韩免费精品在线观看| 久久97精品久久久久久久不卡| 久久久国产影院| 久久精品电影一区二区| 国产一区二区三区三区在线观看| 久久香蕉国产线看观看av| 国产精品福利在线观看网址| 欧美成人中文字幕| 国产精品永久免费观看| 亚洲视频999| 欧美综合国产精品久久丁香| 亚洲黄色www网站| 欧美激情久久久| 久久噜噜噜精品国产亚洲综合| 色妞一区二区三区| 亚洲午夜小视频| 日韩在线激情视频| 91精品久久久久久久久久久| 69**夜色精品国产69乱| 亚洲精品一区二三区不卡| 中文日韩在线观看| 2021久久精品国产99国产精品| 日韩中文字幕第一页| 欧美性资源免费| 久久精品亚洲94久久精品| 日韩欧美在线播放| 日韩视频―中文字幕| 欧美一级片一区| 91国语精品自产拍在线观看性色| 欧美日本高清视频| 久久成人这里只有精品| 久久人人爽人人爽人人片av高清| 欧美多人乱p欧美4p久久| 亚洲免费视频观看| 欧美激情中文字幕在线| 夜夜嗨av色综合久久久综合网| 国产精品久久久久免费a∨大胸| 欧美一性一乱一交一视频|