Tomcat servlet在第一次请求之前不会启动

时间:2015-03-19 03:51:31

标签: java tomcat servlets vaadin

在我的Vaadin应用程序中,要调用我的servlet类中的servletInitialized()方法来启动我的应用程序,我必须通过浏览器至少对Web应用程序URL进行一次请求。

我正在使用Intellij IDEA,我正在使用Tomcat Server运行IDEA配置的本地tomcat实例中启动我的Web应用程序。

是否可以在部署war文件后立即启动servlet,而无需发出请求?

2 个答案:

答案 0 :(得分:12)

<servlet>
    ...
    <load-on-startup>1</load-on-startup>
</servlet> 

这将在请求到达服务器之前在web.xml中实例化一个servlet。

如果您已在web.xml中使用此设置但未看到问题的任何更改,请尝试使用标准.war包进行部署您在开发机器上使用了爆炸版本。

答案 1 :(得分:1)

虽然Crazy Ninja的accepted answer是正确的,但还有另一种选择。

ServletContextListener

Servlet规范为您定义了一个ServletContextListener接口,用于定义要实例化和调用的类:

  • 之前,任何servlet(和过滤器)开始执行,并且......
  • 之后,最后一个servlet(和过滤器)已经完成执行,因为您的Web应用程序正在关闭。

只要Servlet容器初始化了Web应用程序(“上下文”),就会调用实现ServletContextListener的类。

某些Servlet容器在启动时会自动初始化其上下文。因此,您的初始化代码可能会在您的第一个用户点击服务器之前很久就执行。每当容器选择初始化您的Web应用程序(上下文)时,请确保Servlet规范保证任何容器在处理对servlet /过滤器的第一次调用之前运行并完成运行,上下文侦听器

我刚刚在这个主题Question上发布Answer / Hook for my Vaadin web app starting and stopping?对。有关更多讨论,请参阅该页面。