简述
在Java/WEB的开发过程中,我们往往需要服务器端的程序能够定时自动为我们处理一点工作,比如定时搜索数据库中的数据, 或者定是向用户发送自动邮件或短信,或者是定时处理session或是application中的过期内容。
在大部分情况下,其实TimerTask已经足够进行这些处理了。但是在某些特定的环境下,例如定时自动处理服务器端application中的数据,那么我们就需要在定是程序中处理ServletContext对象。
但是因为ServletContext是一个标标准准的web对象,在普通的类,比如TimerTask的派生子类中,很难直接操作它,这个时候,我们就需要结合ServletContextListener来进行相关的处理了。
一、编写自动化业务处理类,并继承TimerTask
首先我们需要一个自动化业务处理类,这个类用来处理我们真正想要做的事情:
public class YourTimer extends TimerTask {
private ServletContext servletContext;
public YourTimer(ServletContext servletContext) {
super();
this.servletContext = servletContext;
}
@Override
public void run() {
//在这里撰写业务处理代码
}
}
上述代码片段中的run就是核心的业务处理方法,当我们完成所有的代码,并执行程序的时候,最终这个run方法就会定时为我们解决问题。
注意这个类是继承了TimerTask的,并且它有一个私有属性ServletContext对象,并且在类的构造器中会初始化这个对象。
二、编写监听器类
public class YourListener extends HttpServlet implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
/**
* 监听程序开始执行
*/
public void contextInitialized(ServletContextEvent arg0) {
YourTimer yourTimer = new YourTimer(arg0.getServletContext());
/**
* 每30秒处理一次
*/
Timer timer = new Timer();
timer.schedule(yourTimer, 0, 30000);
}
}
上面的代码片段非常简单,我们自己的这个监听类需要继承HttpServlet,同时实现ServletContextListener接口。
当我们的web容器启动的时候,这个类就会被调用,并且执行contextInitialized这个方法,所以我们只需要在这个方法里直接运行我们的Timer类来进行定时处理就可以了。
三、在web.xml中配置监听器
最后一步,在web.xml文件中配置监听器即可:
<listener>
<listener-class>com.yourpackage.YourListener</listener-class>
</listener>