0

WEB-INFの下にあるリソースはパブリックドメインではなく、これは仕様によるものであることを理解しています。
web.xmlで次のように構成することにより、WEB-INFの下のリソース(HTMLなど)にアクセスできます。

   <servlet>
    <servlet-name>resourceId</servlet-name>
    <jsp-file>/WEB-INF/resource.xsl</jsp-file>
  </servlet>

  <servlet-mapping>
    <servlet-name>resourceId</servlet-name>
    <url-pattern>/resource.xsl</url-pattern>
  </servlet-mapping>

しかし、クライアント側でドキュメント作成APIを使用すると、document.implementation.createDocumentが非推奨の警告を発し、代わりにXMLHttpRequestを提案するという奇妙な状況に直面します。このAPIを使用してXSL/XMLドキュメントを次のようにロードしようとしています

xmlFile = document.implementation.createDocument("", "", null);
xmlFile.async = false;
xmlFile.load("resource.xsl");

そして、私は警告を受け取ります:

Document.load()の使用は非推奨です。コードをアップグレードするには、DOMXMLHttpRequestオブジェクトを使用します。詳細についてはhttps://developer.mozilla.org/en/XMLHttpRequest*

しかし、リソースをWebContentまたはWebRootフォルダーの下に直接配置し、そのためのweb.xml構成を削除すると、スムーズに機能します。ぜんぜんわかりません。私はこれをFF3.6.5、5.0.1、9、10でテストしました。これを説明してください。

また、失敗時、つまりWEB-INFフォルダーに配置されたリソースが原因で警告が表示された場合、警告にもかかわらずブラウザーの読み込みに成功することもわかりました。Firebugはそれを示しています。ただし、XSLまたはXMLはtext / htmlとしてロードされ、オブジェクトxmlFileはかなり空で、データが入力されていません。成功した場合、応答ヘッダーにapplication / xmlが表示され、xmlFileオブジェクトが適切に入力されています。助けてください

4

1 に答える 1

1

ただし、XSLまたはXMLはtext / htmlとしてロードされ、オブジェクトxmlFileはかなり空で、データが入力されていません。成功した場合、応答ヘッダーにapplication / xmlが表示され、xmlFileオブジェクトが適切に入力されています。

どうやら、リソースがハックによって提供さ/WEB-INFれ、デフォルトで。になっている場合、コンテナはmimeタイプをチェックしません。間違ったコンテンツタイプは、直面しているすべてのJavaScriptエラーを説明します。web.xmltext/html

doGet()コンテンツタイプを明示的に設定し、メソッドでXSLリソースに転送するラッパーサーブレットを作成します。

response.setContentType("application/xml");
request.getRequestDispatcher("/WEB-INF/resource.xsl").forward(request, response);

代わりに、次のようにマップします。

<servlet>
    <servlet-name>resourceId</servlet-name>
    <servlet-class>com.example.XSLResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>resourceId</servlet-name>
    <url-pattern>/resource.xsl</url-pattern>
</servlet-mapping>

サーブレットコードでハードコーディングする代わりに、/WEB-INF/resource.xsl必要に応じて<init-param>設定を行い、で定義および構成できるようにします。web.xml

于 2012-04-27T14:36:16.880 に答える