Java Tools

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            83 隨筆 :: 0 文章 :: 16 評(píng)論 :: 0 Trackbacks
          由于工作需要,最近在找一些解決方案,發(fā)現(xiàn)Listener是一個(gè)很好的東西, 能夠監(jiān)聽到session,application的create,destroy,可以監(jiān)聽到session,application

           屬性綁定的變化,考慮了一下,可以應(yīng)用在"在線人數(shù)統(tǒng)計(jì)","數(shù)據(jù)緩存"等各個(gè)方面,

          下面是整理的一些資料.



          Listener是Servlet的監(jiān)聽器,它可以監(jiān)聽客戶端的請(qǐng)求、服務(wù)端的操作等。通過監(jiān)聽器,可以自動(dòng)激發(fā)一些操作,比如監(jiān)聽在線的用戶的數(shù)量。當(dāng)增加一個(gè)HttpSession時(shí),就激發(fā)sessionCreated(HttpSessionEvent se)方法,這樣就可以給在線人數(shù)加1。常用的監(jiān)聽接口有以下幾個(gè):

          ServletContextAttributeListener監(jiān)聽對(duì)ServletContext屬性的操作,比如增加、刪除、修改屬性。

          ServletContextListener監(jiān)聽ServletContext。當(dāng)創(chuàng)建ServletContext時(shí),激發(fā)contextInitialized(ServletContextEvent sce)方法;當(dāng)銷毀ServletContext時(shí),激發(fā)contextDestroyed(ServletContextEvent sce)方法。

          HttpSessionListener監(jiān)聽HttpSession的操作。當(dāng)創(chuàng)建一個(gè)Session時(shí),激發(fā)session Created(HttpSessionEvent se)方法;當(dāng)銷毀一個(gè)Session時(shí),激發(fā)sessionDestroyed (HttpSessionEvent se)方法。

          HttpSessionAttributeListener監(jiān)聽HttpSession中的屬性的操作。當(dāng)在Session增加一個(gè)屬性時(shí),激發(fā)attributeAdded(HttpSessionBindingEvent se) 方法;當(dāng)在Session刪除一個(gè)屬性時(shí),激發(fā)attributeRemoved(HttpSessionBindingEvent se)方法;當(dāng)在Session屬性被重新設(shè)置時(shí),激發(fā)attributeReplaced(HttpSessionBindingEvent se) 方法。

          下面我們開發(fā)一個(gè)具體的例子,這個(gè)監(jiān)聽器能夠統(tǒng)計(jì)在線的人數(shù)。在ServletContext初始化和銷毀時(shí),在服務(wù)器控制臺(tái)打印對(duì)應(yīng)的信息。當(dāng)ServletContext里的屬性增加、改變、刪除時(shí),在服務(wù)器控制臺(tái)打印對(duì)應(yīng)的信息。

          要獲得以上的功能,監(jiān)聽器必須實(shí)現(xiàn)以下3個(gè)接口:

          HttpSessionListener

          ServletContextListener

          ServletContextAttributeListener

          我們看具體的代碼,見示例14-9。

          【程序源代碼】

          1 // ==================== Program Discription =====================

          2 // 程序名稱:示例14-9 : EncodingFilter .java

          3 // 程序目的:學(xué)習(xí)使用監(jiān)聽器

          4 // ==============================================================

          5 import javax.servlet.http.*;

          6 import javax.servlet.*;

          7

          8 public class OnLineCountListener implements HttpSessionListener,

          ServletContextListener,ServletContextAttributeListener

          9 {

          10  private int count;

          11  private ServletContext context = null;

          12  

          13  public OnLineCountListener()

          14  {

          15   count=0;

          16   //setContext();

          17  }

          18  //創(chuàng)建一個(gè)session時(shí)激發(fā)

          19  public void sessionCreated(HttpSessionEvent se)

          20  {

          21   count++;

          22   setContext(se);

          23   

          24  }

          25  //當(dāng)一個(gè)session失效時(shí)激發(fā)

          26  public void sessionDestroyed(HttpSessionEvent se)

          27  {

          28   count--;

          29   setContext(se);

          30  }

          31  //設(shè)置context的屬性,它將激發(fā)attributeReplaced或attributeAdded方法

          32  public void setContext(HttpSessionEvent se)

          33  {

          34   se.getSession().getServletContext().
          posted on 2007-07-02 13:33 和田雨 閱讀(1092) 評(píng)論(2)  編輯  收藏 所屬分類: Servlet

          評(píng)論

          # re: 監(jiān)聽器統(tǒng)計(jì)在線的人數(shù)[未登錄] 2010-11-16 19:02 a
          hao  回復(fù)  更多評(píng)論
            

          # re: 監(jiān)聽器統(tǒng)計(jì)在線的人數(shù) 2013-08-18 19:18 sdfa
          @a
          不錯(cuò)很不錯(cuò)值得學(xué)習(xí)  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 静海县| 高雄县| 宜君县| 晴隆县| 泰顺县| 彰化市| 定安县| 伽师县| 灵宝市| 花莲县| 太仓市| 河东区| 荆州市| 定边县| 鸡泽县| 抚松县| 西平县| 成武县| 巴东县| 南昌县| 孝昌县| 象山县| 新闻| 景东| 彭州市| 西峡县| 临城县| 金川县| 监利县| 丰镇市| 阿拉尔市| 开封市| 盖州市| 巴青县| 涡阳县| 合川市| 旬阳县| 二手房| 海林市| 宁德市| 潜江市|