在收到客户端的请求之前做一些事情,tomcat war

时间:2015-11-15 15:13:25

标签: java tomcat vaadin war

我正在创建一个由tomcat托管的Vaadin Web应用程序(可部署的战争文件)。

在初始化之前或从客户端收到请求之前,有没有办法在部署war文件时做一些事情(比如创建一个对象)?

是否可以通过覆盖

来完成
void init()

方法?我没有一个明确的想法。我是新手。提前致谢。

3 个答案:

答案 0 :(得分:3)

当服务器启动时或更准确地说当servlet容器启动时,它会部署所有Web应用程序,加载它们,然后为每个应用程序创建应用程序上下文并将其存储在其内存中。我提到了上述内容,以便您可以更好地理解问题的解决方案。

现在回答你的问题,你可以做的是创建一个类并命名它,然后实现 ServletContextListener 接口。它基本上有两种方法,具有以下特征。

  • public void contextInitialized(ServletContextEvent event)
  • public void contextDestroyed(ServletContextEvent event)

现在在contextInitialized方法中,您可以执行任何操作,例如创建对象或其他内容,因为这是在初始化ServletContext时调用的方法。

在您的web.xml中放置映射如下

<listener>
   <listener-class>
       your fully qualified class name that which will implement the ServletContextListener
     </listener-class>   
</listener>

我希望它能回答你的问题。很乐意提供帮助。

答案 1 :(得分:2)

您可以通过在web.xml中指定load-on-startup = 1:

来添加另一个要自动加载的类

示例:

<web-app>
   <servlet>
      <servlet-name>MyLoader</servlet-name>
      <servlet-class>com.xxx.MyLoader</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>MyLoader</servlet-name>
      <url-pattern>/load</url-pattern>
   </servlet-mapping>
</web-app>

答案 2 :(得分:2)

上述答案都有效,但如果您想要另一种方法,可以覆盖默认Vaadin servlet中的init方法。

public class MyServlet extends com.vaadin.server.VaadinServlet {
   @Override
    public void init(javax.servlet.ServletConfig servletConfig) throws ServletException {
        super.init(servletConfig);
        // do extra work here!
    }
}

请注意,您需要配置web.xml或带注释的UI类,以使用新的服务器初始化您的vaadin应用,例如:将您的`web.xml更改为

<servlet>
    <servlet-name>YourAppName</servlet-name>
    <servlet-class>path.to.MyServlet</servlet-class>
</servlet>