13.0、springboot-静态资源导入探究
双击shift键查询WebMvcAutoConfigration.class,我们能找到下面这个添加资源处理器的方法
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null) {
ServletContextResource resource = new ServletContextResource(this.servletContext, "/");
registration.addResourceLocations(new Resource[]{resource});
}
});
}
}
我们来分析一下这串代码,第一个if方法中是说如果静态资源的属性已经被自定义了那么会直接return,然后默认的配置这段代码就会失效。
第二个方法中出现了一个webjars,来说说什么是webjars?
比如说我们以前前端使用js的时候应该要手动的导入js才能使用,
那么webjars就相当于把之前的js文件当成依赖直接在pom.xml文件中配置引入即可使用js。
那我们进入webjars官网:https://www.webjars.org/,在里面可以直接拷贝到js相关的maven依赖,然后拷贝依赖放到自己项目的pom.xml文件中即可。

如果我们没有自定义修改属性,那么就会进入下一个添加静态资源的方法:该方法是去webjars下面找,只要是在webjars/下请求的静态资源,都会去
classpath:/META-INF/resources/webjars这个目录下寻找,而这个目录的结构只要是在webjars官网上拷贝的依赖添加进来都会符合这个结构。也就是说在不修改默认属性的情况下一定是能找得到到的,如下图所示:

用localhost:8080/webjars/github-com-jquery-jquery/3.4.1/ajax.js
确实能够访问到这个目录下的资源
再来看下一个方法如下:
我们能够看到这个方法调用了一个getStaticPathPattern()方法点击进去,如图下所示:

进来后会看到一个StaticPathPattern再次点击这个进去会看到/**也就是接收所有任意的请求

方法往下走可以看到有一个resourceProperties点进去

resourceProperties点进去会看到一个Resources再点进去

Resources再点进去可以看到有四个目录的位置都可以接收请求

也就是说我们可以在classpath下
创建public文件夹、resources文件夹,static文件夹
在这3个文件夹里所有的资源都可以直接在localhost:8080/后面被访问到,测试如下:

测试成功!在public文件夹下的test.js文件成功的被访问到了

因为这三个文件夹下的都能被访问到,所以我测试了一下他们之间的优先级如下:
resources>static(默认)>public
一般resources下放一些上传文件public下放一些公共访问的资源static下放图片等
总结:
在springboot中,我们可以使用以下方式处理静态资源
·webjars localhost:8080/webjars/
·public、static、/**、resources localhost:8080/webjars/
6021

被折叠的 条评论
为什么被折叠?



