6

我的 WEB-INF/lib 目录中有一个 jar 文件。在那个 jar 里面是一个 META-INF/resources 目录,里面有一个文件(image.jpg)。据我了解 servlet 3.0 API,当我将其部署为 Tomcat 7 下的 Web 应用程序的一部分时,我应该能够访问

http://host/context/image.jpg 

并查看从 jar 中加载的图像。但相反,我收到 404 错误。就好像 servlet_api 没有从我的 jar 中加载资源,即使文档说它应该这样做。

我究竟做错了什么?我需要在 web.xml 文件中添加一个字段来告诉 tomcat 加载这些资源并使它们可用于 Web 浏览器吗?

4

2 回答 2

6

罐子的构建方式是正确的。Tomcat 7 附带 Servlet 3.0 jar,但它不会从 jar 中提供资源,除非 web.xml 明确声明它是 3.0 版。Tomcat 不会假定您需要 Servlet 3.0 功能。

在您的 web.xml 中,您的 web-app 标签需要像这样开始:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

请注意对 3.0 版的引用

只要您指定 web 应用程序是 3.0 版,您就可以访问 Servlet 3.0 功能。

于 2012-06-28T15:01:53.483 回答
2

也许它可以帮助某人。

有些人在他们的 catalina.properties 中制作:

tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*

加快 Tomcat 的启动时间。

如果我在我的 Tomcat 9 上这样做,jar 中的资源对我来说是无法访问的。我不得不例外:

tomcat.util.scan.StandardJarScanFilter.jarsToScan = libraryWithResources.jar,....

问题就消失了。

于 2019-06-04T14:18:49.290 回答