【问题标题】:how to excuete some init code in a war package in tomcat?如何在tomcat的war包中执行一些初始化代码?
【发布时间】:2014-12-21 15:04:02
【问题描述】:

我正在使用一个框架来处理一些请求,现在,我可以从一个主函数开始它:

public Main{
        public static void main(String[] args) {

            //init the framework
            Init initer = new Init();
            initer.initFramework();

            //start my besiness code below
        }
    }

现在我需要将我的项目打包成war格式并放入tomcat,我怎样才能执行init框架部分?

【问题讨论】:

  • 你应该指定这个Init框架是公共的还是内部的?如果这是一般问题还是某些特定于框架的问题?

标签: java tomcat war


【解决方案1】:

当您使用 servlet 2.3 或更高版本在 Tomcat 中启动 war-file 时,您可以使用 web.xml 文件来声明 listeners

<listener>
    <listener-class>test.MyListener</listener-class>
</listener>

这个监听器应该实现ServletContextListener 接口。侦听器会收到生命周期更改的通知(例如初始化 servlet 上下文时)。可以实现监听器来运行您的初始化代码,如下所示:

public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent event) {
        Init initer = new Init();
        initer.initFramework();
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // destroy stuff
    }
}

如果您在 servlet 3 环境中运行 war 文件,则可能甚至没有 web.xml 文件。在这种情况下,@WebListener 注释可用于指示应调用您的组件。 @WebListener 的 JavaDoc 可以在 here 中找到,但基本上您需要做的是将注释添加到您的侦听器。

【讨论】:

    【解决方案2】:

    只需实现 org.springframework.web.WebApplicationInitializer 即可,无需 xml。

    【讨论】:

    • 如果 OP 使用 Spring,那将是一个很好的解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2011-12-05
    • 1970-01-01
    • 2016-12-17
    • 2012-05-31
    • 1970-01-01
    • 2012-07-13
    相关资源
    最近更新 更多