如何以指定的时间间隔定期自动调用servlet
必须定期调用servlet。(如andorid中的服务概念)
这该怎么做。 使用计时器还是其他解决方案?
提前致谢。
扩展JB Nizet的评论……
以前接受的答案是一种黑客攻击。 如果目标是让一些常规任务作为Web应用程序的一部分执行,那么Java提供了一些灵活的技术来实现这一目标。
ServletContextListener
第一个是Servlet规范定义的钩子,用于在部署Web应用程序和Web应用程序关闭时调用代码。 这个钩子是ServletContextListener 。
ScheduledExecutorService
第二部分是添加到Java最新版本的执行程序服务,它是旧Timer类的一种更复杂的替代方法。 特别需要ScheduledExecutorService 。
因此,当您的Web应用程序启动时,ServletContextListener将启动ScheduledExecutorService。 当ServletContextListener被告知关闭时,它会告诉执行程序正常退出。
一个技巧:确保捕获执行程序中的所有exception。 如果exception泄漏,执行程序将以静默方式停止执行。 这是一个不是bug的function。 阅读文档并通过一些谷歌搜索进行研究。
搜索StackOverflow以获取这些示例和讨论。
您可以使用 ,
response.addHeader("Refresh", "5");
“5”表示5 seconds
.response.addHeader response.addHeader("Refresh", "5")
调用添加一个响应头,该头发送回客户端,指示浏览器应在5秒后发出另一个servlet请求。
使用html也可以做同样的事情,
你可以在这里传递url,
还看看这里 ..
如果使用Java EE 6,则可以在战争中打包EJB,并且可以使用@Schedule带注释的EJB。
它将定期执行,您不必执行任何其他操作(运行线程或hibernate)。
您可以使用Java Threads执行此操作。
-
安排servlet在服务器启动时加载。 请参阅如何设置要在启动容器时加载的servlet,而不是第一次请求?
-
在这个servlet的init()方法中,产生一个线程。
- 在此线程的run()方法中,计算在执行任务之前要等待的毫秒数。 然后调用Thread.sleep(msec)。 然后执行任务,并循环(无限)。 java.util.Timer类可以提供很多帮助。
使用java.util.Timer类的schedule()方法:
long now = System.currentTimeMillis(); Date whenToRun = new Date(now+millisecondsInFuture); Timer timer = new Timer(); TimerTask task = new TimerTask() { public void run() { // job code here } }; timer.schedule(task, whenToRun);
或者使用java.util.Timer类的scheduleAtFixedRate()方法:
int initialDelay = 30000; // start after 30 seconds int period = 5000; // repeat every 5 seconds Timer timer = new Timer(); TimerTask task = new TimerTask() { public void run() { // job code here } }; timer.scheduleAtFixedRate(task, initialDelay, period);