问题描述
自定义Web配置类后无法访问/static文件夹下静态资源。
已加相关依赖包。
官方文档
Spring MVC Auto Configuration
Maven
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
问题分析
(1)在src/main/resources/目录下创建static文件夹
(2)在src/main/resources/目录下创建resources文件夹
(3)在src/main/resources/目录下创建public文件夹
(4)在src/main/resources/目录下创建META-INF/resources文件夹
目录结构图:
优先级顺序:/META-INF/resources>resources>static>public
Spring Boot 访问静态资源的规则在WebMvcAutoConfiguration自动配置类中
在该类下有对资源处理的方法
默认按照该加载顺序,加载静态资源文件。
Web的自动配置类中
在没有WebMvcConfigurationSupport.class的情况下,才会使用Spring Boot的Web自动配置
在==@EnableWebMvc==中,通过 @Import 导入了DelegatingWebMvcConfiguration类
而DelegatingWebMvcConfiguration类 继承于WebMvcConfigurationSupport 类,从而导致了 WebMvcAutoConfiguration 类没有生效。
WebMvcConfigurationSupport 类没有添加任何静态资源的映射。
解决方案
对于功能较少的项目,可以使用 @EnableWebMvc 注解,全面接管Spring Boot对SpringMVC的自动注入,自己来写SpringMVC 运行所需的一些配置,这样会减少自动注入带来的一些无意义性能消耗,可以将WebMvcAutoConfiguration自动配置类中addResourceLocations方法代码直接覆盖自定义配置类的addResourceLocations方法,即可解决无法访问/static文件夹下静态资源的问题;
对于功能较多的项目,使用Spring Boot推荐的对SpringMVC拓展方法 —— 继承 WebMvcConfigurer 类,这样不仅可以实现添加WEB组件,也保留了SpringBoot底层的自动注入。
参考文章
/qq_34369569/article/details/99292925
/qq_34797335/article/details/80194137
/qq_36481052/article/details/79075214
/get-article-detail-132221.html
/qq_35299712/article/details/80061532