tomcat启动时自动运行代码
原文链接: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,代码如下:
- package org.cai;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- public class MyServlet extends HttpServlet {
- @Override
- public void init() throws ServletException {
- // TODO Auto-generated method stub
- super.init();
- System.out.println("自动加载启动.");
- System.out.println("自动加载启动.");
- for(int i = 0; i < 10; i++){
- System.out.println(i + "、 自动加载启动.");
- }
- }
- }
同时,在web.xml配置文件内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <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">
- <display-name>myweb1</display-name>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <servlet>
- <servlet-name>MyServlet</servlet-name>
- <servlet-class>org.cai.MyServlet</servlet-class>
- <strong><load-on-startup>0</load-on-startup></strong>
- </servlet>
- <servlet-mapping>
- <servlet-name>MyServlet</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- </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类如下:
- package org.cai;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- public class MyListener implements ServletContextListener {
- private java.util.Timer timer = null ;
- public void contextDestroyed(ServletContextEvent event) {
- // TODO Auto-generated method stub
- }
- public void contextInitialized(ServletContextEvent event) {
- timer = new java.util.Timer(true) ;
- event.getServletContext().log("定时器已启动。") ;
- timer.schedule(new MyTask(event.getServletContext()), 0, 5000) ;
- event.getServletContext().log("已经添加任务调度表。" ) ;
- }
- }
contextInitialized函数里的内容将被自动执行
最后在web.xml里面添加一个监听节点就行了
<listener>
<listener-class>org.cai.MyListener</listener-class>
</listener>完整web.xml如下
- <?xml version="1.0" encoding="UTF-8"?>
- <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">
- <display-name>myweb2</display-name>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <listener>
- <listener-class>org.cai.MyListener</listener-class>
- </listener>
- </web-app>
如果要执行定时任务,就在自动执行的代码里面使用 java.util.Timer以及创建一个继承java.util.TimerTask的类。示例:
- package org.cai;
- import java.util.TimerTask;
- import javax.servlet.ServletContext;
- public class MyTask extends TimerTask {
- private static boolean isRunning = false;
- private ServletContext context = null;
- public MyTask(ServletContext context){
- this.context = context ;
- }
- @Override
- public void run() {
- if (! isRunning){
- System.out.println("开始执行指定任务.") ;
- //if (C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY)) {
- isRunning = true ;
- context.log("开始执行指定任务.") ;
- //TODO 添加自定义的详细任务,以下只是示例
- int i = 0;
- while (i++ < 10) {
- context.log("已完成任务的" + i + "/" + 10);
- //System.out.println("已完成任务的" + i + "/" + 1000) ;
- }
- isRunning = false;
- context.log("指定任务执行结束");
- System.out.println("指定任务执行结束") ;
- //}
- }else{
- context.log("上一次任务执行还未结束");
- }
- }
- }
以上两种方法部署到tomcat,运行tomcat\bin\startup.bat,即可看到效果,其中方法2中的日志写入到tomcat\logs\localhost.xxxx-xx-xx.log文件中。
标签: Tomcat来源:http://www.cnblogs.com/shipeng22022/p/4613990.html
tomcat启动时自动运行代码的更多相关文章
- Tomcat启动时自动加载Servlet
1.想做一个服务启动时自动启动一不停止的获取订阅功能 2.之前是做一个Jsp页面请求servlet来触发方法 3.现在实现Tomcat启动时自动加载Servlet 1.Tomcat中启动Servlet ...
- Tomcat启动时自动加载一个类
有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...
- 如何在tomcat启动时自动加载一个类
有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...
- tomcat启动时自动加载一个类 MyServletContextListener
目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一 ...
- SAS启动时自动执行代码
有时候我们希望SAS启动时自动执行已经编写好的程序,可以按照以下方法实现: 首先正常打开SAS,编写我们想要让SAS启动时自动执行的代码,例如获取桌面文件夹路径,以便在其他程序中引用这个路径. pro ...
- java Web 启动时自动执行代码的几种方式
Web容器启动后执行代码的几种方式,其执行顺序为:4===>5===>1===>2===>3,即指定init-method的Bean开始执行,接着实现spring的Bean后置 ...
- 小白在 Eclipse如何避免启动时自动building workspace和validating
问题: Eclipse启动时会出现如下的情况(时间比较长): 原因所在: Validating 意为验证,validating... 逐个的检查每一个文件,Eclipse在启动时自动验证代码和创建wo ...
- Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)
最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...
- [转]在BBB启动时自动加载dtbo(或执行脚本、运行程序)
启动时自动加载dtbo,实际上就是做了一个cape.官方推荐的方法是用eeprom来实现,请参考我的博文<为BBB制作专属自己的cape(一)>和<为BBB制作专属自己的cape(四 ...
随机推荐
- 003-更改pip的源让下载安装更加快捷
1 找到pip目录 C:\Python36\Lib\site-packages\pip\models 2 修改下面的index.py文件 将url设定为 https://pypi.douban.com ...
- linux c++ 连接mysql 数据库
Mysql是数据库中的主流,因此我一直以为在Linux下配置会很很容易,结果Google了大半天,大部分网页只说了如何安装Mysql之类的废话,对如何使用C/C++连接Mysql却只字不提,或者提的方 ...
- 快速沃尔什变换(FWT)学习笔记 + 洛谷P4717 [模板]
FWT求解的是一类问题:\( a[i] = \sum\limits_{j\bigoplus k=i}^{} b[j]*c[k] \) 其中,\( \bigoplus \) 可以是 or,and,xor ...
- JAVA 内部类 (二)
一.为什么要使用内部类 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继 ...
- excel,word,ppt,pdf,swf 文件互相转换
转自: http://www.cnblogs.com/wolf-sun/p/3569960.html 引言 之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询. 方案 ...
- linux命令:wc命令
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...
- (未使用AOP)使用ThreadLocal对象把Connection和当前线程绑定, 从而使一个线程中只有一个能控制事务的对象
每个连接都有自己的独立事务,会造成数据的不一致 这组操作应该要么一起操作成功,要么一起操作失败, 应该使用同一个连接,只有一个能控制事务的对象 需要使用ThreadLocal对象把Connection ...
- HDU5950【矩阵快速幂】
主要还是i^4化成一个(i+1)^4没遇到过,还是很基础的一题矩阵快速幂: #include <bits/stdc++.h> using namespace std; typedef lo ...
- [HNOI2010] 公交线路 bus
标签:状态压缩+矩阵快速幂. 题解: 首先看范围,p<=10,那么我们可以想到状态压缩.我们把从一个长度为10的区间进行压缩,1代表可以,那么当值一个区间的1的个数为k个,我们就认为他是合法的. ...
- 毕业N年后,请不要像我一样被档案烦死
目录 一. 提醒大学生:深刻重视档案,避免以后麻烦! 二.说说我因为档案造成的烦心事! 三.说说档案这档子事: 四.档案如此重要,为什么有些人却成了弃档族? 五.档案该怎么操作才能不当"弃档 ...