SpringBoot——webjars&静态资源映射规则
我们回忆一下SpringBoot的Web开发过程
1)、创建SpringBoot应用,选中我们需要的模块;
2)、SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来;
3)、自己编写业务代码;
而在自动配置原理中,我们思考:这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?
在此之前,我们大致有过如下的这些了解:
xxxxAutoConfiguration:帮我们给容器中自动配置组件;
xxxxProperties:配置类来封装配置文件的内容;
1、SpringBoot中静态资源的映射规则
这里我们以WebMvcAutoConfiguration为例子,对静态资源的映射部分源码进行简单讲解
首先我们还是在jar包中找到WebMvcAutoConfiguration
其中有一个addResourceHandlers方法:
在这个方法当中有一个webjars,是以jar包的方式引入静态资源(webjars的官网为http://www.webjars.org/)
把对应的依赖添加到pom文件中
我们看看引入的依赖具体是什么样子,可以看出是jQuery文件
对于SpringBoot对静态资源的映射规则,我们总结出如下四种方法
1、所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;
首先,我们已经知道刚才引入的webjars依赖目录结构长这个样子:
按照这样的目录结构,我们可以试着访问localhost:8080/webjars/jquery/3.5.1/jquery.js
界面显示如下,说明依赖引入成功!
在访问的时候只需要写webjars下面资源的名称即可。我们可以看到其中也有对缓存时间的设置
2、"/**" 访问当前项目的任何资源,都去(静态资源的文件夹)找映射
"/**" 是在哪里配置的呢?我们可以具体看看源码:
首先还是在addResourceHandlers方法中,我们可以找到如下源码:
再点击getStaticPathPattern();
点击staticPathPattern
从而发现staticPathPattern = "/**"
另外,一方面可以用webjars配置静态资源,当然我们也可以在源码中看到还有另一种方式:
可以看到getStaticLocations()方法,点进去看看:
再点staticLocations看看:
字符串数组具体内容为:
"classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/"};
当然,还有一个当前项目的根路径,即”/”
即如下5个,称为静态资源的文件夹(即只要把静态资源放在这个文件夹下,便可以/**)
- "classpath:/META-INF/resources/",
- "classpath:/resources/", 这个resource是类路径的根目录
- "classpath:/static/",
- "classpath:/public/",
- ”/”
对应的路径示意图为:
localhost:8080/abc,去静态资源文件夹里面找abc
例如我们给static文件夹下放一个js文件:
进入浏览器进行访问:
3、欢迎页; 静态资源文件夹下的所有index.html页面;被"/**"映射;
localhost:8080/ 找index页面
例如我们新建一个html文件index
在浏览器中输入localhost:8080/
4、所有的 **/favicon.ico 都是在静态资源文件下找