牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Java中用Servlet Listener实现定时监听 (Timer、TimerTask)

转载自:http://www.zjsyc.com/blog/article/J2EE/318.html

分两步走:

    (1)实现 javax.servlet.ServletContextListener 接口的两个方法:contextInitialized()和contextDestroyed()

    contextInitialized():当Servlet容器启动时会执行contextDestroyed():当Servlet容器停止时会执行

    (2)在contextInitialized()中加入需要监听的程序,并由 java.util.Timer 的 schedule() 方法来控制监听程序执行的频率

    DEMO(这是我的一个短信回复监听的程序原型,精简了一下)

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

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容器中当前WEB应用的web.xml中加入监听语句:

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

posted on 2012-05-11 16:42 杨粼波 阅读(2182) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理