Java中用ServletListener實現(xiàn)定時監(jiān)聽

字號:

分兩步走:
    (1)實現(xiàn) javax.servlet.ServletContextListener 接口的兩個方法:contextInitialized()和contextDestroyed()
    contextInitialized():當(dāng)Servlet容器啟動時會執(zhí)行contextDestroyed():當(dāng)Servlet容器停止時會執(zhí)行
    (2)在contextInitialized()中加入需要監(jiān)聽的程序,考試,大提示由 java.util.Timer 的 schedule() 方法來控制監(jiān)聽程序執(zhí)行的頻率
    DEMO(這是我的一個短信回復(fù)監(jiān)聽的程序原型,精簡了一下)
    ReplyListener.java
    package com.hanweb.jcms;
    import javax.servlet.*;
    public class ReplyListener implements ServletContextListener {
    private ReplyTimer rt = null;
    public void contextInitialized(ServletContextEvent event) {
    String status = "[SYS] SMS reply listener start .";
    event.getServletContext().log(status);
    System.out.println(status);
    rt = new ReplyTimer(1);
    rt.start();
    }
    public void contextDestroyed(ServletContextEvent event) {
    String status = "[SYS] SMS reply listener stop .";
    event.getServletContext().log(status);
    System.out.println(status);
    if (rt != null) {
    rt.stop();
    }
    }
    }
    ReplyTimer.java
    package com.hanweb.jcms;
    import java.util.*;
    public class ReplyTimer {
    private final Timer timer = new Timer();
    private final int min;
    public ReplyTimer(int minutes) {
    min = minutes;
    }
    public void start() {
    Date date = new Date();
    timer.schedule(new ReplyTask(), date, min * 60 * 1000);
    }
    public void stop() {
    timer.cancel();
    }
    }
    ReplyTask.java
    package com.hanweb.jcms;
    import java.util.*;
    public class ReplyTask extends TimerTask {
    public void doSomething() {
    System.out.println("[SYS] SMS reply listener running ");
    }
    public void run() {
    doSomething();
    }
    }
     將編譯好的class文件放入WEB-INF/classes中,考試,大提示別忘記了在Servlet容器中當(dāng)前WEB應(yīng)用的web.xml中加入監(jiān)聽語句:
    
    com.hanweb.jcms.ReplyListener