请问谁知道有什么方法可以定时执行servlet ,除页面标签方法、web.xml配制方法 除外。还有没有其它的方法。能不能写个简单的例子
你的定时需要什么时候开始执行?
服务器启动?还是点击触发?
如果是服务器启动时就要开始执行,就需要用listener,这样需要在web.xml中增加配置。
如果要点击触发,就在你的触发类中调用timer吧,
前段时间帮朋友写了个, 你看下吧:
触发类---
[code="java"]import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class TimerTestAction implements ServletContextListener{
private Timer timer;
public void contextDestroyed(ServletContextEvent servletcontextevent) {
timer.cancel();
servletcontextevent.getServletContext().log("定时器销毁~~~");
System.out.println("定时任务结束~~");
}
public void contextInitialized(ServletContextEvent servletcontextevent) {
System.out.println("定时任务开始~~");
timer = new Timer(true);
timer.schedule(new TimerRunAction(servletcontextevent.getServletContext()), 0, 5*1000);
}
}
[/code]
定时器----
[code="java"]
import java.util.Calendar;
import java.util.TimerTask;
import javax.servlet.ServletContext;
public class TimerRunAction extends TimerTask{
private static final int C_SCHEDULE_HOUR = 0;
private static boolean isRunning = false;
private ServletContext context = null;
public TimerRunAction(ServletContext context){
this.context = context;
}
@Override
public void run() {
Calendar c = Calendar.getInstance();
if(!isRunning){
if(C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY)){
context.log("kaishi zhixing zhiding renwu~~");
}
else{
context.log("shangyici renwu zhixing haiwei jieshu~~~");
}
}
}
}
[/code]
这个是用listener做触发, 你可以根据自己的需要写自己的触发类
首先,你定时调用servlet有什么用?请求来的request里的数据有什么?
如果支持一次简单请求,没有任何数据的请求,那还不如不用servlet实现,做个简单的java类,用调度框架,例如quartz去定时处理。同样,你也可以用这个调度任务去请求这个servlet。