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,代码如下:

[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

时间: 2024-07-30 13:47:51

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

Tomcat启动时自动运行某程序

项目需要和tmall实现长连接,接收tmall推送的Order消息,然后对消息进行逻辑处理. 目前写了一个servlet,实现了permit的验证,然后对tmall进行长连接操作,启动后,只要tomcat一直运行着,长连接就不会断掉.现在的需求是tomcat启动后我这个servlet自己就运行起来,不用我自己再去访问一下配置的servlet路径. 资料: http://www.cnblogs.com/Payne-Wang/archive/2013/04/01/loadOnTomcatStartu

Tomcat启动时自动加载Servlet

1.想做一个服务启动时自动启动一不停止的获取订阅功能 2.之前是做一个Jsp页面请求servlet来触发方法 3.现在实现Tomcat启动时自动加载Servlet 1.Tomcat中启动Servlet时,只需要在Servlet所在的工程的配置文件web.xml中写成如下即可 <!-- 自动启动订阅接口 --> <servlet> <servlet-name>TimeServlet</servlet-name> <servlet-class>ser

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

有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以采用在WEB-INF/web.xml中添加一个监听程序(ServletContextListener配置项),步骤如下:1) 增加一个监听程序 MyServletContextListener.java, 实现javax.servlet.ServletContextListener接口 packag

tomcat启动时自动加载一个类&#160;MyServletContextListener

目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一个类,或运行一个类的方法. 可以采用ServletContextListener. 方法: (1)编写一个监听类,实现javax.servlet.ServletContextListener接口. 1 import javax.servlet.ServletContextEvent; 2 impor

Tomcat启动时,自动访问本地servlet

通过监听器来实现 1.自定义一个类 CallLocationServelt 实现  ServletContextListener 并覆盖其  contextInitialized(ServletContextEventarg0)方法 public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub System.out.println("CallLocationServelt

tomcat启动时JVM内存大小,以免出现内存溢出

问题: 主要是2个内存溢出的错误. 首先是:java.lang.OutOfMemoryError: Java heap space 其次是:java.lang.OutOfMemoryError: PermGen space 最终解决办法[我是4G内存,请适当修改大小]: [Windows]在catalina.bat的第一行增加: set JAVA_OPTS=-Xms512m -Xmx900m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSiz

Tomcat启动时警告:[SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property &#39;source&#39; to &#39;org.eclipse.jst.jee.server:****&#39; did not find a matching property.

运行Tomcat时发出的警告,但是不影响项目的运行,原因是因为在部署项目时,Tomcat会在动在配置文件server.xml自动生成一行代码.如下: <Context docBase="WebDemo" path="/WebDemo" reloadable="true" source="org.eclipse.jst.jee.server:WebDemo"/></Host>. 默认情况下,Context

MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法

MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法 分类: javaweb2013-06-03 14:43 3706人阅读 评论(0) 收藏 举报 当单击MyEclipse中的Debug server 启动服务器的时候,出现了这么个提示: Eclipse菜单,Window->Preference…,打开Preference对话框,找到菜单树中MyEclipse-> Application Serve

Tomcat(一):Tomcat启动时加载web.xml

server.xml配置文件样例: <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional inf