posts - 120,  comments - 19,  trackbacks - 0
          在Servlet2.3規(guī)范中,Web應用事件是新增加的部分。它讓你能最大程度地控制你的Web應用。在本文中,我們將學習兩個很重要的應用事件:

          應用的啟動和停止

          Session的創(chuàng)建和失效如它們的名字那樣,應用啟動事件發(fā)生在你的應用第一次被servlet容器裝載和啟動的時候;停止事件發(fā)生在Web應用停止的時候。

          Session創(chuàng)建事件發(fā)生在每次一個新的session創(chuàng)建的時候,類似地Session失效事件發(fā)生在每次一個Session失效的時候。為了使用這些Web應用事件為你做些有用的事情,我們必須創(chuàng)建和使用一些特殊的“監(jiān)聽”類。下面,我們將研究這些監(jiān)聽類到地是什么以及我們?nèi)绾稳ナ褂盟鼈儭?br />
          監(jiān)聽類:

          它們是實現(xiàn)了下邊兩個接口中任何一個接口的簡單的java類:

          javax.servlet.ServletContextListener 
          javax.servlet.http.HttpSessionListener


          如果你想讓你的類監(jiān)聽應用的啟動和停止事件,你就得實現(xiàn)ServletContextListener接口;如果你想讓你的類去監(jiān)聽Session的創(chuàng)建和失效事件,那你就得實現(xiàn)HttpSessionListener接口。 讓我們看看在這些接口中你必須要實現(xiàn)的方法。

          1.ServletContextListener :

          接口包括如下兩個方法:

          public void contextInitialized
          (ServletContextEvent sce); 
          
          public void contextDestroyed
          (ServletContextEvent sce);


          如果你實現(xiàn)了一個接口,那你就必須實現(xiàn)它所有的方法。因此,如果你想利用應用的啟動和停止事件,你就需要創(chuàng)建一個Java類并實現(xiàn)ServletContextListener接口。下邊是這樣的一個類的例子:

          /*File : ApplicationWatch.java*/
          import javax.servlet.ServletContextListener;
          import javax.servlet.ServletContextEvent;
          public class ApplicationWatch implements 
          ServletContextListener 
          {
          public static long
          applicationInitialized = 0L;
          /* 應用啟動事件 */
          public void contextInitialized
          (ServletContextEvent ce)
          {
          applicationInitialized =
          System.currentTimeMillis();
          }
          /*應用停止事件 */
          public void contextDestroyed
          (ServletContextEvent ce) {}
          }


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

          我將很快解釋如何告訴服務器我們有這個監(jiān)聽類,但首先讓我們看看HttpSessionListener接口有什么不同的方法。

          2.HttpSessionListener :

          這個接口也只包含兩個方法,分別對應于Session的創(chuàng)建和失效:

          public void sessionCreated
          (HttpSessionEvent se); 
          
          public void sessionDestroyed
          (HttpSessionEvent se);


          如上邊的ApplicationWatch例子那樣,我們也創(chuàng)建了一個實現(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類實現(xiàn)了HttpSessionListener接口,其目的是計算活動會話的數(shù)量。

          好了,我們已經(jīng)學習了什么是Web應用事件,有什么接口可以用以及看到了一些實現(xiàn)這些接口的例子。讓我們看看如何告訴應用服務器我們有這些監(jiān)聽類。

          Web.xml :

          我們通過把類路徑加入/WEB-INF/web.xml文件的標簽中來告訴服務器我們的監(jiān)聽類。下邊是一個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)聽類是非常簡單的。現(xiàn)在,每次的服務器的啟動和停止,會話的創(chuàng)建和失效,配置好的監(jiān)聽類的相應的方法就會被調(diào)用。

          posted on 2006-01-25 10:11 阿成 閱讀(243) 評論(0)  編輯  收藏 所屬分類: J2EE
          主站蜘蛛池模板: 体育| 团风县| 渝北区| 达拉特旗| 田阳县| 黑河市| 眉山市| 寻乌县| 普宁市| 绥德县| 调兵山市| 平定县| 基隆市| 偃师市| 开平市| 噶尔县| 米林县| 鲜城| 东乌珠穆沁旗| 河北区| 冀州市| 旬阳县| 长武县| 内黄县| 太原市| 温泉县| 商水县| 遂昌县| 绵阳市| 开化县| 宣武区| 广丰县| 资中县| 都匀市| 乐平市| 长沙市| 昌乐县| 桦南县| 银川市| 和政县| 新巴尔虎右旗|