奇妙なことは、web-fragment.xml があるのに、その内容の一部が有効な web.xml に追加されないことです。
まず第一に、 aは物理的に main に含まれweb-fragment.xml
ません。したがって、効果的な に追加されないと言うときは、間違っている可能性があると思います。web.xml
web.xml
Web フラグメントを使用すると、実行時にコンポーネントをメインに登録できweb.xml
ます。これが起こっていることを示す唯一の証拠は、実際にコンポーネントを使用しようとすることです。
Web フラグメントを使用して単純な hello-world の例を試してみたところ、うまくいきました。これには、サーブレット 3.0 webapp で Tomcat 7 を使用しました。
私の主なweb.xml
内部WEB-INF
は次のようになります。
<?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">
<display-name>hello-world</display-name>
<absolute-ordering>
<name>filters</name>
</absolute-ordering>
</web-app>
を登録できる唯一の方法はweb-fragment.xml
、以下の規則に従うことであることがわかりました。
- 名前を付ける必要があります
web-fragment.xml
- 内部のJARファイルに配置する必要があります
WEB-INF/lib
- は、JAR ファイルのディレクトリ内に存在する
web-fragment.xml
必要があります。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" 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-fragment_3_0.xsd" id="WebAppFragment_ID" version="3.0">
<name>filters</name>
<filter>
<filter-name>interceptor</filter-name>
<filter-class>com.adarshr.Interceptor</filter-class>
</filter>
<filter-mapping>
<filter-name>interceptor</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-fragment>
上記の最小限のセットアップで、Interceptor
フィルターを起動することができましたが、web-fragment.xml
.
最後に、これが私のディレクトリ構造です ( http://www.adarshr.com/treegenを使用して生成)
+- hello-world
|
+- WEB-INF
|
+- lib
| |
| |- my-library.jar
|
|- web.xml
JAR ファイルmy-library.jar
の構造は次のとおりです。
+- my-library.jar
|
+- META-INF
|
|- web-fragment.xml
参考文献: