我该如何在Tomcat启动时加载一个自定义的类?
我看到了web.xml
文件中的load-on-startup
标签,但我该怎样使用它并实现我的类呢?
<servlet-name>??</servlet-name>
<servlet-class>??</servlet-class>
<load-on-startup>10</load-on-startup>
我该如何在Tomcat启动时加载一个自定义的类?
我看到了web.xml
文件中的load-on-startup
标签,但我该怎样使用它并实现我的类呢?
<servlet-name>??</servlet-name>
<servlet-class>??</servlet-class>
<load-on-startup>10</load-on-startup>
这些参数用于指定Servlet的加载顺序。然而,Servlet更多地用于控制、预处理和/或后处理HTTP请求/响应,而您似乎更想在Web应用程序启动时寻找挂钩。在这种情况下,您需要一个ServletContextListener
。
@WebListener
public class Config implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// Do your thing during webapp's startup.
}
public void contextDestroyed(ServletContextEvent event) {
// Do your thing during webapp's shutdown.
}
}
如果你还没使用Servlet 3.0(因此无法使用@WebListener
),那么你需要在web.xml
中手动注册它,如下所示:
<listener>
<listener-class>com.example.Config</listener-class>
</listener>
元素 load-on-startup 表示此servlet应在Web应用程序启动时加载(实例化并调用其init()函数)。此元素的元素内容必须是一个整数,表示应该加载servlet的顺序。换句话说,容器按升序加载servlet , 其中0值首先被加载,然后是1、2、3等。
下面通过以下示例理解它:
web.xml
<web-app>
....
//=====================servlet 1==============
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>com.javatpoint.FirstServlet</servlet-class>
<load-on-startup>0</load-on-startup> //value given 0(zero)
</servlet>
//=====================servlet 2==============
<servlet>
<servlet-name>servlet2</servlet-name>
<servlet-class>com.javatpoint.SecondServlet</servlet-class>
<load-on-startup>1</load-on-startup> //value given 1(one)
</servlet>
...
</web-app>
有两个servlet被定义了,这两个servlet都会在项目部署或服务器启动时加载。但是,servlet1会先于servlet2加载。
传递负值: 如果您传递负值,servlet将在请求时间加载,在第一次请求时。
enfix,
您的XML看起来很好。
您应该在您的servlet类中放置一个init()方法,在服务器启动时调用。doGet、doPost和do方法只有在有传入请求时才会被调用。
public class YourServlet extends HttpServlet
{
public void init()
{
//initialize( or add a log statement to debug)
}
}
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<Context deployOnStartup="true" docBase="/home/ubuntu/Downloads/apache-tomcat-7.0.42/webapps/" reloadable="true">
<Manager pathname=""/>
</Context>