带有Thymeleaf的SpringBoot - 未找到css

时间:2015-04-10 13:17:45

标签: java spring-boot thymeleaf

首先要说的是,我现在一直在寻找解决方案,现在我非常绝望。

在Spring Boot运行时,我无法从html页面访问css文件。

html.file

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
    <head lang="en">
        <title th:text='#{Title}'>AntiIntruder</title>
        <meta charset="UTF-8" />
        <link rel="stylesheet" type="text/css" media="all" href="../assets/css/style.css" th:href="@{/css/style.css}" />
    </head>
    <body>
...

Application.java

@SpringBootApplication // adds @Configuration, @EnableAutoConfiguration, @ComponentScan
@EnableWebMvc
public class Application extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/*");
    }
}

文件夹结构:

folder structure

我已尝试将css文件夹放入static文件夹和/或删除addResourcesHandlers,通过相对路径和其他一些内容引用css。似乎没有解决这个问题。 如果你试图解决这个问题,请告诉我,但是没有找到解决办法,所以我知道,我不会被忽视。

6 个答案:

答案 0 :(得分:26)

<强> 1。使用自定义资源路径

在您的Web配置

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
  if (!registry.hasMappingForPattern("/assets/**")) {
     registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/");
  }
}

将您的style.css文件放在此文件夹

src/main/resources/assets/css/

在你的观点中

之后
<link rel="stylesheet" type="text/css" th:href="@{/assets/css/style.css}" />

<强> 2。在spring boot中使用预定义路径

从您的网络配置中删除addResourceHandlers

style.css放入以下任意文件夹

  • src/main/resources/META-INF/resources/assets/css
  • src/main/resources/resources/assets/css/
  • src/main/resources/static/assets/css/
  • src/main/resources/public/assets/css/

在视图中

<link rel="stylesheet" type="text/css" th:href="@{/assets/css/style.css}" />

注意:您可以在此处删除assets文件夹。如果要执行此操作,请将其从预定义的资源文件夹以及视图th:href中删除。但我保持原样,因为你明确提到了问题中的assets/路径。因此,我相信您需要在资源网址中使用assets/

答案 1 :(得分:5)

问题是@EnableWebMvc文件中的Application.java注释。我删除那个后,css开始在localhost:8080/css/style.css处可用,但未应用。到目前为止,我还没有找到@EnableWebMvc导致问题的原因。

然后我删除了一个映射到我已实现的/**的控制器,以显示自定义错误页面。

@RequestMapping("/**")
public String notFound() {
    return "errors/404";
}

在删除这个之后,我已经让我的CSS工作了。 =)

答案 2 :(得分:2)

如果将css放在静态文件夹中,则不需要addResourceHandlers方法。

.../static/css/app.css

或者,如果你真的想把它们放在资产文件夹中:

.addResourceLocations("classpath:/assets/") <-- without the * at the end
.../assets/css/app/css

在这两种情况下,css应该可以通过

获得
th:href="@{/css/app.css}"

答案 3 :(得分:0)

我的建议是将css文件夹放在static文件夹下,删除addResourcesHandlers并使用绝对路径到达css(例如/css/style.css)。

答案 4 :(得分:0)

将您的css文件夹放在 resources / static 文件夹

答案 5 :(得分:0)

对我来说,我必须删除对样式表的静态引用,才能使其在百里香中工作。 所以

<link rel="stylesheet" type="text/css" media="all" href="../assets/css/style.css" th:href="@{/css/style.css}">

蜜饯

<link rel="stylesheet" th:href="@{/css/bootstrap.css}"> 

我花了几个小时尝试各种配置和文件路径重命名。不知道为什么,但这是让我的css和js加载到Spring Boot 5中的唯一方法。