7、SpringBoot静态资源访问
要了解的是springboot打包是以jar包的形式打包运行的、那静态资源(css、js…)这些资源放在什么地方
盲猜这个地方
我们可以打开web的自动装配来看一下自动装配的资源路径访问地址在什么地方
在WebMvcAutoConfiguration
类中的一个内部类WebMvcAutoConfigurationAdapter
类中的addResourceHandlers
方法:字面意思添加资源处理器
可以分为三个部分、来说
**第一部分:**在yml中配置isAddMappings
属性的值为false、表示默认处理器被禁用
第二部分和第三部分是资源放入的地方
第二部分
7.1、webjars的使用
什么是webjars、简单来说就是将资源打包成jar包、如何导入maven项目管理、由maven管理着、
进入官网可以看出有一个maven的选项、我们选择这个就会看下对应的pom依赖坐标
假如我们使用jquery
<dependency>
<groupId>org.webjars.bower</groupId>
<artifactId>jquery</artifactId>
<version>3.5.1</version>
</dependency>
将这个导入到项目中、我们找到他的位置
现在来看第二部分
第二部分主要的作用就是网址访问http://localhost:8080/webjars/xxxxx
不管后面是什么请求、都会去找到classpath:/META-INF/resources/webjars/
下的资源、如果文件下有这个资源将其资源显示、没有资源将其到错误页面。
访问一下刚刚导入的jquery.js文件
可以看出可以访问到、
为什么能访问到?
因为项目中可以找到这个地方、这个地方有资源
因此我们在html中可以这样引入静态资源
<link th:href="@{/webjars/jquery/3.5.1/dist/jquery.js}" rel="stylesheet"></link>
第三部分
7.2、SpringBoot默认静态资源位置
看这个第三部分、发现第三部分的操作和第二部分操作是一样的、只是参数不一样
值说明
staticPathPattern = /**
this.resourceProperties.getStaticLocations() = "classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/"
解释:
-
那第二部分做比较就是我们访问
http://localhost:8080/webjars/**
他会去classpath:/META-INF/resources/webjars/
这些文件目录下去寻找请求对应的正确资源 -
那么第三部分就是
http://localhost:8080/**
不管什么请求、他会去"classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/"
这些文件目录下去寻找请求对应的正确资源
问题:
- 这些是什么地方的文件
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
我们项目中的resources下、这四个地方寻找资源、
访问localhost:8080/a.js
可以得到a.js中的内容、这4的地方我们都有一个a.js怎么办???
测试过后
如:从高到低
META-INF/resources > resources > static > public
总结:在SpringBoot中、有两种资源存放路径方式、webjars、和SpringBoot默认的资源存放路径、webjars可以不使用、我们使用SPringBoot默认的资源存放地址resources
文件下存放静态资源