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

    科技2022-08-01  107

    我们回忆一下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  都是在静态资源文件下找

     

    Processed: 0.018, SQL: 8