Tomcat servlet 直到第一个请求才启动

Tomcat servlet does not start until first request

在我的 Vaadin 应用程序中,要调用我的 servlet class 中的 servletInitialized() 方法来启动我的应用程序,我必须至少对 Web 应用程序发出一个请求 url通过浏览器。

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

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

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

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

如果 您的 web.xml 中已有此设置并且没有发现问题有任何变化,请尝试使用标准 .war 包如果您在开发机器上使用分解版本,则用于部署。

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

ServletContextListener

Servlet规范定义了ServletContextListener接口,供您定义一个class实例化和调用:

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

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

一些 Servlet 容器在启动时会自动初始化它们的上下文。因此,您在此处放置的初始化代码可能会在您的第一个用户访问服务器之前很久就执行。每当您的容器选择初始化您的 Web 应用程序(上下文)时,请放心,Servlet 规范保证任何容器运行并完成 运行,您的上下文侦听器 before 处理第一个打电话给你的 servlets/filters.

我刚好post一个/ pair on this topic, 。有关更多讨论,请参阅该页面。