Spring Boot 页面未找到

kmbjn2e3  于 2022-11-23  发布在  Spring
关注(0)|答案(9)|浏览(204)

首先要说的是,我一直在寻找一个解决方案有一段时间了,我现在非常绝望。
当由Sping 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/*");
    }
}

文件夹结构:

我试过将css文件夹放到static文件夹中,或者删除addResourcesHandlers,通过相对路径引用css,或者其他一些方法。似乎没有任何解决方法。如果你尝试解决这个问题,但没有找到解决方法,请告诉我,这样我就知道,我没有被忽略。

vdgimpew

vdgimpew1#

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 中的预定义路径

从Web配置中删除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/。*
x6yk4ghg

x6yk4ghg2#

问题出在Application.java文件中的@EnableWebMvc注解。当我删除这个注解后,css在localhost:8080/css/style.css上开始可用,但没有被应用。到目前为止,我还没有找到@EnableWebMvc导致问题的原因。
然后,我删除了一个Map到/**的控制器,为了显示自定义错误页面,我已经实现了这个控制器。

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

在删除也这一个,我有我的CSS工作. =)

30byixjq

30byixjq3#

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

.../static/css/app.css

或者,如果确实要将它们放在“资源”文件夹中:

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

在这两种情况下,CSS应该通过

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

eqfvzcg84#

将css文件夹放入resources/static文件夹中

fjnneemd

fjnneemd5#

在我的例子中,问题出在文件读取权限上。我从另一个项目中复制了文件“style.css”,但浏览器无法读取它。重新创建“style.css”后,一切正常。

guz6ccqo

guz6ccqo6#

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

wtzytmuj

wtzytmuj7#

对我来说,我必须删除对样式表的静态引用,这样它才能在thymeleaf中工作。

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

jslywgbw

jslywgbw8#

首先使用WebMvcConfigurer在一个配置类上实现,如下所示

@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/**");
    }
}

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

@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

如果您使用webjars库(如bootstrap),请将此配置添加到WebSecurityConfiguration中

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

sdnqo3pr9#

如果这个主题在2022年仍然相关。我有一个类似的问题,我这样解决它:
此链接位于/templates/file. html中

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

我已经添加了application.properties

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

我css路径是

src/main/resources/static/css/

helpful link

相关问题