【问题标题】:Spring boot not serving static files from inside jarSpring Boot 不从 jar 内部提供静态文件
【发布时间】:2019-07-11 03:45:18
【问题描述】:

Spring boot 不提供放置在 jar 中的静态文件。

我有一个后端应用程序,我决定添加前端。设置任务将静态前端文件复制到src/main/resources/static。在 SO 上经历了一堆答案,他们都建议静态内容(index.html、.js 和 .css 文件)应该位于 src/main/resources/staticsrc/main/resources/public 下,我都试过了。我打开构建的 .jar 并且静态文件在那里,但是使用 java -jar myApp.jar 启动应用程序并打开 localhost:8080 会给我默认的 whitelabel 错误页面。我的应用程序有效,因为我可以访问我在其上运行的 api。 应用程序没有@EnableWebMvc 或任何其他自定义配置。

如果我手动将相同的静态资源复制/粘贴到项目的 src/main/resources/static 并使用 IDE 中的 @SpringBootApplication 类运行应用程序 - 资源加载没有问题并且 index.html 在访问 localhost:8080 时打开,所以这只是一个问题当文件在 .jar 中时。 静态文件在可运行的 spring boot .jar 文件中时是否应该有所不同? Spring Boot 2.1.1 版

【问题讨论】:

  • 当它们位于可运行的 jar 中时,您是否尝试通过完整路径(例如 localhost:8080/index.html)访问它们?
  • 是的,尝试通过 localhost:8080/index.html 直接访问会出现同样的错误 - 未找到。
  • 你的 .jar 文件结构和里面是什么样子的?
  • 你的 POM/Gradle 文件是什么样的?似乎是项目构建问题..
  • @SasiKathimanda 这是不正确的。如果配置正确,Spring-Boot 完全能够为静态资源提供服务。

标签: java spring spring-boot


【解决方案1】:

我也面临同样的问题。

如果有帮助,我可以通过添加以下配置来正确地提供静态文件:

包 fr.maif.darwin.api.security;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
public class StaticFilesConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}

...但它覆盖了 spring boot 中的“隐式”自动配置,我的其余过滤器等不再起作用...=>这是因为 @EnableWebMvc 停用了 spring 的默认配置。

[EDIT] 最后,我碰巧了解到包含静态文件的 jar 未包含在构建的 bootJar 中。你可能想检查一下。 HTH!

【讨论】:

  • 当您从预定义位置提供静态页面时,实际上不需要此配置
  • 确实是@Prashant - 除非您真的要在 /static/* URL 下提供它。顺便说一句,我发现 Abhijit Sarkar 在线程 [/questions/24661289/spring-boot-not-serving-static-content] 中的评论非常有用。我的问题实际上出在其他地方 - 包含静态文件的 jar 已由 IDE 解决,但未包含在产品构建中……我的错! :) 无论如何 HTH!
  • @Highbrainer 是的..在这里遇到了同样的问题。经过繁琐的检查,发现它不会提供大小为 0 字节的静态内容。
  • @below-1 我遇到了完全相同的问题。有人设法告诉 Spring 还服务器零字节/空文件吗?
猜你喜欢
  • 2017-01-21
  • 2016-12-20
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 2013-08-23
  • 1970-01-01
相关资源
最近更新 更多