不同战争的ServletContextListener执行顺序

时间:2016-01-06 05:46:49

标签: servlets war servletcontextlistener

是否可以在不同的战争中控制ServletContextListener执行的顺序?

假设Web服务中有3个独立的独立模块A,B和C.它们可以按任何顺序初始化,并且没有任何后果。但是,如果存在可选模块D,则需要首先对其进行初始化,并可能影响其他模块。这种配置是否可以通过Spring实现?只有想到的是拥有一个全局ServletContextListener,它会轮询每个模块的init类是否存在于类路径上,但该解决方案看起来非常混乱。

2 个答案:

答案 0 :(得分:1)

当所有WAR捆绑在EAR中时,可以管理应用程序的启动。可以通过在<initialize-in-order>true</initialize-in-order>中添加application.xmkl来完成。

如果所有WAR都是独立的,那么没有标准的方法。但是,有容器特定功能允许您这样做。

<强>参考文献:

如果要定义应用程序的servlet之间的依赖关系。 您可以定义Absolute ordering in web.xmlrelative ordering in web-fragment.xml

以下是绝对排序的工作原理:

<web-app>
...
    <absolute-ordering>
      <name>A</name>
      <others/>
      <name>B</name>
    <absolute-ordering>
</web-app> 

如果web.xml中没有绝对排序,容器将在web-fragment.xml中查找相对排序。它看起来像这样:

<ordering>
    <before>
    <others />
    </before>
</ordering>

答案 1 :(得分:-1)

您可以在web-fragment.xml或web.xml中定义排序。请参阅以下链接以了解更多信息。 https://blogs.oracle.com/swchan/entry/servlet_3_0_web_fragment