web-fragment 中的執行順序
最近在一個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
你覺得呢?