web fragment 文件可以是一部分或者全部的 web.xml 文件,它放在工程或者 jar 包的 META-INF 文件夹下。Web 容器将会自动加载全部的 web fragment 文件,而不需要开发者参与。
它可以定义几乎全部 web.xml 文件可以定义的内容。但它的根元素是 web-fragment,并且
文件名必须是 web-fragment.xml。有了 web fragment 可以对应用程序做更好的逻辑分离。
class="xml"><web-fragment>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>org.example.MyFilter</filter-class>
<init-param>
<param-name>myInitParam</param-name>
<param-value>...</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-fragment>
开发人员可以通过 web.xml 文件中的 元素来指定资源的绝对顺序。也可以使用 web-fragment.xml 文件中的 元素来指定资源的相对顺序。当绝对顺序和相对顺序发生冲突的时候,绝对顺序将覆盖相对顺序。 在绝对顺序中,使用 元素表示资源的名称并且制定资源的顺序:
<web-app>
<name>MyApp</name>
<absolute-ordering>
<name>MyServlet</name>
<name>MyFilter</name>
</absolute-ordering>
</web-app>
上面的 web.xml 片段制定了资源的顺序是先 MyServlet 再 MyFilter。
在 web-fragment.xml 文件的 中可以使用零个或一个 和 元素,用来制定相对顺序。这两个元素用来指定当前资源的顺序是在指定的资源之前还是在指定的资源之后。可以使用 元素来表示其它的所有资源。
<web-fragment>
<name>MyFilter</name>
<ordering>
<after>MyServlet</after>
</ordering>
</web-fragment>
上面的代码定义了 MyFilter 的顺序在 MyServlet 之后。
如果 web.xml 中的 metadata-complete 设置为 true,那么 web-fragment.xml 将不会被处理。web.xml 拥有最高的优先级,当配置发生冲突的时候,以 web.xml 为准。
如果在 web-fragment.xml 中没有 元素,并且 web.xml 中也没有 元素,那么资源将会处于无序的状态。
文章来源:http://www.aptusource.org/2014/04/java-ee-7-web-fragments/