在Javascript中加载XSL/XML时出现奇怪错误

在Javascript中加载XSL/XML时出现奇怪错误,javascript,xml,servlets,web-inf,Javascript,Xml,Servlets,Web Inf,我知道WEB-INF下的任何资源都不属于公共领域,这是出于设计。 我可以访问WEB-INF下的资源,比如HTML,方法是在WEB.xml中将其配置为 <servlet> <servlet-name>resourceId</servlet-name> <jsp-file>/WEB-INF/resource.xsl</jsp-file> </servlet> <servlet-mapping

我知道WEB-INF下的任何资源都不属于公共领域,这是出于设计。
我可以访问WEB-INF下的资源,比如HTML,方法是在WEB.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.load()。要升级代码,请使用DOM XMLHttpRequest对象。需要更多帮助*

但是,如果我将资源直接放在WebContent或WebRoot文件夹下,并删除其中的任何web.xml配置,它就会顺利工作。我不明白这一点。我在FF 3.6.5,5.0.1,9,10上测试了这个。请给我解释一下

我还意识到,在失败期间,即当由于放置在WEB-INF文件夹中的资源而显示警告时,尽管有警告,浏览器还是成功加载。萤火虫展示了它。但是XSL或XML是以text/html的形式加载的,而对象xmlFile是空的,不受欢迎。如果成功,我会在响应头中看到application/xml,并很好地填充了xmlFile对象。请帮忙

但是XSL或XML是以text/html的形式加载的,而对象xmlFile是空的,不受欢迎。如果成功,我会在响应头中看到application/xml,并很好地填充了xmlFile对象

显然,当通过
WEB.xml
hack从
/WEB-INF
提供资源时,容器不会检查mime类型,默认为
text/html
。错误的内容类型解释了您面临的所有JavaScript错误

我将创建一个包装器servlet,它显式设置内容类型并转发到
doGet()
方法中的XSL资源:

response.setContentType(“应用程序/xml”);
request.getRequestDispatcher(“/WEB-INF/resource.xsl”).forward(请求,响应);
将其映射为如下所示


足智多谋的
com.example.XSLResourceServlet
足智多谋的
/resource.xsl

如有必要,将
/WEB-INF/resource.xsl
设置为
,以便您可以在
WEB.xml
中定义和配置它,而不是在servlet代码中硬编码。

需要注意的重要一点是,如果我将资源直接放在WebContent或WebRoot下,但在WEB.xml中作为/resource.xsl进行配置这意味着它直接位于根目录下,但仍然失败。XSL或XML作为text/html加载,而xmlFile对象不被填充。如果我删除web.xml中的配置,这是成功的。谢谢您的回答。我想我不会得到回应。过了很长一段时间,我检查了一下,发现答案是肯定的。你的回答很有帮助,但我不能“提高”1分,因为我没有15分。我怎么说“已回答”或+1分?
xmlFile = document.implementation.createDocument("", "", null);
xmlFile.async = false;
xmlFile.load("resource.xsl");