我已经无计可施了。我试图建立一个 super 简单的网络应用程序,但我似乎无法让 tomcat 访问 404 个静态文件。
- 我正在使用 tomcat 版本 7.0.39 的 gradle tomcat 插件
- 我的 html 文件位于
hey-world/src/main/webapp/index.html
我的
web.xml
如下所示:<servlet> <servlet-name>Resteasy</servlet-name> <servlet-class> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher </servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>HeyWorldApplication</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Resteasy</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
所以我认为此设置会将 localhost:8080/hey-world/static/index.html
映射到文件,但每次都是 404。这是 gradle tomcat 插件中某些约定的问题吗?
最佳答案
web.xml
/servlet-mapping
中使用的 URL 模式通常有点简单。我认为在你的情况下,Resteasy 的 /*
模式将作为一个包罗万象的方式工作,因此没有其他映射真正重要。
为了调试,我建议您完全删除 Resteasy-servlet,看看您是否可以使用您的映射从自定义 URL 提供静态文件。
如果可行,请重新启用 Resteasy,但使用不同的 URL 模式(例如 /rest/*
)。
如果这有效,那么一切都正常,只是 /*
的 URL 映射阻止了其他任何工作。
最简单的解决方案可能是默认情况下(无映射)服务器静态文件,并从另一个 URL 提供 rest-stuff。
或者使用两个网络应用程序。一个具有上下文根 /static
,一个具有上下文根 /
。
关于java - Tomcat 不提供静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16957874/