首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServletContextListener执行顺序

ServletContextListener执行顺序
EN

Stack Overflow用户
提问于 2013-11-01 23:00:38
回答 2查看 16.9K关注 0票数 47

如果我有多个ServletContextListener,其中一些在部署描述符中声明,另一些带有注释(@WebListener),如何定义ServletContextListener在应用程序初始化时的执行顺序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-01 23:15:45

如果您希望以特定的顺序执行侦听器,则应该使用部署描述符来定义它们。

下面的语句是从Servlet Specification复制的

8.2.3

如果调用侦听器、servlet、过滤器的顺序对应用程序很重要,则必须使用部署描述符。当使用注释来定义侦听器、servlet和过滤器时,它们的调用顺序是未指定的。

排序将基于它们在描述符中定义的顺序以及web.xml中的绝对排序元素或web-fragment.xml中的排序元素。

在此规范(Java规范,版本3)发布之前,上下文侦听器是以随机顺序调用的。从Servlet3.0开始,监听器是按照它们在web.xml中声明的顺序调用的。

javax.servlet.ServletContextListener的实现在它们的contextInitialized方法中以声明的顺序调用,在它们的contextDestroyed方法中以相反的顺序调用。

如果您有多个ServletContextListeners,其中一些是在部署描述符中声明的,另一些是使用注释声明的,那么在web.xml中定义的侦听器将获得优先级。下面的语句复制自servlet规范的同一节(8.2.3):

在主web.xml或web片段中指定的

配置优先于通过注释指定的配置。

票数 83
EN

Stack Overflow用户

发布于 2013-11-01 23:35:46

看起来您知道执行的顺序,但是您想知道如果一些侦听器在部署描述符中声明,而另一些侦听器使用注释声明,那么执行的顺序是什么,因此优先选择部署描述符,然后使用注释。

注意,所有侦听器的构造函数将首先按照部署描述符的顺序调用&然后是注释,最后是生命周期方法。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19729370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档