首頁>技術>

一、簡介

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

10
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • opencv3/4 svm+hog訓練自己的資料集——附原始碼