基于springboot1.5.19的源码分析。
首先打开springboot自动配置类WebMvcAutoConfiguration找到addResourceHandlers方法:
这个方法对两种静态资源做了相应的处理,290行是对jar包方式引用的静态资源的处理,297行是对自定义的静态资源处理。
1、第290行,如果/webjars/**的请求得不到处理,就去classpath:/META-INF/resources/webjars/下找资源,setCachePeriod是设置缓存时间(配置文件中配置)。
比如说我现在去https://www.webjars.org/引入一个bootstrap的依赖,然后看它的目录结构
访问bootstrap.js的请求就应该是http://localhost:8080/webjars/bootstrap/4.3.1/js/bootstrap.js
可以看到顺利访问到静态资源了。
2、自定义的静态资源映射规则。
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
staticPathPattern = "/**";
297行意思就是访问的任何请求/**如果得不到处理就会视为访问静态资源。
再来看看它对这种情况要到哪里去找:
找到了这个静态代码块,这个代码块就是复制CLASSPATH_RESOURCE_LOCATIONS这个静态常量的值,也就是说会在这几个位置去找资源:
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
"/"当前项目的根路径
知道了这些我们就知道如何访问了,引入一个外部的jquery丢到resource/static下试试,
访问http://localhost:8080/jquery.js即可:
最后一种可以在配置文件中覆盖代码块的值:
yml文件遵循松散绑定,所以在properties文件映射时可以正确映射到
private String[] staticLocations = RESOURCE_LOCATIONS;
staticLocations的值啦,逗号分组会按照数组格式解析。
ps:关于缓存时间的配置:
也是在配置文件中配置,大家可以自己去试试。