java - Tomcat 不提供静态文件

标签 java tomcat gradle web.xml gradle-tomcat-plugin

我已经无计可施了。我试图建立一个 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/

相关文章:

java - 为什么 Weld 在 Tomcat 上显示 "Injection into Listeners is not supported"?

java - 资源未加载(libGDX)

更新后 Gradle 构建失败

Java exec 在 64 位 Windows 中不起作用

java - 如何在 JPA 中设置默认 boolean 值

Java : Cannot send POST request to backend with Angular 5

java - 如何使用servlet获取glassfish根目录的真实路径

Tomcat - 将数据库连接移出 server.xml

java - Android Studio : Error:org. gradle.tooling.BuildException: 无法生成 v1 签名

java - 视频文件加密?