带有Thymeleaf的SpringBoot - 未找到css

Bat*_*ato 11 java thymeleaf spring-boot

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

我在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>
...
Run Code Online (Sandbox Code Playgroud)

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/*");
    }
}
Run Code Online (Sandbox Code Playgroud)

文件夹结构:

文件夹结构

我已经尝试将css文件夹放入static文件夹和/或删除addResourcesHandlers,通过相对路径和其他一些东西引用css.似乎没有解决这个问题.请让我知道,如果你试图解决这个问题,但没有找到解决办法,那么我知道,我不会被忽视.

Far*_*ook 29

1.使用自定义资源路径

在您的Web配置中

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

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

src/main/resources/assets/css/

在你的意见之后

<link rel="stylesheet" type="text/css" th:href="@{/assets/css/style.css}" />
Run Code Online (Sandbox Code Playgroud)

.

2.在弹簧引导中使用预定义路径

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}" />
Run Code Online (Sandbox Code Playgroud)

.

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


Mys*_*Mac 6

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

.../static/css/app.css
Run Code Online (Sandbox Code Playgroud)

或者,如果您真的想将它们放在 assets 文件夹中:

.addResourceLocations("classpath:/assets/") <-- without the * at the end
.../assets/css/app/css
Run Code Online (Sandbox Code Playgroud)

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

th:href="@{/css/app.css}"
Run Code Online (Sandbox Code Playgroud)


Bat*_*ato 6

问题是文件中的@EnableWebMvc注释Application.java。一旦我删除了那个CSS,css就可以开始使用了,localhost:8080/css/style.css但是没有应用。到目前为止,我还没有找到@EnableWebMvc引起问题的原因。

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

@RequestMapping("/**")
public String notFound() {
    return "errors/404";
}
Run Code Online (Sandbox Code Playgroud)

删除了这一个后,我的CSS也开始工作了。=)