SpringBoot 与 Thymeleaf - 未找到 css

问题描述 投票:0回答:10

首先要说的是,我已经寻找解决方案有一段时间了,现在我很绝望。

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

html.文件

<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>
...

应用程序.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 和其他一些东西。似乎没有什么可以解决这个问题。 如果您尝试解决此问题但没有找到解决方案,请告诉我,以便我知道我不会被忽视。

java spring-boot thymeleaf
10个回答
36
投票

1。使用自定义资源路径

在您的网络配置中

@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/
路径。所以我相信您的资源 URL 中必须包含
assets/


10
投票

问题出在

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

然后我删除了映射到我实现的

@EnableWebMvc

的控制器,以显示自定义错误页面。


/**

删除这个之后,我的 CSS 就可以工作了。 =)


7
投票

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

或者如果您确实想将它们放入资产文件夹中:

.../static/css/app.css

在这两种情况下,CSS 都应该可以通过
使用

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



1
投票
resources/static

文件夹


1
投票


0
投票
th:href="@{/css/app.css}"

文件夹放在

css
文件夹下,删除 addResourcesHandlers 并使用绝对路径访问 css(例如
static
)。
    


0
投票

/css/style.css

成为

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

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


0
投票

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

所以现在你可以像这样覆盖你的 HttpSecurity 配置

@Configuration public class WebMvcConfiguration implements WebMvcConfigurer { //and overide this configuration method like this @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/webjars/**", "/resources/**"); } }

如果您使用的是像 bootstrap 这样的 webjars 库,请将此配置添加到您的 WebSecurityConfiguration 

@EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter{ @Override public void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/index").anonymous() .antMatchers("/**/*.*").permitAll() .anyRequest().authenticated(); } } this ("/**/*.*") regex text will allow files with anny extension



0
投票

此链接位于/templates/file.html

@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); }

我添加了application.properties

<link rel="stylesheet" type="text/css" media="all" ref="../static/css/styles.css">

我的CSS路径是

spring.mvc.static-path-pattern=/static/**

有用的链接


0
投票

src/main/resources/static/css/

这对我有用

© www.soinside.com 2019 - 2024. All rights reserved.