1. 程式人生 > >web-fragment 中的執行順序

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


你覺得呢?