<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    snowolf

    這樣的一種生活
    posts - 23, comments - 5, trackbacks - 0, articles - 11
      在網(wǎng)站中經(jīng)常需要進行在線人數(shù)的統(tǒng)計。過去的一般做法是結(jié)合登錄和退出功能,即當用戶輸入用戶名密碼進行登錄的時候計數(shù)器加1,然后當用戶點擊退出按鈕退出系統(tǒng)的時候計數(shù)器減1。這種處理方式存在一些缺點,例如:用戶正常登錄后,可能會忘記點擊退出按鈕,而直接關(guān)閉瀏覽器,導(dǎo)致計數(shù)器減1的操作沒有及時執(zhí)行;網(wǎng)站上還經(jīng)常有一些內(nèi)容是不需要登錄就可以訪問的,在這種情況下也無法使用上面的方法進行在線人數(shù)統(tǒng)計。
      我們可以利用Servlet規(guī)范中定義的事件監(jiān)聽器(Listener)來解決這個問題,實現(xiàn)更準確的在線人數(shù)統(tǒng)計功能。對每一個正在訪問的用戶,J2EE應(yīng)用服務(wù)器會為其建立一個對應(yīng)的HttpSession對象。當一個瀏覽器第一次訪問網(wǎng)站的時候,J2EE應(yīng)用服務(wù)器會新建一個HttpSession對象,并觸發(fā)HttpSession創(chuàng)建事件,如果注冊了HttpSessionListener事件監(jiān)聽器,則會調(diào)用HttpSessionListener事件監(jiān)聽器的sessionCreated方法。相反,當這個瀏覽器訪問結(jié)束超時的時候,J2EE應(yīng)用服務(wù)器會銷毀相應(yīng)的HttpSession對象,觸發(fā)HttpSession銷毀事件,同時調(diào)用所注冊HttpSessionListener事件監(jiān)聽器的sessionDestroyed方法。
      可見,對應(yīng)于一個用戶訪問的開始和結(jié)束,相應(yīng)的有sessionCreated方法和sessionDestroyed方法執(zhí)行。這樣,我們只需要在HttpSessionListener實現(xiàn)類的sessionCreated方法中讓計數(shù)器加1,在sessionDestroyed方法中讓計數(shù)器減1,就輕松實現(xiàn)了網(wǎng)站在線人數(shù)的統(tǒng)計功能。
      下面就是利用HttpSessionListener實現(xiàn)在線人數(shù)統(tǒng)計的一個例子,這個例子已經(jīng)在中創(chuàng)軟件的J2EE應(yīng)用服務(wù)器InforWeb中測試通過。
      首先,編寫一個簡單的計數(shù)器,代碼如下:
    1. package gongfei.cmc.articles.onlinecounter;
    2. public class OnlineCounter {
    3.     private static long online = 0;    
    4.     public static long getOnline() {
    5.         return online;
    6.     }    
    7.     public static void raise(){
    8.         online++;
    9.     } 
    10.     public static void reduce(){
    11.         online--;
    12.    }
    13. }

      然后,編寫HttpSessionListener實現(xiàn)類,在這個實現(xiàn)類的sessionCreated方法中調(diào)用OnlineCounter的raise方法,在sessionDestroyed方法中調(diào)用OnlineCounter的reduce方法,代碼如下:
    1. package gongfei.cmc.articles.onlinecounter;
    2. import javax.servlet.http.HttpSessionEvent;
    3. import javax.servlet.http.HttpSessionListener;
    4. public class OnlineCounterListener implements HttpSessionListener {
    5.     public void sessionCreated(HttpSessionEvent hse) {
    6.         OnlineCounter.raise();
    7.     }
    8.     public void sessionDestroyed(HttpSessionEvent hse) {
    9.         OnlineCounter.reduce();
    10.     }
    11. }

      再然后,把這個HttpSessionListener實現(xiàn)類注冊到網(wǎng)站應(yīng)用中,也就是在網(wǎng)站應(yīng)用的web.xml中加入如下內(nèi)容:
    1. <web-app>
    2.     ……
    3.     <listener>
    4.         <listener-class>
    5.             gongfei.cmc.articles.example.OnlineCounterListener
    6.         </listener-class>
    7.     </listener>
    8.     ……
    9. </web-app>

      OK,在線人數(shù)統(tǒng)計功能已經(jīng)實現(xiàn),只要在JSP頁面中加入下面這樣的腳本就能顯示但前在線人數(shù)了:
    1. <%@ page language="java" pageEncoding="GB2312" %>
    2. <%@ page import="gongfei.cmc.articles.onlinecounter.OnlineCounter" %>
    3. <html>
    4.     <head><title>On Line Counert</title></head>
    5.     <body bgcolor="#FFFFFF">
    6.         On line:<%=OnlineCounter.getOnline()%>
    7.     </body>
    8. </html>



    主站蜘蛛池模板: 亚洲欧洲日产韩国在线| 亚洲精品卡2卡3卡4卡5卡区| 亚洲嫩草影院在线观看| 久久免费视频精品| 亚洲∧v久久久无码精品| 国产永久免费高清在线| 国产v亚洲v天堂无码网站| 在线观看黄片免费入口不卡| 亚洲精品中文字幕无码蜜桃| 国产一区二区三区免费观看在线| 亚洲第一AV网站| 免费成人在线视频观看| 亚洲一区二区在线免费观看| 亚洲黄色免费网址| 亚洲精品二三区伊人久久| 日本xxwwxxww在线视频免费| 午夜亚洲乱码伦小说区69堂| 亚洲中文字幕无码不卡电影| 国产情侣久久久久aⅴ免费| 亚洲精品福利在线观看| 99视频在线精品免费观看6| 粉色视频成年免费人15次| 国产亚洲欧洲Aⅴ综合一区| 久久一区二区三区免费播放| 亚洲福利视频网址| 午夜男人一级毛片免费| 污网站免费在线观看| 国产偷国产偷亚洲清高动态图 | 亚洲精品自偷自拍无码| 四虎国产精品免费视| 最近更新免费中文字幕大全| 亚洲国产成人九九综合| 免费欧洲美女牲交视频| 嫩草成人永久免费观看| 亚洲人成自拍网站在线观看| 精品亚洲视频在线观看| 嫖丰满老熟妇AAAA片免费看| 一区二区三区免费精品视频| 亚洲视频在线观看地址| 亚洲乱码国产一区网址| 成人午夜免费福利视频|