gpt4 book ai didi

Spring Boot 不提供静态内容

转载 作者:IT老高 更新时间:2023-10-28 13:00:59 25 4
gpt4 key购买 nike

我无法让我的 Spring-boot 项目提供静态内容。

我在 src/main/resources 下放置了一个名为 static 的文件夹。在其中我有一个名为 images 的文件夹。当我打包应用程序并运行它时,它找不到我放在该文件夹中的图像。

我尝试将静态文件放在 publicresourcesMETA-INF/resources 中,但没有任何效果。

如果我 jar -tvf app.jar 我可以看到文件在正确文件夹的 jar 中:/static/images/head.png 例如,但是调用:http://localhost:8080/images/head.png,我得到的只是一个 404

任何想法为什么 spring-boot 没有找到这个? (我使用的是 1.1.4 顺便说一句)

最佳答案

一年多后不复生,但之前所有的答案都漏掉了一些关键点:

  1. @EnableWebMvc 将禁用 org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration。如果您想要完全控制,那很好,但否则,这是一个问题。

  2. 除了已经提供的内容之外,无需编写任何代码来为静态资源添加另一个位置。查看 v1.3.0.RELEASE 中的 org.springframework.boot.autoconfigure.web.ResourceProperties,我看到可以在 application 中配置的字段 staticLocations。属性。以下是源代码的片段:

    /**
    * Locations of static resources. Defaults to classpath:[/META-INF/resources/,
    * /resources/, /static/, /public/] plus context:/ (the root of the servlet context).
    */
    private String[] staticLocations = RESOURCE_LOCATIONS;
  3. 如前所述,请求网址将相对解析到这些位置。因此,当请求 URL 为 /index.html 时,将提供 src/main/resources/static/index.html。从 Spring 4.1 开始,负责解析路径的类是 org.springframework.web.servlet.resource.PathResourceResolver

  4. 默认启用后缀模式匹配,这意味着对于请求 URL /index.html,Spring 将寻找与 /index.html 对应的处理程序>。如果打算提供静态内容,这是一个问题。要禁用它,请扩展 WebMvcConfigurerAdapter(但不要使用 @EnableWebMvc)并覆盖 configurePathMatch,如下所示:

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
    super.configurePathMatch(configurer);

    configurer.setUseSuffixPatternMatch(false);
    }

恕我直言,减少代码错误的唯一方法是尽可能不编写代码。使用已经提供的东西,即使需要一些研究,返回也是值得的。

2021 年 7 月编辑:

  1. WebMvcConfigurerAdapter 自 Spring 5 起已被弃用。实现 WebMvcConfigurer 并使用 @Configuration 进行注释。

关于Spring Boot 不提供静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24661289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com