最近在一个decouple的项目中引入了web-fragment.xml, 遇到了一些问题,比较好玩,记录下。
web-fragment.xml 是servlet 3.0 以后引入的,它也是用来提供web部署描述的,功能上跟web.xml是一模一样的。不一样的地方是web-fragment.xml是在WEB-INF/lib/下的jar中。 想想就知道好处在哪里了,这样一来,多个模块的web部署就可以完全解耦了,一个模块的部署与卸载完全不用动整个appication的web.xml,做到了可插拔,想想还有点小激动呢, 先看看这个文件的位置:这是一个jar包的结构
web-fragment.xml的文件内容跟web.xml完全相同, 本文不想详述,请自行查阅。
我想主要描述的下web.xml和web-fragment.xml的执行顺序。
1. web.xml 总是第一个执行的
2. 多个web-fragement.xml 的执行顺序是可以配置的
请参考:https://www.roseindia.net/servlets/servlet3/webfragmentsOrdering.shtml
3. 强调下:web.xml 和 web-fragment.xml 完全是顺序执行的,举个例子
在部署描述中有几个耳熟能详的metadata,比如:“context-param”, “filter”, "servlet" 还有“listener”,他们的执行顺序是:
context-param --> listener --> filter --> servlet
那web.xml 和 web-fragment.xml中的执行顺序就是:
先执行web.xml中的context-param --> listener --> filter --> servlet, 完事以后再执行A web-fragment.xml中的这一串,然后是B fragment中的,想想这是好还是不好呢?我觉得这样会更好点,全局顺序按照metadata元素来,每个metadata的顺序再按照web.xml和fragment定义的顺序走。
所有context-param --> 所有listener --> 所有filter --> 所有servlet
你觉得呢?