一、webjars方式映射静态资源文件

我们之前使用Maven构建一个Web项目时,在main目录下会存在一个webapp的目录,我们以前都是将所有的页面或静态资源导在这个目录下,但现在使用SpringBoot项目我们应该将静态资源文件放在哪里呢?

SpringBoot默认的打包方式是jar(Java归档),那么这种方式SpringBoot能不能来给我们写页面呢?当然是可以的,但是SpringBoot对于静态资源放置的位置,是有规定的

我们先来看一下这个静态资源映射规则,SpringBoot中,SpringMVC的web配置都在org.springframework.boot.autoconfigure.web.servlet包下的WebMvcAutoConfiguration 这个配置里面,我们找到addResourceHandlers这个方法,该方法用于处理webjars方式的静态资源映射

Spring Boot静态资源映射缓存 关闭 springboot设置静态资源映射_jar


阅读一下源码,所有的 /webjars/** , 都需要去 classpath:/META-INF/resources/webjars/ 找对应的资源,那什么是webjars呢?webjars本质就是以jar包的方式引入我们的静态资源 , 我们以前要导入一个静态资源文件,直接导入即可。使用SpringBoot可以使用webjars,官网:https://www.webjars.org/,比如要使用jQuery,只需要导入jQuery对应版本的pom依赖即可

Spring Boot静态资源映射缓存 关闭 springboot设置静态资源映射_jar_02


例如,我们现在在pom文件中引入了依赖

Spring Boot静态资源映射缓存 关闭 springboot设置静态资源映射_版本号_03


启动项目,访问一下http://localhost:8080/webjars/jquery/3.4.1/jquery.js,可以看到已经引入成功

Spring Boot静态资源映射缓存 关闭 springboot设置静态资源映射_版本号_04

二、默认资源映射

/** , 访问当前的项目任意资源,它会去找 resourceProperties 这个类,我们可以点进去看一下:

Spring Boot静态资源映射缓存 关闭 springboot设置静态资源映射_静态资源_05


resourceProperties 设置了和我们静态资源有关的参数,this.staticLocations = CLASSPATH_RESOURCE_LOCATIONS; 这里面指向了它会去寻找资源的文件夹;即上面数组的内容,四种形式:

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

四种形式的优先级:META/resources > resources > static > public

再向下看一个方法;它还会在根路径下去寻找资源

Spring Boot静态资源映射缓存 关闭 springboot设置静态资源映射_静态资源_06

"/" :当前项目的根目录

我们可以在对应的目录下创建对应的文件夹来存放我们的静态资源文件,这里不做展示了

另外,我们再来看一下迎页的映射,也就是我们的首页

Spring Boot静态资源映射缓存 关闭 springboot设置静态资源映射_静态资源_07


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

比如我访问 localhost:8080/ ,就会找静态资源文件夹下的 index.html

三、两种方式的选择

  • 我们使用第三方的库时,建议使用webjars的方式,通过动态版本号(webjars-locator 的方式)来使用(因为第三方库在项目开发中变动频率很小,即便是变动也是版本号的修改)
    版本号(webjars-locator 的方式)来使用(因为第三方库在项目开发中变动频率很小,即便是变动也是版本号的修改)
  • 项目素材文件建议放到 classpath:/static (或其他)目录中,打包在项目中,通过CMS维护的一些图片和资源,我们使用配置引用到具体的磁盘绝对路径来使用