当前位置: 首页 > 面试题库 >

Spring Boot不提供静态内容

慕容明煦
2023-03-14
问题内容

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

我已经放在一个命名的文件夹staticsrc/main/resources。在其中,我有一个名为的文件夹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 BTW)


问题答案:

超过一年后不复活,但先前的所有答案都遗漏了一些关键点:

  1. @EnableWebMvc在你的班级上将被禁用org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration。如果你想要完全控制,那很好,但是否则,这是一个问题。
  2. 除了已经提供的内容外,无需编写任何代码即可为静态资源添加其他位置。看着org.springframework.boot.autoconfigure.web.ResourcePropertiesv1.3.0.RELEASE,我看到一个字段staticLocations,可以在配置application.properties。这是源代码片段:
/**
 * 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;
  1. 如前所述,请求URL将相对于这些位置进行解析。因此,src/main/resources/static/index.html当请求网址为时将投放/index.html。从Spring 4.1开始,负责解析路径的类是org.springframework.web.servlet.resource.PathResourceResolver

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

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

    configurer.setUseSuffixPatternMatch(false);
}

恕我直言,在你的代码中减少错误的唯一方法是不尽可能编写代码。使用已经提供的内容,即使需要进行一些研究,回报也是值得的。



 类似资料:
  • 我无法访问静态内容(angular app),甚至无法访问简单的索引。来自spring boot的html文件。我一直收到404错误。Spring没有为我提供这些静态文件。自从升级到Spring Boot 2.2.4后,我就遇到了这个问题。我必须升级以应对Zip64问题。 我的application.properties里有这样一句话: 我也有自己的staticResourceConfigurat

  • 问题内容: 我在两个不同的容器(Tomcat和Jetty)上部署了一个webapp,但是它们用于提供静态内容的默认servlet具有处理我要使用的URL结构的不同方式(详细信息)。 因此,我希望在web应用程序中包含一个小型servlet,以提供其自己的静态内容(图像,CSS等)。Servlet应该具有以下属性: No external dependencies Simple and reliab

  • 谷歌云文档对该应用的可用语法不是很精确。用于我的节点的yaml文件。js应用程序。 我使用了GAE的Python留档中描述的语法,从中我发现了处理程序mecism: 我避免使用expressjs规则来服务/public/index。html内容,最后我得到了一个404错误,这意味着GAE不是作为静态内容提供我的页面: 你有什么线索吗?节点。js与制作API、生成动态内容相关。。。但我更喜欢使用谷歌

  • 我正在使用Spring Boot,并试图使我的静态资源(CSS,JS,字体)在部署时可用。源代码可供您查看或从https://github.com/joecracko/StaticResourceError.克隆 现在我的CSS、JS和字体文件对我部署的网站不可见。 下面是我的项目目录结构: 下面是编译后的JAR的根目录:我向您保证,这些文件存在于各自的文件夹中。 以下是我看到的网络错误: 以下是

  • 我一直在处理将一个站点从Apache迁移到Nginx的过程,我快要失去理智了。虚拟主机不想提供静态资源(css、js等),我似乎不知道为什么。服务器块看起来像这样: 我错过了什么?我知道这是因为我对Nginx缺乏经验,但任何建议都将不胜感激。 谢谢 更新 这似乎与我以前遇到麻烦的化名有关。如果我将我的文档根指向别名位置(),并尝试呈现没有别名的静态内容,它会呈现良好的效果。一旦我在网址中输入别名.

  • 问题内容: 我正在使用,我的django应用的结构如下 的是 在我尝试使用它为: 但是它没有加载并给出错误 我跑去收集所有静态文件。 为什么要加载CSS文件?是否缺少任何配置? 请提出建议。 问题答案: 根据文档正确的方式来加载静态文件是 这会工作