千家信息网

SpringBoot无法访问static下静态资源怎么办

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章给大家分享的是有关SpringBoot无法访问static下静态资源怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SpringBoot无法访问/static下
千家信息网最后更新 2024年11月19日SpringBoot无法访问static下静态资源怎么办

这篇文章给大家分享的是有关SpringBoot无法访问static下静态资源怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

SpringBoot无法访问/static下静态资源

SpringBoot 访问静态资源的规则

都在WebMvcAutoConfiguration自动配置类中

在该类下有对资源处理的方法

默认按照该加载顺序,加载静态资源文件,而我尝试了N次,浏览器无法访问资源;查看官网后,我又修改了默认的加载位置。如下:

spring.resources.static-locations=/static/

但是还是没有能如期访问! 而回过头再回过头看Web的自动配置类,我发现了一个被忽略的配置

在WebMvcConfigurationSupport.class这个类没有的情况下,才会走SpringBoot的Web自动配置,而在==@EnableWebMvc==中,又惊奇的发现了它

SpringBoot容器里读到了我们配置的@EnableWebMvc 注解

它通过@Import 导入了WebMvcConfigurationSupport 类,从而导致了WebMvcAutoConfiguration 类没有生效,此时我的问题找到了! 最后我又在Spring的官网找到了对应的解释,可供参考Spring MVC Auto Configuration

小结一下

如果项目有没有非常多的功能,可以使用 @EnableWebMvc 注解,全面接管SpringBoot对SpringMVC的自动注入,自己来写SpringMVC 运行所需的一些配置,这样会减少自动注入带来的一些无意义性能消耗;

而一般功能比较多的项目,还是使用SpringBoot推荐的对SpringMVC拓展方法 -- 继承 WebMvcConfigurer 类,这样不仅可以自己实现想要添加的WEB组件,也保留了SpringBoot底层的自动注入

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

遇到的问题

在导入静态资源(css、js包等)和html页面模板时,发生无法读取静态资源的情况,总结是以下两种情况:

1、输入访问静态资源的url,出现白页错误,无法访问静态资源;

2、输入访问html页面的url,可以访问成功,但是html页面布局乱了,无法读取样式;

由于样式是放在静态资源文件夹的,既然无法访问静态资源,那么html页面自然就无法读取样式了。所以问题归结于"无法访问静态资源"。

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

解决的方法

在配置类中添加以下方法

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

@Configurationpublic 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.时,如果你添加了相关的组件,默认的静态资源路径就会失效,如果你不重新指明静态资源路径,那么你就无法访问静态资源,所以要多一步重新设置静态资源路径的步骤,完毕。

--------后续--------

原本是看着官网文档,打算按照官方说的做一遍,然后好奇就把原配置路径的代码删掉,结果居然能访问!!!没有报白页错误!!!

@Configurationpublic 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无法访问static下静态资源怎么办"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

资源 静态 配置 路径 页面 组件 方法 情况 用户 问题 个人 容器 样式 自然 参考 怎么办 也就是 作用 内容 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 公安局的网安大队网络安全管理岗 深刻认识到网络安全的重要性 网络安全法核心摘要 修改数据库sys用户密码 假日期间网络安全防控措施 启明软件开发是国企吗 服务器启动优化模块 网络安全视频哪里下载 苹果手机中国数据库在哪里 上海交通大学网络安全好不好 计算机等级开始网络技术 闵行区网络技术开发优势 北京农行总行软件开发中心 好商汇网络技术服务有限公司 服务器安全缺陷 深圳及时网络技术有限公司 网络安全小常识说明文 网络安全宣传口号创意 用树状图表示数据库关系图 修改ios数据库数据 法律 数据库 深圳物料备件管理软件开发 考研北京邮电大学网络安全多少分 易语言如何入侵服务器 浙江义乌亿商网络技术有限公司 市南区ios软件开发企业 本地专业软件开发团队 使用网络技术售后服务 MySQL本地单机数据库 东土科技工业互联网阿里合作
0