SpringBoot的Web项目,会有很多静态资源。那么spring是如何加载静态资源的呢?
I、 默认配置
静态资源路径,SpringBoot默认从属性spring.web.resources.static-locations中取得。
对应的配置类为spring-boot-autoconfigure.jar的org.springframework.boot.autoconfigure.web.WebProperties,在spring boot 2.4.0以前定义在org.springframework.boot.autoconfigure.web.ResourceProperties中。
默认有四个路径,查找的优先级同数组顺序,从高到低。
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/" };
- /META-INF/resources/
- /resources/
- /static/
- /public/
2、配置文件方式修改
如果是properties文件的话,如下方式即可,
spring.web.resources.static-locations=classpath:/html/,classpath:/dist/
上面设置使得spring会扫描/html和/dist目录下的静态资源文件,且html目录的优先级是最高的(配置顺序中,优先级的高低从左到右)
3、Configurer方式修改
通过实现WebMvcConfigure接口的配置类。
public class MyResouceConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 将资源路径 /rs 下的资源,映射到根目录为 /rs的访问路径下
registry.addResourceHandler("/rs/**").addResourceLocations("classpath:/rs/");
}
}
4.单独的资源Jar包
一些前后端分离的资源,可能根据需要会达成单独的jar来管理。
在springboot项目中,只要保证第三方jar包中资源在配置的classpath路径中,使用上并没有什么差别。
- 第三方jar包中路径和优先级同样适用配置或设定的配置。
- 相同资源路径下,当前包的资源优先级高于jar包中的静态资源’