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

3duebb1j  于 2023-01-04  发布在  Java
关注(0)|答案(3)|浏览(119)

我正在创建一个由Tomcat托管的Vaadin Web应用程序(可部署的war文件)。
在部署war文件时、初始化之前或从客户机获得请求之前,是否有方法做一些事情(比如创建一个对象)?
是否可以通过覆盖

void init()

方法?我不太清楚。我是新手。

rsl1atfo

rsl1atfo1#

当服务器启动时,或者更准确地说,当servlet容器启动时,它会部署所有的Web应用程序,加载它们,然后为每个应用程序创建一个应用程序上下文并存储在其内存中。我提到以上内容是为了让您能够更好地理解您问题的解决方案。
现在回到你的问题,你能做的就是创建一个类,命名为任意名称,然后实现ServletContextListener接口,它基本上有两个方法,签名如下。

  • 公共void上下文已初始化(ServletContextEvent事件)
  • 公共空上下文已销毁(ServletContextEvent事件)

现在,在contextInitialized方法中,您可以做任何您想做的事情,比如创建一个对象或其他东西,因为这是在初始化ServletContext时调用的方法。
在web.xml中放置Map,如下所示

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

我希望它能回答你的问题。很高兴能帮上忙。

k3fezbri

k3fezbri2#

您可以通过在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>
zpqajqem

zpqajqem3#

以上两种方法都有效,但是如果您需要其他替代方法,可以覆盖默认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类,以便使用新的servet初始化您的vaadin应用程序,例如,将'web.xml更改为

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

相关问题