本次项目所有能够使用的静态资源可以免费进行下载
执着有时是一种错误,放弃有时也是一种美丽。
在架构有很多位置可以放置静态资源可以被访问到,位置不同使它们被访问的优先级顺序也有不同,接下来我们将通过spring boot配置的底层代码进行剖析。
第一个类:WebMvcAutoConfiguration
这个类实现实现的功能有很多,这里就不统一一一进行介绍,只讲解我们需要了解的配置
静态资源配置类
路径一:用户自己设置(在配置文件设置访问静态资源)
如果在配置文件进行了新的配置,那么他就会执行上面的if语句:代码的内容的大体意思就是判断是否能够检测到配置文件中的新的路径配置,如果检测到了,那么就会输出Default resource handling disabled 语句,返回值是一个空值,系统默认就会从新配置路径下进行静态资源的访问。
配置用户访问的路径,创建一个新的文件夹,作为静态资源存放数据的目录,并创建一个js文件看看前端用户能不能访问的到
静态资源目录
在application.yaml配置文件进行静态资源目录进行配置
几行代码则就表明,web静态的资源目录设为classpath路径下的templates,接下来就是访问目录下创建的demo1.html
网页查看该资源,成功输出,表明静态资源目录设置成功。
在没有上面的配置时,访问一个普通文件看能不不能被访问?
在static目录下创建一个网页文件
去网页访问该文档,看看能不能被访问到?
文件正常输出,这是在没有进行上面application.yaml配置文件进行配置时,能够被访问,那如果进行静态资源目录的配置后,该文件还能被访问到吗?答案是否定的
那该目录下的文件能够被访问,那么其他路径下的资源还能被访问到吗?答案是否定的
那么为什么就加了一个配置文件的路径就不能访问了呢?
因为在默认路径它是/**这样的,如果前端用户要去访问,它就会从/目录下开始向下进行寻找,而静态资源原本就在/目录的下面,那么该静态资源自然而然就能够被访问到,但是当我们修改静态目录为其他的文件,那如果用户想要访问的静态资源不在我们设置的静态目录下,那么用户想要访问的静态资源就会查询不到,就会出现上面的页面。
那么默认的静态资源搜索是在哪里呢?
打开类二:WebMvcProperties.java
假设这个类是一个实体类,那么类中的内容都是属性,就是在配置文件application.yaml中进行属性值的注入,默认设置的路径是在/的下面,当然我们也可以进行属性值的注入,去修改用户访问静态资源路径。在配置文件中进行配置。
除了默认的路径还有spring boot项目中默认的几个路径,只要是存在这几个路径下的文档就一定能被用户访问到。
路径在WebProperties.java中配置文件中有设置
就是上面那四个路径,只要在这几个目录下的静态资源都能被访问到,但是有一点要注意到,那就是当几个目录下存在名字和类型都相同的文件时,不通过目录下的资源优先级顺序不同
看看不同路径的静态资源能不能被前端用户访问到?在上面的四个路径下,创建不同的网页文件,看是否能被访问到?
创建资源文件
访问结果:
四个文件都能够被输出,表明四个目录是spring boot能够识别的路径
接下来就是如果四个文件夹下出现相同的静态资源那谁先会被访问呢?
优先级NO.1
优先级NO.2
优先级NO.3
优先级NO.4
优先级顺序为:
META-INF/resources 》resources》static》public
其实呢,访问路径不光只有这几个?还有一个那就是webjars
Webjars本质就是以jar包的方式引入我们的静态资源 , 我们以前要导入一个静态资源文件,直接导入即可。
使用SpringBoot需要使用Webjars,我们可以去搜索一下:网站:https://www.webjars.org
首先导入依赖:以jquery为例
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.6.4</version>
</dependency>
依赖被成功导入,接下来我们要尝试尝试看看能不能访问到webjars中的静态文件,就以jquert.js为例,看看能不能被访问到?
成功被访问,说明这也是一个能够被访问的静态资源目录