在Servlet2.3規(guī)范中,Web應(yīng)用事件是新增加的部分。它讓你能最大程度地控制你的Web應(yīng)用。在本文中,我們將學(xué)習(xí)兩個(gè)很重要的應(yīng)用事件:
應(yīng)用的啟動(dòng)和停止
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è)接口的簡單的java類:
javax.servlet.ServletContextListener
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è)方法:
public void contextInitialized
(ServletContextEvent sce);
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)建和失效:
public void sessionCreated
(HttpSessionEvent se);
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)簽
中來告訴服務(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)聽類是非常簡單的。現(xiàn)在,每次的服務(wù)器的啟動(dòng)和停止,會(huì)話的創(chuàng)建和失效,配置好的監(jiān)聽類的相應(yīng)的方法就會(huì)被調(diào)用。
posted on 2006-01-25 10:11
阿成 閱讀(238)
評(píng)論(0) 編輯 收藏 所屬分類:
J2EE