【问题标题】:Spring-Boot ResourceLocations not adding the css file resulting in 404Spring-Boot ResourceLocations 未添加导致 404 的 css 文件
【发布时间】:2014-07-07 04:17:51
【问题描述】:

好吧,我有一个可以在本地计算机上运行的 spring-boot 应用程序。但是我注意到,当我执行 mvn package 时,我的 css 或 java 脚本都没有位于

/src/main/wepapp/css

正在被复制到目标目录中创建的 jar 文件(包)中。

spring boot 参考指南说

65.3 将现有应用程序转换为 Spring Boot “静态资源可以移动到 /public(或 /static 或 /resources 或 /META-INF/resources) 在类路径根目录中。”

24.1.4 静态内容“如果您的应用程序将被打包为 jar,请不要使用 src/main/webapp 文件夹。虽然此文件夹是 通用标准,它只适用于战争包装,它将是 如果您生成 jar,大多数构建工具都会默默地忽略它。”

这意味着我可以将我所有的 js 和 css 文件夹放入文件夹中

/src/main/resources/static

即现在我的结构是这样的

/src/main/resources/static/css/
/src/main/resources/static/js/

我所有的百里香模板仍然位于

/src/main/resources/templates/

我做到了,据我所知,我需要将 ResourceHandler 添加到我的 ResourceHandlerRegistry。以前,当我所有的 ccs 都在“/src/main/wepapp/css/”中时,我的 ResourceHandlers 看起来像这样,它对我来说效果很好。

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/pdfs/**").addResourceLocations("/pdfs/").setCachePeriod(0);
    registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(0);
    registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(0);
    registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0);

}

我尝试添加多个处理程序,例如

 registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0);

 registry.addResourceHandler("/css/**").addResourceLocations("/static/css/").setCachePeriod(0);

 registry.addResourceHandler("/css/**").addResourceLocations("/").setCachePeriod(0);

等等。

但没有一个对我有用。 显示 html 模板,但 Web 浏览器控制台在尝试定位 /css/corresponing.css 或 /js/corresponing.js 时报告 404

为了简化这个问题的调试,我特意在我的测试项目中禁用了 Spring 安全性。

我不完全理解的另一件事是部署程序集。我读过一篇文章说,当我确实希望将特定文件夹放入由 maven 生成的目标包 jar 文件中时,我确实需要将这些文件夹包含到我的部署程序集中,但是我确实做到了,但是“mvn 包”仍然没有解决我的 /src/main/static 文件夹的所有内容(包括子文件夹)到目标 jar 文件中。但是,我看到将“模板”文件夹复制到 jar 文件中。所以在幕后还有一些其他的魔法发生。

这是我如何在百里香布局中声明 css,即

/src/main/resources/templates/layout.html


<!DOCTYPE html>
<html>
  <head>
    <title layout:title-pattern="$DECORATOR_TITLE - $CONTENT_TITLE">Task List</title>
    <link rel="stylesheet" type="text/css" media="all"  th:href="@{/css/syncServer.css}"  href="../css/syncServer.css" />
    ...
  </head>
  <body>
      ...
  </body>
</html>

我的问题是:到目前为止我所做的配置是否正确,如果正确,我需要注意哪些其他选项/设置才能使应用程序找到位于 /src/main/static/css/ 中的 css 文件

加一个

测试项目

git@github.com:TheDictator/sArchitecture.git

【问题讨论】:

  • 使用 Spring Boot 时,如果将资源添加到 /src/main/resources/static,则需要任何 addResourceHandlers 配置。如果您当然使用过 @EnableAutoConfiguration 并且没有使用过 @EnableWebMvc,那么 Spring Boot 将自行处理这些内容
  • 你好 geoand,我在一个配置类下使用了@EnableWebMvc,现在我已经删除了它,但仍然没有加载 css。我什至评论了 addResourceHandlers bean,以检查它们是否会自动注册。你能发布一个关于我们不应该使用 EnableWebMvc 的链接
  • 如果你看一下WebMvcAutoConfiguration的源代码,你会看到@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)。这意味着 WebMvcAutoConfiguration 仅在 WebMvcConfigurationSupport 未配置为 bean 时使用,这反过来意味着不存在 @EnableWebMvc
  • 如果仍有问题,能否发布您的 Spring 配置?我已经按照我在第一条评论中提到的方式使用了资源,完全没有问题
  • 你好 geoand 这仍然不是我所期望的。我将在几个小时内将项目砍掉并在 github 上发布该项目,然后我将在此处发布链接。感谢您的支持。

标签: css spring maven spring-boot


【解决方案1】:

如果您将整个 static 目录移动到 resources 并完全删除 addResourceHandlers 配置,那么一切正常。

这意味着资源结构将如下图所示:

【讨论】:

  • 您好 geoand ,这确实有效,我将静态文件夹放在 /src/main/resources/ 目录下,一切正常,但是请帮助我了解使用引用的正确路径到 spring 参考指南,我是 /src/main/resources/static/css 还是 /src/main/static/css ? .如果路径是 /src/main/static/css 那么正确的链接是什么,即
  • 感谢您在此问题中的回答和支持
  • @Tito 欢迎您!查看docs.spring.io/spring-boot/docs/1.0.2.RELEASE/reference/…。它提到了支持的路径(相对于 /resources)。
  • 英语不是我的母语,但如果我理解正确,它将是 /src/main/resources/static 、 /src/main/resources/resources 、 /src/main/resources/public 、 ,我只是有点困惑,因为第二种情况下的双资源文件夹
猜你喜欢
  • 2015-10-02
  • 2021-03-14
  • 2015-02-04
  • 2018-10-02
  • 2017-06-14
  • 1970-01-01
  • 2019-06-07
  • 2019-02-09
  • 1970-01-01
相关资源
最近更新 更多