java监听类的用法

2008-08-21 12:27
2008-06-11 19:48

场景:在开发过程中,有时候我们遇到这样一种情况:用户不需要做任何操作而我们的系统就能帮他实现特定功能,比如说,客户通常情况下是通过点击某个按钮来实现某个功能,但是,有时候有的事情是天天必须去做的,而客户每天必须登录系统去点击功能按钮(或者其它方式的事件)来实现,为了减少客户的工作量,象这种情况,我们就可以就servlet的监听类来实现了,我这里的情况是,客户每天只要操作一次。当然,其它情况看了代码就会作相应的修改了。

思路:系统服务器只要在运行,我们可以每天定时运行某段代码,而不需要用户手动来操作了,其实大家都知道,当点击某个功能按钮时,其实在后台是调用一个方法而已,所以,我们可以让这个方法定时自动运行从而达到相同的效果。

文章仅代表本人观点,如有错误之处,还望批评指正,大家一起学习,当然,如果你觉得这文章不错的话,转载的时候请注明出处(http://hi.baidu.com/rascal_hu),谢谢!

首先我们定义监听类:AutoListener.java
Code:
//----------------Begin---------------------------
package DataReceive.AutoReceives;

import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
*
* @author jesun 2008-05-09 监听类 作者博客:http://hi.baidu.com/rascal_hu
*
*/

public class AutoListener implements ServletContextListener {

private Timer timer;

public void contextInitialized(ServletContextEvent arg0) {
   // TODO Auto-generated method stub
   System.out.println("启动监听类");
   timer = new Timer(true);
   timer.schedule(new DataReceive(), 0, 59*60*1000);//周期为59分钟59*60*1000,每隔一段时间调用DataReceive类
}
public void contextDestroyed(ServletContextEvent arg0) {
   // TODO Auto-generated method stub
   timer.cancel();
}
}
//---------------------------End---------------------
二,定义监听类所调用的类:
code:
//-----------------Begin-----------------------------
package DataReceive.AutoReceives;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;

import DataReceive.YouMethod;

/**
*
* @author Jesun 2008.05.09 数据自动接收类
* 作者博客:http://hi.baidu.com/rascal_hu
*/
public class DataReceive extends TimerTask {
static private final String recTime = "23";//接收时间,小时,24 进制

static private String recDate = "";// 已经接收数据的日期

//Log log=LogFactory.getLog(AutoReceive.class);
public void run() {
   // TODO Auto-generated method stub
   System.out.println("run mothed is runing!");
   String currentDate = this.getDateTime();// 获取当前时间
   String date = currentDate.substring(0, 10);// 取当前日期
   String tempTime = currentDate.substring(11, 13);// 取当前小时
   /*
   * 接收条件:首先看时间是不是定义的接收时间, 如时间正确,再判断当前日期的数据是不是已经接收,未接收则开始接收数据
   */
   if (recTime.equals(tempTime)) {
    if (!date.equals(recDate)) {
     System.out.println("开始接收!");
     this.recDate = date;// 把当前日期标记为接收日期
     try{//业务方法开始
     YouMethod obj = new YouMethod();//大家可以根据需要写成自己的业务方法
      obj.method();
     }catch(Exception e){
      System.out.println("I dead by cause:"+e.toString());     
     }
    }
   }
}

/**
* 获取当前系统时间
* @return 当前系统时间 格式:yyyy-MM-dd HH:mm:ss
*/
private String getDateTime() {
   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   String createDate = format.format(new Date()).trim();
   return createDate;
}
}
//---------------End--------------------------
完成这两步,我们只需要在web.xml文件中定义listener类了,在web.xml文件中的</web-app>前添加如下代码:
Code:
<listener>
<listener-class>DataReceive.AutoReceives.AutoListener</listener-class>
</listener>

    到这里,我们就算完成任务了,呵呵,当然,大家可以根据实际情况操作,我这里用户的要求是每天晚上11点钟实现某个功能,且一天仅一次(当然,具体什么功能就不能说了,这可是公司机密呢)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值