【问题标题】:Execution order of servlet listeners in web fragments and web.xmlweb片段和web.xml中servlet监听器的执行顺序
【发布时间】:2014-11-03 16:07:32
【问题描述】:

有没有办法指定web.xml和web-fragment.xml中定义的ServletContextListeners的执行顺序?

我的应用程序中有两个监听器: 第一个在 web-fragment.xml 中声明

<listener>
  <listener-class>com.example.RunFirst</listener-class>
</listener>

我的应用程序的 web.xml 中还有第二个

<listener>
  <listener-class>com.example.RunSecond</listener-class>
</listener>

此外,我的网络片段还包含以下排序元素:

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

但 RunSecond 仍然在 RunFirst 之前执行。知道如何更改此顺序吗?

【问题讨论】:

  • 在您的 web.xml 中以什么顺序定义您的侦听器?
  • RunFirst 监听器仅在我的片段的 web-fragment.xml 中定义
  • 您在 web.xml 的哪个部分添加了这个 web-fragment?
  • 我没有在 web.xml 中添加片段(顺便说一句:我不知道这是可能的)。我刚刚在我的 jar 的 META-INF 中添加了 web-fragments.xml,然后执行了侦听器。可惜来晚了。
  • 好吧,AFAIK web.xml 中描述的过滤器和侦听器将按照它们出现的顺序加载和应用。从Shing Wai Chan's Weblog 看来,您似乎只能确定处理 web-fragment 的顺序,但处理 web.xml 和 web-fragment.xml 中配置的元素的顺序是特定于供应商的。

标签: java servlets servlet-3.0


【解决方案1】:

其实根本不可能。

如 oracle 文档中所述:“始终首先处理 web.xml 描述符。”

您可以做的是使用 RunSecond 侦听器创建另一个 web-fragment.xml,并使用“排序”设置片段之间的相对顺序。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 2011-07-24
    • 2015-09-22
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多