记:SpringBoot2.*.*无法访问静态资源的坑

1 篇文章 0 订阅
1 篇文章 0 订阅

遇到的问题

在导入静态资源(css、js包等)和html页面模板时,发生无法读取静态资源的情况,总结是以下两种情况:
1、输入访问静态资源的url,出现白页错误,无法访问静态资源;
2、输入访问html页面的url,可以访问成功,但是html页面布局乱了,无法读取样式;
由于样式是放在静态资源文件夹的,既然无法访问静态资源,那么html页面自然就无法读取样式了。所以问题归结于“无法访问静态资源”。

注:模板引擎采用的是springboot推荐的thymeleaf来渲染html页面

解决的方法

在配置类中添加以下方法
增加静态资源的访问路径

主:详细参考以下个人写的配置类

@Configuration
public class SigninConfig extends WebMvcConfigurationSupport {

    //增加访问路径
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }

    //请求与页面映射
    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {
        //urlPath:请求
        //setViewName:html页面
        registry.addViewController("/").setViewName("signin");
    }
}

粗略的原因

springboot关于springmvc自动配置的机制主要有以下两种(目前了解的),其中第一种就是涉及到“为什么无法访问静态资源”的问题:
(1)springboot不允许用户个人添加的组件与自动配置一起作用,那么用户添加的组件会覆盖掉自动配置。
我的配置类继承WebMvcConfigurationSupport,这是springmvc自动配置类,我猜想这个类涉及到静态资源路径的默认配置(没有详细看源码不确定),@Configuration又把我的配置类添加到容器中,相当于我的配置类和自动配置类都在容器中,那么根据(1),自动配置的静态资源路径自然就失效,所以如果我们不指定,自然就无法访问静态资源,所以需要我们重新指定静态资源路径(这也是为什么要重写addResourceHandlers方法)。

(2)springboot允许用户个人添加的组件(如view,也就是上述addViewControllers方法)与自动配置一起作用,那么用户添加的组件会和自动配置一起存在;

那么重点来了,以前springboot1.版本的时候还没有对(1)情况作出修改,也就是说即使你添加了相关的组件,默认的静态资源路径仍然是生效的,不需要再重写路径。
而到了springboot2.时,如果你添加了相关的组件,默认的静态资源路径就会失效,如果你不重新指明静态资源路径,那么你就无法访问静态资源,所以要多一步重新设置静态资源路径的步骤,完毕。

注:本人小白,初学springboot,也初接触前端的一些知识,所以一些知识点还不是很清楚,讲述得比较笼统,所写的知识也是七拼八凑,从网上找资料、看视频、看官方文档、源码没怎么看,所以难免会有说错的地方,有错误之处大可评论纠正,这也是本人解决问题的一个记录!

————————后续————————

原本是看着官网文档,打算按照官方说的做一遍,然后好奇就把原配置路径的代码删掉,结果居然能访问!!!没有报白页错误!!!哪位同学知道这是为什么吗o(╥﹏╥)o

@Configuration
public class SigninConfig extends WebMvcConfigurationSupport {

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

    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {
        //urlPath:请求
        //setViewName:html页面
        registry.addViewController("/").setViewName("signin");
    }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值