在我的Vaadin应用程序中,要调用我的servlet类中的servletInitialized()
方法来启动我的应用程序,我必须通过浏览器至少对Web应用程序URL进行一次请求。
我正在使用Intellij IDEA,我正在使用Tomcat Server
运行IDEA配置的本地tomcat实例中启动我的Web应用程序。
是否可以在部署war文件后立即启动servlet,而无需发出请求?
答案 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容器初始化了Web应用程序(“上下文”),就会调用实现ServletContextListener
的类。
某些Servlet容器在启动时会自动初始化其上下文。因此,您的初始化代码可能会在您的第一个用户点击服务器之前很久就执行。每当容器选择初始化您的Web应用程序(上下文)时,请确保Servlet规范保证任何容器在处理对servlet /过滤器的第一次调用之前运行并完成运行,上下文侦听器。
我刚刚在这个主题Question上发布Answer / Hook for my Vaadin web app starting and stopping?对。有关更多讨论,请参阅该页面。