17

如何在 Tomcat 启动时加载任意类?我看到load-on-startup了文件的标签web.xml,但我可以使用它吗?我应该如何实现我的类?

<servlet-name>??</servlet-name>
<servlet-class>??</servlet-class>
<load-on-startup>10</load-on-startup>
4

4 回答 4

31

这些是为了指定 servlet 的加载顺序。然而,servlet 更倾向于控制、预处理和/或后处理 HTTP 请求/响应,而您听起来更像是在寻找 webapp 启动的钩子。在这种情况下,你宁愿想要一个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>

也可以看看:

于 2010-07-20T12:16:19.260 回答
8

元素load-on-startup 表示应该在 Web 应用程序启动时加载(实例化并调用它的 init())这个 servlet。该元素的元素内容必须是一个整数,表示加载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>  

定义了 2 个 servlet,两个 servlet 都将在项目部署或服务器启动时加载。但是,servlet1 将首先加载,然后是 servlet2。

传递负值: 如果传递负值,servlet 将在请求时加载,在第一次请求时。

于 2016-04-25T09:13:23.737 回答
3

加缀,

您的 XML 看起来不错。

您应该在您的 servlet 类中放置一个 init() 方法,该方法会在您的服务器启动时调用。doGet、doPost 和 do 方法仅在有传入请求时调用。

public class YourServlet extends HttpServlet
{
    public void init()
    {
        //initialize( or add a log statement to debug)
    }
}
于 2013-07-29T06:38:36.613 回答
1

这是 Tomcat 7.0 第 1 步的解决方案:为您的 webapp/servlet 创建 war 文件。如果您使用的是 Eclipse,则 File->Export->Web->WAR 文件,并将其保存到已知位置。

第 2 步:找出您的 tomcat 的主文件夹。为此,转到 tomcat/apache-tomcat-7.0.41/bin 并执行 ./startup.sh 这将打印出几个全局变量名称。记下 CATALINA_HOME 的那个。

第 3 步:从 CATALINA_HOME/webapps 中的第 1 步复制战争文件

第 4 步:接下来,在 CATALINA_HOME/conf/{Engine}/localhost/MyServlets.xml 中创建一个 xml 文件:

<?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>

更改 docBase 以指向您在步骤 3 中复制 war 文件的位置。

现在,你可以去 tomcat/apache-tomcat-7.0.41/bin 并执行 ./startup.sh。您的 servlet 将自动启动。希望这可以帮助。

于 2013-07-29T06:18:03.403 回答