在加载应用程序上下文之前启动Servlet

3

我有一个servlet,它作为我的应用程序的一部分捆绑在一起。我希望能够配置Tomcat或Spring,在最终初始化应用程序上下文之前在引导时加载此servlet。

我这样做是因为-我正在使用servlet在实际上下文启动之前进行一些初始环境检查和文件加载。

有人知道一个好方法吗?

我已经像这样添加了servlet定义;

    <servlet> 
            <servlet-name>init-class</servlet-name>
            <servlet-class>package.initClass</servlet-class>
            <load-on-startup>0</load-on-startup> 
    </servlet>

这只有在应用程序上下文加载完成后才会触发。

你指的是哪个AppContext?另一个servlet吗? - skaffman
我正在指的是持有所有bean连接的Spring应用程序上下文。 - Bitmap
你需要在那里做什么?而init()方法没有被触发,是吗? - Bozho
这个appcontext是如何连接的?使用DispatcherServlet还是ContextLoaderListener - skaffman
一切都被正确地触发了!我的问题在于它们被触发的顺序。我希望我的initClass.java首先被调用,以便在Spring上下文被触发之前进行一些基本的文件加载和环境检查。 - Bitmap
应用程序上下文通过ContextLoaderListener进行自动装配。 - Bitmap
2个回答

7

您需要将这个初始化逻辑放到ServletContextListener中,而不是servlet中,在web.xml中声明如下:

<listener><listener-class>YourListenerClass</listener-class></listener>

此外,如果你的Spring上下文是由ContextLoaderListener加载的,那么你的监听器应该在其之前在web.xml中声明,因为监听器是按照声明顺序触发的。

有没有一种方法可以在上下文初始化之前运行代码? ServletContextListener具有2个方法。 contextInitialized方法在上下文初始化后运行,而contextDestroyed在上下文销毁后运行。 我想要一个在上下文参数初始化后立即运行且在Spring监听器启动之前运行的方法。 - A.v

0

也许Listner是你正在寻找的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接