我们首次部署WAR文件时是否可以运行某些代码?

ayy*_*ppa 8 tomcat web-deployment

我是否可以使用任何方法或API,以便每当我部署新的WAR文件时,应该执行一部分代码,或者当Tomcat启动时,相应的servlet应该连续启动或运行某些代码.

Mif*_*eet 11

从唯一的答案中恢复一个旧问题没有显示任何例子.

为了在部署/取消部署Web应用程序WAR或启动/停止Tomcat时运行自定义代码段,您需要:

  1. 实现ServletContextListener监听器及其方法contextInitialized()contextDestroyed().
  2. 让Tomcat了解您的实现.根据文档,您可以将实现类添加到部署描述符中,使用它进行注释WebListener,或者通过其中addListener()定义的方法之一注册它ServletContext.

这是一个例子(基于这篇文章):

package com.example;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListener implements ServletContextListener {
    /** The servlet context with which we are associated. */
    private ServletContext context = null;

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        log("Context destroyed");
        this.context = null;
    }

    @Override
    public void contextInitialized(ServletContextEvent event) {
        this.context = event.getServletContext();
        log("Context initialized");
    }

    private void log(String message) {
        if (context != null) {
            context.log("MyServletContextListener: " + message);
        } else {
            System.out.println("MyServletContextListener: " + message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并添加以下内容web.xml(或者使用WebListener注释或addListener()方法):

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    ...
    <listener>
        <listener-class>com.example.MyServletContextListener</listener-class>
    </listener>
</web-app>
Run Code Online (Sandbox Code Playgroud)


Sha*_*rma 6

您可以在web.xml中包含"ContextListener".将要部署/启动Webb应用程序WAR时,将创建此类的实例.

此代码可以启动一个可以继续运行的线程,直到部署app.

示例:http://www.javafaq.nu/java-example-code-233.html