我的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浏览器?
答案 0 :(得分:5)
jar的构建方式是正确的。 Tomcat 7附带了Servlet 3.0 jar,但除非web.xml明确声明它是3.0版本,否则它不会从jar中提供资源。 Tomcat不会假设您需要Servlet 3.0功能。
在您的web.xml中,您的网络应用标记需要像这样开始:
<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功能。
答案 1 :(得分:2)
再见,它可以帮助某人。
有人在他们的catalina.properties中制作了
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*
加快Tomcat的启动时间。
如果我在Tomcat 9上执行此操作,则jar中的资源对我来说是无法访问的。我不得不例外:
tomcat.util.scan.StandardJarScanFilter.jarsToScan = libraryWithResources.jar,....
问题消失了。