如何在web.xml中确定侦听器的顺序

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

其中一些依赖于另一个听众收集的信息。 但我无法确定监听器的注册和调用顺序,因此我必须重复代码。

我理解听众是按照他们在web.xml中的顺序注册的,但这对我来说听起来有点模糊,太依赖于它。

你有提示如何解决我的问题吗?

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

您可以拥有一个Application LEVEL数据结构(HashMap),每个Filter / Listener在遇到请求数据时都会对其进行更新。 这将让每个Listener只更新必要的内容。 您可以将公共代码放在基本侦听器中,以便不存在代码重复。

为什么这个含糊不清? web.xml中的排序非常具体地是它们被调用的顺序,它在Java EE规范中非常清楚地说明。 依靠它完全可以。

看起来你可以创建一个ListenerManager,你将它作为唯一的监听器放置,并让它包含其他监听器。 当事件进入时,只需按照您需要的顺序调用其他每个监听器(可能是您在ListenerManager的构造函数中创建它们的顺序)。

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