天天看點

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

分兩步走:

    (1)實作 javax.servlet.ServletContextListener 接口的兩個方法:contextInitialized()和contextDestroyed()

    contextInitialized():當Servlet容器啟動時會執行contextDestroyed():當Servlet容器停止時會執行

    (2)在contextInitialized()中加入需要監聽的程式,并由 java.util.Timer 的 schedule() 方法來控制監聽程式執行的頻率

    DEMO(這是我的一個短信回複監聽的程式原型,精簡了一下)

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

ReplyListener.java

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

package com.hanweb.jcms;

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

import javax.servlet.*;

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public class ReplyListener implements ServletContextListener {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

private ReplyTimer rt = null;

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public void contextInitialized(ServletContextEvent event) {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

String status = "[SYS] SMS reply listener start .";

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

event.getServletContext().log(status);

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

System.out.println(status);

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

rt = new ReplyTimer(1);

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

rt.start();

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

}

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public void contextDestroyed(ServletContextEvent event) {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

String status = "[SYS] SMS reply listener stop .";

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

if (rt != null) {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

rt.stop();

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

ReplyTimer.java

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

import java.util.*;

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public class ReplyTimer {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

private final Timer timer = new Timer();

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

private final int min;

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public ReplyTimer(int minutes) {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

min = minutes;

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public void start() {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

Date date = new Date();

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

timer.schedule(new ReplyTask(), date, min * 60 * 1000);

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public void stop() {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

timer.cancel();

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

ReplyTask.java

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public class ReplyTask extends TimerTask {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public void doSomething() {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

System.out.println("[SYS] SMS reply listener running ");

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

public void run() {

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

doSomething();

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

 将編譯好的class檔案放入WEB-INF/classes中,最後别忘記了在Servlet容器中目前WEB應用的web.xml中加入監聽語句:

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

<listener>

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

<listener-class>com.hanweb.jcms.ReplyListener</listener-class>

Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)

</listener>