tomcat自动启动servlet

时间:2009-04-24 13:09:24

标签: tomcat

我有一个标准的GWT应用程序,它当然在后端使用Java servlet。此servlet部署在Tomcat和Windows Server上。

我知道这违反了规则/建议,但我在这个servlet中有一个线程,它在servlet初始化时启动(servlet的“init”方法)。该线程是各种调度程序,其目的是在某些时间执行不同的数据库任务,完全独立于GWT应用程序/接口本身。

我需要的是在部署战争后立即调用servlet的“init”方法。现在我一直在做的是,每次升级到应用程序时,我都会将战争放到正确的目录中,然后我必须“登录”到应用程序GWT应用程序,以便调用其“init”方法。我希望在战争更新后立即调用servlet的init方法,这样我就不必登录GWT应用程序来执行此操作。

有什么想法吗?

3 个答案:

答案 0 :(得分:18)

您可以使用servlet context listener。更具体地说,您可以在contextInitialized方法中启动您的线程:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
         // start the thread
    }

    public void contextDestroyed(ServletContextEvent sce) {
         // stop the thread
    }
}

然后添加:

<listener>
    <description>ServletContextListener</description>
    <listener-class>MyListener</listener-class>
</listener>
你在web.xml中的

答案 1 :(得分:4)

在WEB-INF / web.xml中使用load-on-startup。在Netbeans中,它位于Servlets选项卡中,即“启动顺序”项。

<servlet>
    <servlet-name>Hl7Servlet</servlet-name>
    <servlet-class>nl.vandenzen.Hl7Servlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

答案 2 :(得分:0)

另一种选择是使用Quartz Scheduler.

  

Quartz是一个功能齐全的开源软件   可以的工作调度系统   与侧面集成或一起使用   几乎任何J2EE或J2SE应用程序    - 从最小的独立应用程序到最大的电子商务   系统。 Quartz可用于创建   简单或复杂的时间表   执行数十,数百甚至甚至   成千上万的工作;工作的   任务被定义为标准Java   组件或EJB。石英   调度程序包括许多   企业级功能,例如JTA   交易和集群。

它非常易于使用,现有的全部原因是安排工作。这听起来像你想要做的。