Tomcat 不提供静态文件

Chr*_*ris 4 java tomcat web.xml gradle gradle-tomcat-plugin

我在这件事上已经束手无策了。我试图建立一个超级简单的网络应用程序,但我似乎无法让 tomcat 不出现 404 静态文件。

  • 我正在使用 gradle tomcat 插件和 tomcat 版本 7.0.39
  • 我的 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>
    
    Run Code Online (Sandbox Code Playgroud)

所以我以为这个设置会映射localhost:8080/hey-world/static/index.html到文件,但每次都是404。这是 gradle tomcat 插件中的某些约定的问题吗?

har*_*ldK 5

web.xml/中使用的 URL 模式servlet-mapping通常有点简单。我认为在你的情况下,/* Resteasy 的模式将作为一个包罗万象的模式,因此其他映射都不会真正重要。

为了进行调试,我建议您完全删除 Resteasy-servlet,并查看是否可以通过映射从自定义 URL 提供静态文件。如果有效,请重新启用 Resteasy,但使用不同的 URL 模式(例如/rest/*)。

如果这有效,那么一切都工作正常,只是 URL 映射阻止了/*其他任何事情的工作。

最简单的解决方案可能是按照默认设置提供静态文件(无映射),并从另一个 URL 提供剩余内容。

或者使用两个网络应用程序。一种具有上下文根/static,一种具有上下文根/