标签:servlet 控制台 web.xml load-on-startup 定时
有部分Javaee或者Javaweb的组件要求在web.xml部分配置些代码,如果你细心留意一下,就会发现其中大部分都有load-on-startup的参数。这个参数是用来配合那些仅有void init(ServletConfig config)的Servlet来创造一条随服务器共存亡的线程执行所需要的任务的。有些任务必须在服务器开始就开始,在服务器结束就结束,你可以考虑利用Servlet的load-on-startup来完成。比如一个网站要求时刻检查一些东西,比如微信接入要求每7200秒,2个小时就要向服务器反馈一些信息等等,你可以考虑是利用这个实现。
一、基本目标
创造一个Servlet,每1秒就向控制台输出当前时间,也就是Tomcat的控制台每1秒就会显示当前时间,这个动作与服务器共存亡。
二、制作过程
1、首先网站工程的目录结构如下图所示,没有任何页面,在src文件夹下面仅有一个等待被web.xml调用的SecondTimer.java,在lib文件夹放入javax.servlet-api-3.1.0.jar,以免有些低版本的Tomcat不遵循Servlet3.0规范,当然这个例子在低版本的Servlet也是没问题的,向下兼容的,怕是怕部分来路不明的Tomcat服务器不支持Servlet。javax.servlet-api-3.1.0.jar你在网上一搜一大堆,超过3.0就行,以免出现这样那样的问题。
2、web.xml如下所示,不像我在《【Servlet】最简单的Servlet JavaWeb程序》(点击打开链接)说过那些最简单的Servlet,根目录下的SecondTimer在服务器运行就马上被执行。load-on-startup的参数是优先级,越少越优先,最优先为0。意思是如果有多个这样的Servlet,那么比对哪个load-on-startup较少,哪个先执行。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>timer</servlet-name> <servlet-class>SecondTimer</servlet-class> <load-on-startup>1</load-on-startup> </servlet> </web-app>
import java.util.*; import java.text.SimpleDateFormat; import javax.servlet.*; import javax.servlet.http.*; public class SecondTimer extends HttpServlet { public void init(ServletConfig config) throws ServletException { Timer timer = new Timer(); timer.schedule(new MyTask(), 0, 1000); } } class MyTask extends TimerTask { public void run() { System.out.println(new SimpleDateFormat("yyyy年MM月dd日hh:mm:ss E") .format(new Date(System.currentTimeMillis())).toString()); } }
【Servlet】利用load-on-startup创造一条随服务器共存亡的线程
标签:servlet 控制台 web.xml load-on-startup 定时
原文地址:http://blog.csdn.net/yongh701/article/details/44000911