定时器是我们经常使用到的工具,那么如何在开发网站时使用定时器呢?下面就以jsp为例进行讲解:
定时器可以在指定的时间,指定周期内完成指定的指令,对于定期的进行操作非常有用;设置定时器的方式有许多种,本例中使用的是javax.servlet.ServletContextListener和java.util.Timer来实现;
对于javax.servlet.ServletContextListener接口,定义实例ContextListener继承ServletContextListener,重写contextInitialized(ServletContextEvent event)()和contextDestroyed(ServletContextEvent event) ()方法,具体代码如下:
ContextListener类
import:java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ContextListener implements ServletContextListener {
private Timer mTimer = null;
// 参数为空的构造方法
public ContextListener() {
}
/*
*
* 当Tomcat启动时,会将contextInitialized方法加入服务器,并执行相应的方法;
*
* @see
* javax.servlet.ServletContextListener#contextInitialized(javax.servlet
* .ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent event) {
// 设置一个定时器;
mTimer = new Timer(true);
event.getServletContext().log("定时器已经启动");
// 定时器定时到指定时间,执行相应的方法或类;
mTimer.schedule(new MyTask(event.getServletContext()), 0, 60 * 1000 * 60);
event.getServletContext().log("加入时间调度表");
}
/**
* 当Tomcat停止时自动退出
*/
public void contextDestroyed(ServletContextEvent event) {
mTimer.cancel();
System.out.println("定时器已经销毁");
event.getServletContext().log("定时器已经销毁");
}
}
红色字体处是实例化了要执行的任务类,要执行的方法就在其中;黄色部分即要设置的时间周期,例如我需要1小时执行一次,即60*1000*60;
MyTask类:
import java.util.TimerTask;
import javax.servlet.ServletContext;
public class MyTask extends TimerTask {
private ServletContext mContext = null; // 设置Context上下文;
private static boolean isRunning = false;
private static int count = 0;
public MyTask(ServletContext context) {
this.mContext = context;
}
@Override
public void run() {
if (!isRunning) {
isRunning = true;
mContext.log("开始执行指定任务");
//此处写你要执行的指令
System.out.println(count++);
isRunning = false;
mContext.log("指定任务执行结束");
} else {
mContext.log("还未执行完");
}
}
}
最后,要在web.xml中加上定时器的路径;
<listener>
<listener-class>sdau.edu.test.timer.ContextListener</listener-class>
</listener>
将网站部署到Tomcat上该定时器就可以执行;执行如下;
2015-1-15 17:37:53 org.apache.catalina.core.ApplicationContext log
信息: 定时器已经启动
0
2015-1-15 17:37:53 org.apache.catalina.core.ApplicationContext log
信息: 加入时间调度表
2015-1-15 17:37:53 org.apache.catalina.core.ApplicationContext log
信息: 开始执行指定任务
2015-1-15 17:37:53 org.apache.catalina.core.ApplicationContext log
信息: 指定任务执行结束