【问题标题】:Spring-Boot doesn't load resource folder, using ThymeleafSpring-Boot 不加载资源文件夹,使用 Thymeleaf
【发布时间】:2017-02-25 20:15:37
【问题描述】:

我一直试图让这个工作,但几个小时后没有运气。

我的结构是这样的:

???? src
└─── ???? main
    ├─── ???? java
    └─── ???? resources
        ├─── ???? META-INF
        │   └─── ???? resources
        │       └─── ???? bootstrap
        │           ├─── ???? css
        │           └─── ???? js
        ├─── ???? templates
        │   └─── index.html
        └─── application.properties

这是 WebConfig 类:

@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {

    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**")
            .addResourceLocations("/resources/");
    }

}

如果我使用指向网络资源的链接,它可以工作:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></link>

如果我尝试包含静态资源,它不起作用:

<link type="text/css" rel="stylesheet" href="../../../resources/bootstrap/css/bootstrap.min.css" 
    data-th-href="@{/resources/bootstrap/css/bootstrap.min.css}" />

非常感谢任何帮助。

谢谢

【问题讨论】:

    标签: spring-boot thymeleaf


    【解决方案1】:

    问题已解决。不幸的是,问题不是来自上述任何一个,而是来自映射到“/”的控制器。如果您遇到与我相同的问题,请确保您没有映射到“/”的任何内容。现在所有资源都可以通过 URL 访问了。

    我的新结构如下:

    src
       main
           java
           resources
               static
                   bootstrap
                      css
                      js
           templates
               index.html
           application.properties
    

    这是 WebConfig 类:

    @Configuration
    @EnableWebMvc
    public class WebAppConfig extends WebMvcConfigurerAdapter {
    
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/resources/**")
                .addResourceLocations("/resources/");
        }
    
    }
    

    链接包含在 HTML 中:

    <link type="text/css" rel="stylesheet" href="../bootstrap/css/bootstrap.min.css" 
        data-th-href="@{/bootstrap/css/bootstrap.min.css}" />
    

    【讨论】:

      【解决方案2】:

      避免使用 Spring Boot 的 webapp 文件夹

      不要使用src/main/webapp 目录,如果您的应用程序将 包装成罐子。虽然这个目录是一个通用标准,但它 只适用于战争包装,它会被默默地忽略 如果您生成 jar,则大多数构建工具。

      那么在哪里放置静态文件呢?

      • Spring Boot 在这些文件夹中提供静态文件(相对于/src/main/resources/):

      默认情况下,Spring Boot 将提供目录中的静态内容 称为/static(或/public/resources/META-INF/resources)。

      我建议你将你的webapp文件重新组织成/src/main/resources/static

      其他答案

      评论后编辑 - 静态文件的路径

      访问静态文件时,静态文件夹(上面列出的)是路径的根目录。

      因此,要访问您的 css 文件:

      • 项目中的文件:META-INF/resources/bootstrap/css/bootstrap.min.css
      • 网址:http://localhost:8080/bootstrap/css/bootstrap.min.css
      • 链接标签:&lt;link type="text/css" rel="stylesheet" href="bootstrap/css/bootstrap.min.css"/&gt;
      • 链接标签:&lt;link type="text/css" rel="stylesheet" data-th-href="@{bootstrap/css/bootstrap.min.css}" /&gt;

      【讨论】:

      • 嗨@Alex,非常感谢您的回复,非常感谢。抱歉,BTW 回复晚了,但整天都在工作。我用 META-INF/resources 改变了结构,我把所有资产都放在了那里,然后从 index.html 我写了 。显然由于某种原因仍然无法正常工作。我不知道还能做什么。
      • 你能更新你的问题并包括你的新结构吗?
      • @Alex,问题已更新 :) 非常感谢
      • 你是否也更新了你的配置,sush as "setPrefix"...?此外,您的链接标签同时使用 href 和 data-th-href,不应该是 href 或 th-href 吗?另外,您的 href 不是相对的,请尝试:
      • 嗨@Alex,感谢您的回复。抱歉忘了在这里修改,请查看我的最新更新,我已经删除了 thymeleaf 配置类,因为它不再需要了。我在网上看到你可以同时保留:href 和 data th-href 并且应该可以工作。但是,两者或只有一个仍然不起作用。我不完全确定问题出在哪里。我已按照您的建议更改了 href,但没有任何区别。
      猜你喜欢
      • 2014-11-21
      • 2015-03-08
      • 2017-07-13
      • 2017-07-26
      • 1970-01-01
      • 2017-02-05
      • 2016-08-17
      • 2020-10-27
      • 2019-09-16
      相关资源
      最近更新 更多