4

在这个问题上,我已经走到了尽头。我正在尝试建立一个超级简单的 webapp,但我似乎无法让 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 插件中的一些约定的问题吗?

4

1 回答 1

4

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

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

如果这行得通,那么一切都很好,只是 /* 的 URL 映射阻止了其他任何东西的工作。

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

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

于 2013-06-06T09:09:32.517 回答