在收到客户的请求之前做一些事情,tomcat war
do some stuff before getting the request from a client, tomcat war
我正在创建一个由 tomcat 托管的 Vaadin Web 应用程序(可部署 war 文件)。
在部署 war 文件、初始化之前或从客户端获取请求之前,有没有办法做一些事情(比如说创建一个对象)?
是否可以通过覆盖
来完成
void init()
方法?我没有一个明确的想法。我对此很陌生。先谢谢了。
您可以通过在 web.xml load-on-startup=1 中指定来添加另一个要自动加载的 class :
示例:
<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>
当服务器启动时,或者更准确地说,当 servlet 容器启动时,它会部署所有 Web 应用程序,加载它们,然后为每个应用程序创建一个应用程序上下文并存储在其内存中。我提到了以上内容,以便您可以更好地了解问题的解决方案。
现在回答您的问题,您可以做的是创建一个 class 并为其命名,然后实现 ServletContextListener 接口。它基本上有两个具有以下签名的方法。
- public void contextInitialized(ServletContextEvent 事件)
- public void contextDestroyed(ServletContextEvent 事件)
现在在 contextInitialized 方法中,您可以做任何您想做的事情,例如创建对象或其他东西,因为这是在初始化 ServletContext 时调用的方法。
在您的 web.xml 中放置如下映射
<listener>
<listener-class>
your fully qualified class name that which will implement the ServletContextListener
</listener-class>
</listener>
我希望它能回答你的问题。乐于助人。
以上答案都有效,但如果您想要其他选择,您可以覆盖默认 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 class 以使用新服务器初始化您的 vaadin 应用程序,例如将你的 `web.xml 更改为
<servlet>
<servlet-name>YourAppName</servlet-name>
<servlet-class>path.to.MyServlet</servlet-class>
</servlet>
我正在创建一个由 tomcat 托管的 Vaadin Web 应用程序(可部署 war 文件)。
在部署 war 文件、初始化之前或从客户端获取请求之前,有没有办法做一些事情(比如说创建一个对象)?
是否可以通过覆盖
来完成void init()
方法?我没有一个明确的想法。我对此很陌生。先谢谢了。
您可以通过在 web.xml load-on-startup=1 中指定来添加另一个要自动加载的 class :
示例:
<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>
当服务器启动时,或者更准确地说,当 servlet 容器启动时,它会部署所有 Web 应用程序,加载它们,然后为每个应用程序创建一个应用程序上下文并存储在其内存中。我提到了以上内容,以便您可以更好地了解问题的解决方案。
现在回答您的问题,您可以做的是创建一个 class 并为其命名,然后实现 ServletContextListener 接口。它基本上有两个具有以下签名的方法。
- public void contextInitialized(ServletContextEvent 事件)
- public void contextDestroyed(ServletContextEvent 事件)
现在在 contextInitialized 方法中,您可以做任何您想做的事情,例如创建对象或其他东西,因为这是在初始化 ServletContext 时调用的方法。
在您的 web.xml 中放置如下映射
<listener>
<listener-class>
your fully qualified class name that which will implement the ServletContextListener
</listener-class>
</listener>
我希望它能回答你的问题。乐于助人。
以上答案都有效,但如果您想要其他选择,您可以覆盖默认 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 class 以使用新服务器初始化您的 vaadin 应用程序,例如将你的 `web.xml 更改为
<servlet>
<servlet-name>YourAppName</servlet-name>
<servlet-class>path.to.MyServlet</servlet-class>
</servlet>