小海賊的夜晚

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            14 隨筆 :: 0 文章 :: 9 評(píng)論 :: 0 Trackbacks
          概述:

             在Servlet2.3規(guī)范中,Web應(yīng)用事件是新增加的部分。它讓你能最大程度地控制你的Web應(yīng)用。在本文中,我們將學(xué)習(xí)兩個(gè)很重要的應(yīng)用事件:
        1. 應(yīng)用的啟動(dòng)和停止
        2. Session的創(chuàng)建和失效
          如它們的名字那樣,應(yīng)用啟動(dòng)事件發(fā)生在你的應(yīng)用第一次被servlet容器裝載和啟動(dòng)的時(shí)候;停止事件發(fā)生在Web應(yīng)用停止的時(shí)候。 
              Session創(chuàng)建事件發(fā)生在每次一個(gè)新的session創(chuàng)建的時(shí)候,類似地Session失效事件發(fā)生在每次一個(gè)Session失效的時(shí)候。為了使用這些Web應(yīng)用事件為你做些有用的事情,我們必須創(chuàng)建和使用一些特殊的“監(jiān)聽”類。下面,我們將研究這些監(jiān)聽類到地是什么以及我們?nèi)绾稳ナ褂盟鼈儭?BR> 
          監(jiān)聽類:

          它們是實(shí)現(xiàn)了下邊兩個(gè)接口中任何一個(gè)接口的簡(jiǎn)單的java類:
        3. javax.servlet.ServletContextListener 
        4. javax.servlet.http.HttpSessionListener  
              如果你想讓你的類監(jiān)聽?wèi)?yīng)用的啟動(dòng)和停止事件,你就得實(shí)現(xiàn)ServletContextListener接口;如果你想讓你的類去監(jiān)聽Session的創(chuàng)建和失效事件,那你就得實(shí)現(xiàn)HttpSessionListener接口。 讓我們看看在這些接口中你必須要實(shí)現(xiàn)的方法。
          1.ServletContextListener :
          接口包括如下兩個(gè)方法:
        5. public void contextInitialized(ServletContextEvent sce); 
        6. public void contextDestroyed(ServletContextEvent sce); 
           
             如果你實(shí)現(xiàn)了一個(gè)接口,那你就必須實(shí)現(xiàn)它所有的方法。因此,如果你想利用應(yīng)用的啟動(dòng)和停止事件,你就需要?jiǎng)?chuàng)建一個(gè)Java類并實(shí)現(xiàn)ServletContextListener接口。下邊是這樣的一個(gè)類的例子:
           
          /*File : ApplicationWatch.java*/
          import javax.servlet.ServletContextListener;
          import javax.servlet.ServletContextEvent;
          public class ApplicationWatch implements ServletContextListener {
          public static long applicationInitialized = 0L;
          /* 應(yīng)用啟動(dòng)事件 */
          public void contextInitialized(ServletContextEvent ce) {
          applicationInitialized = System.currentTimeMillis();
          }
          /*應(yīng)用停止事件 */
          public void contextDestroyed(ServletContextEvent ce) {}
          }

             在上邊的代碼中,ApplicationWatch類實(shí)現(xiàn)了ServletContextListener接口。它實(shí)現(xiàn)了接口中的兩個(gè)方法,但只用了其中的一個(gè)方法,另一個(gè)方法中沒有寫任何代碼。這個(gè)類把應(yīng)用啟動(dòng)的時(shí)間記錄在一個(gè)可以從其它應(yīng)用類中存取應(yīng)用啟動(dòng)時(shí)間的public static變量中。 

             我將很快解釋如何告訴服務(wù)器我們有這個(gè)監(jiān)聽類,但首先讓我們看看HttpSessionListener接口有什么不同的方法。
          2.HttpSessionListener :
          這個(gè)接口也只包含兩個(gè)方法,分別對(duì)應(yīng)于Session的創(chuàng)建和失效:
        7. public void sessionCreated(HttpSessionEvent se); 
        8. public void sessionDestroyed(HttpSessionEvent se);

             如上邊的ApplicationWatch例子那樣,我們也創(chuàng)建了一個(gè)實(shí)現(xiàn)HttpSessionListener接口的類。如下:
          /*File : SessionCounter.java*/
          import javax.servlet.http.HttpSessionListener;
          import javax.servlet.http.HttpSessionEvent;
          public class SessionCounter implements HttpSessionListener {
          private static int activeSessions =0;
          /* Session創(chuàng)建事件 */
          public void sessionCreated(HttpSessionEvent se) {
                 activeSessions++;
          }
          /* Session失效事件 */
          public void sessionDestroyed(HttpSessionEvent se) {
          if(activeSessions>0)activeSessions--;
          }

          public static int getActiveSessions() {
          return activeSessions;
          }
          }

             在上邊的代碼中,SessionCounter類實(shí)現(xiàn)了HttpSessionListener接口,其目的是計(jì)算活動(dòng)會(huì)話的數(shù)量。
             好了,我們已經(jīng)學(xué)習(xí)了什么是Web應(yīng)用事件,有什么接口可以用以及看到了一些實(shí)現(xiàn)這些接口的例子。讓我們看看如何告訴應(yīng)用服務(wù)器我們有這些監(jiān)聽類。

          Web.xml :

             我們通過把類路徑加入/WEB-INF/web.xml文件的標(biāo)簽<listener>中來告訴服務(wù)器我們的監(jiān)聽類。下邊是一個(gè)web.xml文件的例子:
          <!-- Web.xml -->
          <?xml version="1.0" encoding="ISO-8859-1"?>
          <!DOCTYPE web-appPUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
          <web-app>
          <!-- Listeners -->
          <listener>
          <listener-class>
          com.stardeveloper.web.listener.SessionCounter
          </listener-class>
          </listener>
          <listener>
          <listener-class>
          com.stardeveloper.web.listener.ApplicationWatch</listener-class>
          </listener>
          </web-app>
             如上所示,在web.xml文件中聲明監(jiān)聽類是非常簡(jiǎn)單的?,F(xiàn)在,每次的服務(wù)器的啟動(dòng)和停止,會(huì)話的創(chuàng)建和失效,配置好的監(jiān)聽類的相應(yīng)的方法就會(huì)被調(diào)用。就這么簡(jiǎn)單!

          總結(jié):

             在本文中我們學(xué)習(xí)了什么是Web應(yīng)用事件和我們?nèi)绾瓮ㄟ^創(chuàng)建特殊的“監(jiān)聽”類來使用它們。之后我們分別創(chuàng)建了兩個(gè)實(shí)現(xiàn)了ServletContextListener和HttpSessionListener接口的類。我們也學(xué)習(xí)了如何在web.xml文件中使用專門的<listener>和<listener-class>標(biāo)簽來聲明這些監(jiān)聽類。
        9. posted on 2005-08-03 14:36 海賊 閱讀(290) 評(píng)論(0)  編輯  收藏 所屬分類: Servlet and JSP

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 上林县| 和平区| 新乐市| 通江县| 聊城市| 新闻| 澄江县| 东阿县| 台南市| 仙游县| 牟定县| 贡嘎县| 阿合奇县| 开封市| 富顺县| 宾川县| 申扎县| 镇平县| 田东县| 永兴县| 平南县| 十堰市| 微山县| 新闻| 拉孜县| 彭泽县| 昌吉市| 清丰县| 鄂托克前旗| 延吉市| 若尔盖县| 甘孜| 桂东县| 临夏市| 松溪县| 公安县| 兴文县| 巨鹿县| 鸡东县| 临朐县| 扬州市|