天天看點

ServletContextListener的用法

這個J2EE小提示闡述了ServletContextListener的用法。這個事件類作為Web應用服務的一部分,處理Web應用的 servlet上下文(context)的變化的通知。這可以解釋為,好像有個人在伺服器旁不斷地通知我們伺服器在發生什麼事件。那當然需要監聽者了。因 此,在通知上下文(context)初始化和銷毀的時候,ServletContextListner非常有用。

ServletContextListener接口有兩方需要實作的方法:contextInitialized()和contextDestroyed();

Listener,譯為監聽者.顧名思義,它會監聽Servlet容器,當應用開始的時候它會調用contextInitialized()方法;

當應用關閉的時候,它同樣會調用contextDestroyed()方法.

我們可以利用這個特性初始化一些資訊,當然我們也可以利用Servlet類init()方法,并在配置檔案中讓它啟動應用的時候

就執行,并且在關閉的時候執行destroy()方法.但是繼承此接口應該更符合容器的應用.

舉個簡單的例子:在一些論壇,社群及聊天室當中,删除線上的逾時使用者就可以利用這個接口來實作.

可以利用JAVA的TimerTask及Timer類來實作每隔一定的時間進行自動檢測.

執行個體代碼如下:

UserOnlineTimerTask.java

-----------------

package com.bcxy.servlet;

import java.util.TimerTask;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public class UserOnlineTimerTask extends TimerTask {

Log log = LogFactory.getLog(UserOnlineTimerTask.class);

public void run() {

// 删除逾時線上使用者

log.info("删除線上的逾時使用者....");

}

------------------------------------

SysListener.java

-----------------------------------

import java.io.IOException;

import java.util.Timer;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServlet;

public class SysListener

extends HttpServlet

implements ServletContextListener {

Log log = LogFactory.getLog(SysListener.class);

Timer timer = new Timer();

public void service(ServletRequest request, ServletResponse response)

throws ServletException, IOException {

//

public void contextInitialized(ServletContextEvent sce) {

log.info("initial context....");

timer.schedule(new UserOnlineTimerTask(), 0, 10000);

public void contextDestroyed(ServletContextEvent sce) {

log.info("destory context....");

timer.cancel();

--------------------------------

如果你沒有使用log4j的話,你可以把log.info()改為System.out.println()會得到同樣的結果.

本文轉自kenty部落格園部落格,原文連結http://www.cnblogs.com/kentyshang/archive/2007/06/26/795878.html如需轉載請自行聯系原作者

kenty