一、簡介
servlet3.0引入了web fragment,它可以在jar包中引入web配置。這裡對其進行介紹。
二、web-fragment
2.1 作用
web fragment可以在jar包中,定義web-fragment.xml配置檔案,內可配置servlet、filter、listener等元件。
2.2 web-fragment.xml定義
web-fragment.xml配置檔案(內可配置servlet、filter、listener等元件)定義示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-fragment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
version="3.0">
<name>fragment_1</name>
</web-fragment>
2.3 web-fragment.xml存放位置
web-fragment.xml需要放在jar包檔案內的META-INF目錄下,如在intellij idea中開發,放在 專案/resources/META-INF/目錄下。
2.4 web專案配置讀取順序
web專案中引入含有web fragment的jar包,那麼載入順序為:先是web.xml,再是web-fragment.xml。
當web專案引入多個含有web fragment的jar包時,也可以自定義各個jar包間的web-fragment.xml載入順序。方式有兩種,絕對順序和相對順序。
2.4.1 絕對順序
在web.xml中使用標籤absolute-ordering進行絕對順序配置,示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<absolute-ordering>
<name>fragment_1</name>
<name>fragment_2</name>
</absolute-ordering>
</web-app>
上面執行順序為web.xml->fragment_1->fragment_2
2.4.2 相對順序
相對順序是在web-fragment.xml中配置的,示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-fragment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
version="3.0">
<name>fragment_2</name>
<ordering>
<after>
<name>fragment_3</name>
</after>
<before>
<name>fragment_1</name>
</before>
</ordering>
</web-fragment>
<?xml version="1.0" encoding="UTF-8"?>
<web-fragment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
version="3.0">
<name>fragment_4</name>
<ordering>
<before>
<others/>
</before>
</ordering>
</web-fragment>
上面執行順序為:web.xml->fragment_4->fragment_3->fragment_2->fragment_1
2.5 遮蔽web-fragment配置
在某些情況下,web專案不希望載入jar包中的配置,此時可以web.xml中配置metadata-complete="true"遮蔽(此時servlet註解配置也會失效),示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0" metadata-complete="true">
</web-app>
三、示例
3.1 新建jar包專案
新建jar包專案
3.1.1 定義示例servlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class FragmentServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("this is from web-fragment");
}
}
3.1.2 定義web-fragment.xml配置檔案
在專案的resources/META-INF/目錄下,定義配置檔案web-fragment.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-fragment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>fragmentServlet</servlet-name>
<servlet-class>FragmentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fragmentServlet</servlet-name>
<url-pattern>/fragmentServlet</url-pattern>
</servlet-mapping>
</web-fragment>
3.1.3 打jar包
將上面專案打成jar包,這裡為test.jar包。
3.2 web專案匯入jar包使用
新建web專案,在web專案的webapp/WEB-INF/lib目錄下放入test.jar包,重啟專案即生效。
結果:
請求:http://localhost:8080/fragmentServlet
結果:this is from web-fragment
四、備註
4.1 參考
https://www.roseindia.net/servlets/servlet3/assembling_webfragments.shtml https://www.roseindia.net/servlets/servlet3/webfragmentsOrdering.shtml
- GC類壓力管道安裝資質辦理,氨製冷(冷庫)管道定期檢驗程序
- 幾種PCBA表面處理的類型
- 歌禮制藥-B(01672)宣佈口服PD-L1小分子抑制劑前藥ASC61 用於治療晚期實體瘤的美國I期臨床試驗完成首例患者給藥
- 深耕CRO服務領域 宣泰醫藥(688247.SH)擬首次公開發行4534萬股
- 壓力容器許可證資質辦理,鉻鉬鋼製壓力容器結構設計規定
- 家裡有點地,這種果樹種上兩棵,栽到花盆裡,夏天就能結果子
- 家裡養株“大將軍”蘭花,花色喜慶,花大如盆,打理很簡單
- 庫存飆升!韓國半導體庫存激增80%
- 多點DMALL合夥人劉桂海:多點DMALL實踐實體零售數字化轉型
- 豬各階段拉稀的原因和解決方案,這篇文章告訴你答案,值得收藏