Spring-Boot ResourceLocations没有添加导致404的css文件

Tit*_*ito 10 css spring maven spring-boot

好吧,我有一个正常运行的spring-boot应用程序在本地计算机上运行.但是我注意到当我做mvn包时,我的css或java脚本都找不到

/src/main/wepapp/css
Run Code Online (Sandbox Code Playgroud)

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

弹簧靴参考指南说

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

24.1.4静态内容"如果你的应用程序打包为jar,请不要使用src/main/webapp文件夹.虽然这个文件夹是一个通用的标准,但它只适用于war包装,大多数构建都会默默地忽略它如果你生成一个jar的工具."

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

/src/main/resources/static
Run Code Online (Sandbox Code Playgroud)

即现在我的结构看起来像那样

/src/main/resources/static/css/
/src/main/resources/static/js/
Run Code Online (Sandbox Code Playgroud)

然而,我所有的百里叶模板仍然位于

/src/main/resources/templates/
Run Code Online (Sandbox Code Playgroud)

我做到了,据我所知,我需要将ResourceHandler添加到我的ResourceHandlerRegistry.以前当我的所有cc都在"/ 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);

}
Run Code Online (Sandbox Code Playgroud)

我尝试过添加多个处理程序

 registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0);
Run Code Online (Sandbox Code Playgroud)

要么

 registry.addResourceHandler("/css/**").addResourceLocations("/static/css/").setCachePeriod(0);
Run Code Online (Sandbox Code Playgroud)

要么

 registry.addResourceHandler("/css/**").addResourceLocations("/").setCachePeriod(0);
Run Code Online (Sandbox Code Playgroud)

等等

但他们都没有为我工作.显示html模板,但在尝试查找/css/corresponing.css或/js/corresponing.js时,Web浏览器控制台正在重新编辑404

我故意在我的测试项目中禁用Spring安全性,以简化此问题的调试.

我还没有完全理解的另一件事是部署程序集.我已经阅读了一篇文章说当我想将特定文件夹放入maven生成的目标包jar文件中时,我确实需要将这些文件夹包含到我的部署程序集中,但是我确实做了"mvn package"仍然没有进行将my/src/main/static文件夹的所有内容(包含子文件夹)放入目标jar文件中.然而,我看到"templates"文件夹被复制到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>
Run Code Online (Sandbox Code Playgroud)

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

另外一个

测试项目

git@github.com:TheDictator/sArchitecture.git
Run Code Online (Sandbox Code Playgroud)

geo*_*and 13

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

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

在此输入图像描述