2012-04-27 104 views
0

我知道WEB-INF下的任何資源都不在公有領域,這是通過設計。
我可以訪問WEB-INF下的資源,比如說一個HTML,通過在web.xml將其配置爲Javascript中XSL/XML加載時出現奇怪錯誤

<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> 

但我面對一個陌生的情況下,使用在客戶端即document.implementation文件創建API .createDocument無法拍攝棄用警告,而是建議使用XMLHttpRequest。我想使用這個API XSL/XML文檔如下

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

加載和我得到一個警告:

使用Document.load的()已過時。要升級您的代碼,請使用DOM XMLHttpRequest對象。有關更多幫助https://developer.mozilla.org/en/XMLHttpRequest *

但是,如果我將資源直接放在WebContent或WebRoot文件夾下,並且刪除任何web.xml配置,它就會順利運行。我不明白。我在FF 3.6.5,5.0.1,9,10測試了這個。請給我解釋一下。

我也意識到,在失敗期間,即當警告由於資源被放置在WEB-INF文件夾中而顯示時,瀏覽器在加載時會成功,儘管有警告。 Firebug顯示它。但是XSL或XML以text/html加載,並且對象xmlFile非常空且未填充。如果成功,我會在響應頭文件和xmlFile對象中看到application/xml。請幫助

+0

重要的是要注意的是,如果我直接在WebContent或WebRoot下放置資源,但在web.xml中配置爲 /resource.xsl,暗示它直接位於根目錄下,它仍然失敗。 XSL或XML以text/html格式加載,xmlFile對象未填充。如果我在web.xml中刪除配置,它是成功的。 – deepSymmetry 2012-04-27 14:31:37

回答

1

但是,XSL或XML以文本/ html形式加載,並且對象xmlFile非常空且未填充。如果成功,我會在響應頭文件和xmlFile對象中看到application/xml。

顯然,當資源從/WEB-INF供應由web.xml黑客,默認爲text/html容器不檢查的MIME類型。錯誤的內容類型解釋了您所面對的所有JavaScript錯誤。

我想創建一個包裝的s​​ervlet,其中明確規定的內容類型和轉發給XSL資源在doGet()方法:

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,而不是在servlet代碼硬編碼。

+0

謝謝你的回答。我以爲我不會得到迴應。我查了很久,我發現它回答了。你的回答非常有幫助,但我無法將它提高1,因爲我沒有15分。我如何說「回答」或+1點? – deepSymmetry 2012-09-18 07:04:07