静态资源处理
前言:在项目中引入前端资源,应该有许多的静态资源,比如css,js,图片资源等等,如果我们是一个web应用,我们的main下会有一个webapp,我们以前都是将所有的页面导在这里面的,但是我们现在的pom呢,打包方式是为jar的方式,SpringBoot对于静态资源放置的位置,是有规定的
静态资源映射规则
在springboot中,springMVC的web配置都在WebMvcAutoConfiguration这个配置类里面,其中有一个方法:addResourceHandlers 添加资源处理
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
//原本已经添加有默认的资源映射规则,isAddMappings()方法调用了addMappings属性默认为true,如果我们在配置文件中设置了资源映射规则(application.properties/.yaml)则默认的资源映射规则失效
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
ServletContext servletContext = getServletContext();
//使用webjars 配置
addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
// 使用静态资源配置 registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (servletContext != null) {
registration.addResourceLocations(new ServletContextResource(servletContext, SERVLET_LOCATION));
}
});
}
有两种方式可以配置静态资源
1. 使用webjars配置
从源码中可以看出,所有的 /webjars/** , 都需要去 classpath:/META-INF/resources/webjars/ 找对应的资源
什么是webjars?
Webjars本质就是以jar包的方式引入我们的静态资源,以前要导入一个静态资源文件,直接导入即可
要使用webjars去官网搜索即可https://www.webjars.org
假设我们需要导入JQuery静态资源
引入jQuery对应版本的pom依赖即可
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.6.0</version>
</dependency>
查看webjars目录结构,并访问Jquery.js文件
访问:只要是静态资源,SpringBoot就会去对应的路径寻找资源,即从路径classpath:/META-INF/resources/webjars/下面开始拼接路径寻找资源,我们这里访问:http://localhost:8080/webjars/jquery/3.6.0/jquery.js
结果:访问成功
- 使用自己的静态资源导入
Ctrl + 鼠标左键进入该getStaticLocations()方法
Ctrl + 鼠标左键进入该staticLocations属性
如果访问当前项目的任意资源 “/**”,则会默认从
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
resourceProperties.getStaticLocations()路径下去寻找,也就是从这四个路径中去访问寻找静态资源路径
{ "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/" }
总结:四个目录存放的静态资源可以被我们识别
- “classpath:/META-INF/resources/”
- “classpath:/resources/”
- “classpath:/static/”
- “classpath:/public/”
可以在resources根目录下新建对应的文件夹,都可以存放我们的静态文件
“classpath:/META-INF/resources/”“classpath:/resources/”、“classpath:/static/”、"classpath:/public/"四个资源路径存放同一个资源时,有优先级顺序
在/META-INF/resources/文件夹下资源文件写hello1、在resources文件夹下资源文件写hello2、在static文件夹下资源文件写hello3、在public文件夹下资源文件写hello4
浏览器访问后:
删除/META-INF/resources/文件夹下的资源文件时
删除resources文件夹下的资源文件时,
即优先级为"/META-INF/resources/">“classpath:/resources/”>“classpath:/static/”>“classpath:/public/”
自定义静态资源路径
如果我们在application.properties/.yaml配置文件中配置了自己的静态资源路径,则默认的静态资源路径失效
自己通过配置文件来指定一下,哪些路径文件夹是需要我们放静态资源文件的,我们定义自己修改的静态资源路径,则默认静态资源路径/**则会失效
spring:
mvc:
static-path-pattern: /chenhui/**
结果: