天天看點

Servlet3.0子產品化支援

Servlet3.0子產品化支援

       Servlet3.0現在已經支援各Web元件的子產品化了。也就是說現在我們可以把各Web元件單獨拿出來進行開發,之後把它們打成對應的jar包放到主項目中就可以了,而不必像之前那樣——所有的内容都必須在web.xml檔案中進行定義。有了對子產品化的支援後我們在實際應用中就可以把某些通用功能的Filter、Listener、Servlet作為一個單獨的Web子產品進行定義,在需要使用它們的項目中就把對應Web子產品對應的jar包加進去就可以了。是不是很有用呢?接下來我們就來看一下這些Web元件究竟是怎樣子產品化的。

       Web子產品打成的jar包的内容的檔案結構要求是這個樣子的:

|--META-INF

|     |--web-fragment.xml

|     |--resources

|     |     |--jsp、圖檔等,相當于web的根目錄

|--class檔案和類路徑下的檔案

       其中web-fragment.xml檔案是必須要的。上述目錄結構就相當于在我們的類路徑下有一個META-INF目錄,該目錄下有web-fragment.xml檔案及包含jsp、圖檔等資源的resources目錄。針對于上述這樣的目錄結構,是以當我們在使用Maven建構項目的時候,我們的Maven項目的目錄結構應該是這個樣子的:

Servlet3.0子產品化支援

       web-fragment.xml檔案的作用與Web應用下的web.xml檔案的作用是相似的,在web.xml檔案可以配置的資訊都可以在web-fragment.xml檔案中進行配置。此外,它們的文檔結構也非常的相似。所不同的是web-fragment.xml檔案的根元素是web-fragment,所使用的schema也是web-fragment相應的schema。

       另外,在web-fragment.xml檔案中我們可以通過<name>元素來指定目前子產品的名稱,用<ordering>元素來指定目前子產品相對的加載順序。<ordering>元素下面可以指定<before>或<after>元素,而<before>和<after>元素下又可以指定<name>和<others>元素。我們來看幾個指定ordering的示例。

在其他子產品之前加載

在指定子產品之後加載

       除了可以在web-fragment.xml檔案裡面通過<ordering>元素定義目前子產品的加載順序外,我們還可以在web.xml檔案中通過<absolute-ordering>元素指定各子產品的 加載順序。而且web.xml檔案中指定的加載順序比web-fragment.xml檔案中指定的加載順序具有更高的優先級。如:

       接下來我們來展示一個建立web子產品的例子。假設我們要建立一個叫做module1的子產品,其中含有一個Module1Servlet,其代碼如下所示:

       接着我們在類路徑下建立一個META-INF檔案夾,在該檔案夾下建立一個resources目錄,在resources目錄下建立一個module1.jsp檔案。接着在META-INF目錄下建立一個web-fragment.xml檔案,其内容如下:

       之後我們把該項目打成一個jar包就可以把它作為一個jar加到其它Web應用中,在其它Web應用中使用了。放到其它Web應用中後,我們通過通路/servlet/module1就可以通路到我們module1子產品中定義的Module1Servlet了。