如何在jsp中设置定时器

2 篇文章 0 订阅
1 篇文章 0 订阅

     定时器是我们经常使用到的工具,那么如何在开发网站时使用定时器呢?下面就以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
信息: 指定任务执行结束


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值