2012-04-27 70 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