原文链接:http://jingpin.jikexueyuan.com/article/49660.html

作者: 一直向北
发布时间:2015-07-13 11:12:13

方法1:tomcat 自动执行servlet

写一个servlet,在init()方法中写好想要执行的程序,程序如下:

eclipse新建一个web\Dynamic Web Project , name = myweb1 , 把tomcat中的 servlet-api.jar复制到lib中,新建一个类MyServlet.java, 继承 javax.servlet.HttpServlet,代码如下:

[java] view plaincopy

 
  1. package org.cai;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;
  4. public class MyServlet extends HttpServlet {
  5. @Override
  6. public void init() throws ServletException {
  7. // TODO Auto-generated method stub
  8. super.init();
  9. System.out.println("自动加载启动.");
  10. System.out.println("自动加载启动.");
  11. for(int i = 0; i < 10; i++){
  12. System.out.println(i + "、 自动加载启动.");
  13. }
  14. }
  15. }

同时,在web.xml配置文件内容如下:

[html] view plaincopy

 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3. <display-name>myweb1</display-name>
  4. <welcome-file-list>
  5. <welcome-file>index.jsp</welcome-file>
  6. </welcome-file-list>
  7. <servlet>
  8. <servlet-name>MyServlet</servlet-name>
  9. <servlet-class>org.cai.MyServlet</servlet-class>
  10. <strong><load-on-startup>0</load-on-startup></strong>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>MyServlet</servlet-name>
  14. <url-pattern>/</url-pattern>
  15. </servlet-mapping>
  16. </web-app>

其中<load-on-startup>0</load-on-startup>即可实现tomcat启动时执行该servlet

load-on-startup的值必须为整数

当load-on-startup值为负整数或者未指定时,容器在该servlet被调用时加载

当其值为0和正整数时,容器启动时加载,值越小,优先级越高

使用虚拟路径部署到tomcat中:在 tomcat的 server.xml的 </Host>前加入:

<Context debug="0" docBase="F:/studyworkspace/myweb1/WebRoot" path="myweb1" reloadable="true">
     </Context>

docBase为 myweb1的webroot的路径 ,path为上下文
方法2:Servlet侦听器

要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,同时实现它的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)两个接口函数。

listener类如下:

[java] view plaincopy

 
  1. package org.cai;
  2. import javax.servlet.ServletContextEvent;
  3. import javax.servlet.ServletContextListener;
  4. public class MyListener implements ServletContextListener {
  5. private java.util.Timer timer = null ;
  6. public void contextDestroyed(ServletContextEvent event) {
  7. // TODO Auto-generated method stub
  8. }
  9. public void contextInitialized(ServletContextEvent event) {
  10. timer = new java.util.Timer(true) ;
  11. event.getServletContext().log("定时器已启动。") ;
  12. timer.schedule(new MyTask(event.getServletContext()), 0, 5000) ;
  13. event.getServletContext().log("已经添加任务调度表。" ) ;
  14. }
  15. }

contextInitialized函数里的内容将被自动执行
最后在web.xml里面添加一个监听节点就行了
  <listener>
   <listener-class>org.cai.MyListener</listener-class>
  </listener>

完整web.xml如下

[html] view plaincopy

 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3. <display-name>myweb2</display-name>
  4. <welcome-file-list>
  5. <welcome-file>index.jsp</welcome-file>
  6. </welcome-file-list>
  7. <listener>
  8. <listener-class>org.cai.MyListener</listener-class>
  9. </listener>
  10. </web-app>

如果要执行定时任务,就在自动执行的代码里面使用 java.util.Timer以及创建一个继承java.util.TimerTask的类。示例:

[html] view plaincopy

 
  1. package org.cai;
  2. import java.util.TimerTask;
  3. import javax.servlet.ServletContext;
  4. public class MyTask extends TimerTask {
  5. private static boolean isRunning = false;
  6. private ServletContext context = null;
  7. public MyTask(ServletContext context){
  8. this.context = context ;
  9. }
  10. @Override
  11. public void run() {
  12. if (! isRunning){
  13. System.out.println("开始执行指定任务.") ;
  14. //if (C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY)) {
  15. isRunning = true ;
  16. context.log("开始执行指定任务.") ;
  17. //TODO 添加自定义的详细任务,以下只是示例
  18. int i = 0;
  19. while (i++ < 10) {
  20. context.log("已完成任务的" + i + "/" + 10);
  21. //System.out.println("已完成任务的" + i + "/" + 1000) ;
  22. }
  23. isRunning = false;
  24. context.log("指定任务执行结束");
  25. System.out.println("指定任务执行结束") ;
  26. //}
  27. }else{
  28. context.log("上一次任务执行还未结束");
  29. }
  30. }
  31. }

以上两种方法部署到tomcat,运行tomcat\bin\startup.bat,即可看到效果,其中方法2中的日志写入到tomcat\logs\localhost.xxxx-xx-xx.log文件中。

标签: Tomcat
来源:http://www.cnblogs.com/shipeng22022/p/4613990.html

tomcat启动时自动运行代码的更多相关文章

  1. Tomcat启动时自动加载Servlet

    1.想做一个服务启动时自动启动一不停止的获取订阅功能 2.之前是做一个Jsp页面请求servlet来触发方法 3.现在实现Tomcat启动时自动加载Servlet 1.Tomcat中启动Servlet ...

  2. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  3. 如何在tomcat启动时自动加载一个类

    有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  4. tomcat启动时自动加载一个类 MyServletContextListener

    目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一 ...

  5. SAS启动时自动执行代码

    有时候我们希望SAS启动时自动执行已经编写好的程序,可以按照以下方法实现: 首先正常打开SAS,编写我们想要让SAS启动时自动执行的代码,例如获取桌面文件夹路径,以便在其他程序中引用这个路径. pro ...

  6. java Web 启动时自动执行代码的几种方式

    Web容器启动后执行代码的几种方式,其执行顺序为:4===>5===>1===>2===>3,即指定init-method的Bean开始执行,接着实现spring的Bean后置 ...

  7. 小白在 Eclipse如何避免启动时自动building workspace和validating

    问题: Eclipse启动时会出现如下的情况(时间比较长): 原因所在: Validating 意为验证,validating... 逐个的检查每一个文件,Eclipse在启动时自动验证代码和创建wo ...

  8. Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)

    最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...

  9. [转]在BBB启动时自动加载dtbo(或执行脚本、运行程序)

    启动时自动加载dtbo,实际上就是做了一个cape.官方推荐的方法是用eeprom来实现,请参考我的博文<为BBB制作专属自己的cape(一)>和<为BBB制作专属自己的cape(四 ...

随机推荐

  1. <编程>比较两种素数表生成算法+计算程序运行时间+通过CMD重定向测试程序

    最近学习加密算法,需要生成素数表,一开始使用简单的循环,从2开始判断.代码如下: #include<iostream> #include<cstdio> #include< ...

  2. python与c#的交互模块pythonnet

    今天总结一下python与c#的交互模块pythonnet,其实微软也是有相应的解释器的,就是Ironpython,可是毕竟Ironpython还有很多东西没有从python那边继承过来,所以有时候用 ...

  3. Firebug的安装与使用

    第一步,点击 Firefox 浏览器上的“工具”选项,然后点击“附加软件”,在弹出的小窗口中,点击右下角的“获取扩展”选项,如图 4 所示. 图 4. 获取扩展 第二步,在点击“获取扩展”选项后,打开 ...

  4. MySQL(12)---纪录一次left join一对多关系而引起的BUG

    MySQL(11)---纪录一次left join一对多关系而引起的bug BUG背景 我们有一个订单表 和 一个 物流表 它们通过 订单ID 进行一对一的关系绑定.但是由于物流表在保存订单信息的时候 ...

  5. 原创|高逼格企业级MySQL数据库备份方案,原来是这样....

    很多人,这里说的是运维工程师们,一提到写某某方案,很是头疼.不是上某度一统搜索,就是同样一句话在N个群全部群发一遍:“有没有某某方案,可以共享一下的吗??求助,各位大佬们”,估计十有八九,全部石沉大海 ...

  6. Mac下intellij IDEA新建javaweb项目

    intellij IDEA可以说是非常好用的工具,本人用来开发java.比eclipse等好用太多了.谁用谁知道,当然只是开发工具而已,用什么都无所谓.大牛们都用记事本编程呢. 本文帮助新手创建一个j ...

  7. 使用you-get下载网页小视频(实际上你可以下载任意你想要的web网页中的内容)

    1. 什么是you-get? You-Get是一个小型的命令行实用程序,用于从Web下载媒体内容(视频,音频,图像),如果没有其他方便的方法可以尝试使用you-get. 2.安装you-get 打开命 ...

  8. 百度地图API示例 JS

    http://developer.baidu.com/map/jsdemo.htm#c2_2

  9. Codeforces 744C【DFS】

    题意: 给你一幅图,然后有几个特殊点 和不特殊点,给你一些已经连了的边,在保证特殊点不能连的前提下,问最多还能添几条边,双向边 思路: 简单题,就是一个特殊点就是一个集合,然后搜一下,最后把还有没连的 ...

  10. Telnet 命令格式

    Telnet host 端口 如:Telnet 127.0.0.1 11211 执行命令进入后 ctr +] ,打开回显,并回车即可