SpringBoot——webjars&静态资源映射规则

我们回忆一下SpringBoot的Web开发过程

1)、创建SpringBoot应用,选中我们需要的模块;

2)、SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来;

3)、自己编写业务代码;

而在自动配置原理中,我们思考:这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?

在此之前,我们大致有过如下的这些了解:

xxxxAutoConfiguration:帮我们给容器中自动配置组件;

xxxxProperties:配置类来封装配置文件的内容;

1、SpringBoot中静态资源的映射规则

这里我们以WebMvcAutoConfiguration为例子,对静态资源的映射部分源码进行简单讲解

首先我们还是在jar包中找到WebMvcAutoConfiguration

SpringBoot——webjars&静态资源映射规则

其中有一个addResourceHandlers方法:

SpringBoot——webjars&静态资源映射规则

在这个方法当中有一个webjars,是以jar包的方式引入静态资源(webjars的官网为http://www.webjars.org/)

SpringBoot——webjars&静态资源映射规则

把对应的依赖添加到pom文件中

SpringBoot——webjars&静态资源映射规则

我们看看引入的依赖具体是什么样子,可以看出是jQuery文件

SpringBoot——webjars&静态资源映射规则

对于SpringBoot对静态资源的映射规则,我们总结出如下四种方法

1、所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;

首先,我们已经知道刚才引入的webjars依赖目录结构长这个样子:

SpringBoot——webjars&静态资源映射规则

按照这样的目录结构,我们可以试着访问localhost:8080/webjars/jquery/3.5.1/jquery.js

界面显示如下,说明依赖引入成功!

SpringBoot——webjars&静态资源映射规则

在访问的时候只需要写webjars下面资源的名称即可。我们可以看到其中也有对缓存时间的设置

SpringBoot——webjars&静态资源映射规则

 

2、"/**" 访问当前项目的任何资源,都去(静态资源的文件夹)找映射

"/**" 是在哪里配置的呢?我们可以具体看看源码:

首先还是在addResourceHandlers方法中,我们可以找到如下源码:

SpringBoot——webjars&静态资源映射规则

再点击getStaticPathPattern();

SpringBoot——webjars&静态资源映射规则

点击staticPathPattern

SpringBoot——webjars&静态资源映射规则

从而发现staticPathPattern = "/**"

另外,一方面可以用webjars配置静态资源,当然我们也可以在源码中看到还有另一种方式:

SpringBoot——webjars&静态资源映射规则

可以看到getStaticLocations()方法,点进去看看:

SpringBoot——webjars&静态资源映射规则

再点staticLocations看看:

SpringBoot——webjars&静态资源映射规则

字符串数组具体内容为:

"classpath:/META-INF/resources/",

"classpath:/resources/", "classpath:/static/", "classpath:/public/"};

当然,还有一个当前项目的根路径,即”/”

 

即如下5个,称为静态资源的文件夹(即只要把静态资源放在这个文件夹下,便可以/**

  • "classpath:/META-INF/resources/",
  • "classpath:/resources/", 这个resource是类路径的根目录
  • "classpath:/static/",
  • "classpath:/public/",
  • ”/”

对应的路径示意图为:

SpringBoot——webjars&静态资源映射规则

localhost:8080/abc,去静态资源文件夹里面找abc

例如我们给static文件夹下放一个js文件:

SpringBoot——webjars&静态资源映射规则

进入浏览器进行访问:

SpringBoot——webjars&静态资源映射规则

 

3、欢迎页; 静态资源文件夹下的所有index.html页面;被"/**"映射;

SpringBoot——webjars&静态资源映射规则

localhost:8080/   找index页面

例如我们新建一个html文件index

SpringBoot——webjars&静态资源映射规则

在浏览器中输入localhost:8080/

SpringBoot——webjars&静态资源映射规则

4、所有的 **/favicon.ico  都是在静态资源文件下找