【问题标题】:How to determine the order of listeners in web.xml如何确定 web.xml 中侦听器的顺序
【发布时间】:2010-09-15 18:24:34
【问题描述】:

我的 Java webapp 中有一堆 servlet 上下文侦听器,每个侦听器都收集有关环境的一些信息。

其中一些依赖于其他听众收集的信息。但是我无法确定监听器注册和调用的顺序,所以我不得不复制代码。

我知道监听器是按照他们在 web.xml 中的顺序注册的,但这对我来说听起来有点模糊,太模糊以至于无法依赖它。

你有什么提示我可以如何解决我的问题吗?

【问题讨论】:

    标签: java servlets jakarta-ee


    【解决方案1】:

    所有 servlet 容器和 Java EE 容器都严格执行规范的这一部分。您可以依赖于侦听器按照您在 web.xml 中指定的顺序调用的事实。

    您可以拥有一个应用程序级别的数据结构 (HashMap),每个过滤器/侦听器在遇到来自请求的数据时都会对其进行更新。这将让每个 Listener 只更新必要的内容。您可以将公共代码放在基础 Listener 中,这样就不会出现代码重复。

    【讨论】:

      【解决方案2】:

      为什么这么模糊? web.xml 中的顺序非常明确地表示它们被调用的顺序,Java EE 规范中非常清楚地说明了这一点。完全可以依赖它。

      【讨论】:

        【解决方案3】:

        您似乎可以创建一个 ListenerManager,并将其作为您唯一的侦听器,并让它包含其他侦听器。当事件发生时,只需按照您需要的顺序(可能是您在 ListenerManager 的构造函数中创建它们的顺序)调用其他每个 Listener。

        不幸的是,这意味着在添加侦听器时会更改代码,但您可以通过巧妙地使用属性文件和 create-from-class-name 代码来避免这种情况。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-28
          • 1970-01-01
          • 2016-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多