12

私たちのプロジェクトでは、Web フラグメントを使用していくつかのサーブレットを定義し、アーティファクトを他のプロジェクトで簡単に使用できるようにします。

奇妙なことは、web-fragment.xml があるのに、その内容の一部が有効な web.xml に追加されないことです。

例:

有効な web.xml には、次の構成が存在します。

<filter>
    <filter-name>superUserAutomaticLogon</filter-name>
    <filter-class>nl.caiw.cool.util.filters.SuperUserAutomaticLogonFilter</filter-class>
    <async-supported>false</async-supported>
</filter>

しかし、次はそうではありません。

<filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/toolbox/modules/*</url-pattern>
</filter-mapping>

いくつかのことを試しましたが、わかりません。ここにいる誰かが私たちを正しい方向に導いてくれることを願っています。

前もって感謝します。

4

2 に答える 2

14

奇妙なことは、web-fragment.xml があるのに、その内容の一部が有効な web.xml に追加されないことです。

まず第一に、 aは物理的に main に含まれweb-fragment.xmlません。したがって、効果的な に追加されないと言うときは、間違っている可能性があると思います。web.xmlweb.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、以下の規則に従うことであることがわかりました。

  1. 名前を付ける必要がありますweb-fragment.xml
  2. 内部のJARファイルに配置する必要がありますWEB-INF/lib
  3. は、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

参考文献:

于 2012-06-14T10:43:44.993 に答える