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

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

xmlhttp和Java session監聽改善消息系統

2019-11-18 12:48:20
字體:
來源:轉載
供稿:網友

  這個題目含有許多需要解釋的概念,最輕易說明的是“站內消息”,這是很多論壇都有的功能,可以通過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 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接口:
  
  /**
  *@Author bromon
  *2004-6-12
  */
  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());
  }
  }
  
  public void attributeRemoved(HttpSessionBindingEvent se)
  {
  if(“user”.equals(se.getName()))
  {
  list.remove(se.getValue());
  }
  }
  
  public void attributeReplaced(HttpSessionBindingEvent se){}
  
  public static List getList()
  {
  return(list);
  }
  }
  
  寫個簡單的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通信,看這段代碼:
  
  <script language="javascript">
  xml = new ActiveXObject("Microsoft.XMLHTTP");
  var post=" ";//構造要攜帶的數據
  xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POST方法打開一個到服務器的連接,以異步方式通信
  xml.setrequestheader("content-length",post.length);
  xml.setrequestheader("content-type","application/x-www-form-urlencoded");
  xml.send(post);//發送數據
  var res = xml.responseText;//接收服務器返回的數據
  document.write(res);
  </script>
  
  豁然開朗,這段代碼就是打開一個HTTP連接,以標準的HTTP格式傳遞數據,假如你喜歡,可以用XML的格式來傳遞。更改一下xml對象的構造方式就可以兼容Mozilla和Netscape。下面來寫一個輪詢,每隔一段時間刷新一次用戶列表,當然,是不需要刷新頁面的:
  
  <html>
  <head><title>探測器</title>
  <script language="javascript">
  function detect()
  {
  xml = new ActiveXObject("Microsoft.XMLHTTP");
  var post=" ";//構造要攜帶的數據
  xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POST方法打開一個到服務器的連接,以異步方式通信
  xml.setrequestheader("content-length",post.length);
  xml.setrequestheader("content-type","application/x-www-form-urlencoded");
  xml.send(post);//發送數據
  var res = xml.responseText;//接收服務器返回的數據
  list.innerText=res;
  setTimeout(“detect()”,5000);//每隔5秒鐘輪詢一次
  }
  </script>
  <body onload=”detect()”>
  <a id=”list”></a>
  </body>
  </html>
  
  這樣的通信方式數據量很小,不用重新傳遞整個頁面,5秒鐘輪一次,普通PC也能承受較大的在線數。構造一個探測器來監聽在線列表和消息,效果是很好的,即使你的客戶坐在電腦前袖手旁觀,鍵鼠都不碰一下,也能保證數據即時傳遞,頁面也不會發生跳轉和刷新。
  
  Session監聽加上XMLHTTP通信,開發一個較為完善的站內消息系統實在易如反掌。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大片欧美激情性色a∨久久| 最新91在线视频| 欲色天天网综合久久| 亚洲国产精品电影在线观看| 亚洲欧美在线x视频| 国产精品扒开腿做爽爽爽的视频| 久久久久久久成人| 国产一区二区激情| 亚洲2020天天堂在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 国产视频精品xxxx| 红桃视频成人在线观看| 国产精品海角社区在线观看| 欧美成人免费全部观看天天性色| 热99精品只有里视频精品| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩av在线导航| 亚洲精品福利资源站| 国产综合久久久久久| 91性高湖久久久久久久久_久久99| 日韩免费电影在线观看| 国产精品丝袜久久久久久高清| 亚洲iv一区二区三区| 亚洲激情视频在线观看| 久久精品一区中文字幕| 97久久国产精品| 久久久久免费精品国产| 日韩中文在线中文网在线观看| 成人女保姆的销魂服务| 中文字幕av一区二区| 一区二区三区www| 国语自产精品视频在线看一大j8| xxav国产精品美女主播| 久久视频在线直播| 亚洲美女性生活视频| 最近日韩中文字幕中文| 国模私拍视频一区| 久久成人精品电影| 日韩免费视频在线观看| 98精品国产高清在线xxxx天堂| 亚洲精品美女在线观看播放| 欧美激情中文字幕在线| 久久伊人免费视频| 欧美乱妇高清无乱码| 日韩精品视频中文在线观看| 亚洲精品www久久久久久广东| 伊人一区二区三区久久精品| 欧美精品videossex88| 777777777亚洲妇女| 中文字幕日韩综合av| 亚洲www视频| 疯狂做受xxxx高潮欧美日本| 国产综合视频在线观看| 91精品国产91久久久久久| 日韩免费电影在线观看| **欧美日韩vr在线| 中文字幕精品视频| 国产日韩精品电影| 欧美一级视频免费在线观看| 日韩av毛片网| 久久久成人的性感天堂| 欧美激情日韩图片| 国产精品第七十二页| 欧美区二区三区| 欧美精品18videosex性欧美| 5566日本婷婷色中文字幕97| 91精品国产高清| 亚洲精品国产品国语在线| 欧美精品九九久久| 欧美xxxx做受欧美.88| 欧美日韩国产中文字幕| 国产精品91在线| 成人h片在线播放免费网站| 亚洲人成伊人成综合网久久久| 久久91超碰青草是什么| 国产在线久久久| 91中文在线视频| 亚洲国产成人精品电影| 国产脚交av在线一区二区| 欧美中文字幕在线| 亚洲国产中文字幕在线观看| 亚洲高清免费观看高清完整版| 国语自产精品视频在免费| 中文字幕在线视频日韩| 久久久精品久久久| 亚洲精品v欧美精品v日韩精品| 国产精品一区=区| 欧美日韩一区免费| 国产精品女人久久久久久| 中文字幕亚洲一区在线观看| 日本高清不卡在线| 中文字幕日韩精品在线| 国产精品久久久久久久久久久久久| 国产精品va在线播放我和闺蜜| 在线电影中文日韩| 久久中文字幕在线| 亚洲欧洲日本专区| 久久综合色88| 久久精品视频导航| 日韩黄色高清视频| 欧美精品18videosex性欧美| 91av视频在线播放| 日韩av手机在线看| 日本一区二区三区在线播放| 伊人青青综合网站| 久久综合久久88| 久久久久久国产精品三级玉女聊斋| 日韩精品在线播放| 国产成人精品一区| 欧美亚洲一区在线| 福利视频一区二区| 欧美裸体xxxx| 中文字幕日韩精品有码视频| 亚洲国产欧美精品| 欧美性高潮床叫视频| xvideos亚洲人网站| 亚洲美女喷白浆| 久久免费福利视频| 97精品在线视频| 欧美综合在线观看| 日韩精品中文在线观看| 欧美成人国产va精品日本一级| 欧美一区亚洲一区| 午夜美女久久久久爽久久| 日韩精品欧美国产精品忘忧草| 92看片淫黄大片看国产片| 一区二区三区日韩在线| 亚洲图片欧美日产| 国产精品露脸自拍| 国产日韩欧美成人| 性欧美办公室18xxxxhd| 欧美日韩国产成人在线观看| 国产精品久久久久久亚洲调教| 91精品国产高清自在线看超| 91午夜理伦私人影院| 国产精品免费久久久久影院| 茄子视频成人在线| 美女撒尿一区二区三区| 国产精品jizz在线观看麻豆| 欧美日韩xxx| 国产有码一区二区| 亚洲在线免费看| 91在线网站视频| 亚洲欧洲日韩国产| 欧美一区二区三区免费观看| 欧美色欧美亚洲高清在线视频| 国产91精品高潮白浆喷水| 92看片淫黄大片看国产片| 欧洲精品毛片网站| 欧美日韩中文在线| 日本19禁啪啪免费观看www| 亚洲人成电影在线| 日本中文字幕成人| 日韩有码视频在线| 欧美性极品少妇精品网站| 国产精品尤物福利片在线观看| 精品一区二区三区四区| 一夜七次郎国产精品亚洲| 久久琪琪电影院| 亚洲另类xxxx| 久久香蕉频线观| 国产精品久久久久免费a∨大胸| 亚洲精品自拍视频| 91久久中文字幕|