Spring Boot项目中的静态资源位置详解

一、默认提供的静态资源位置

在使用IntelliJ IDEA中的Spring Boot初始化工具创建的Spring Boot项目中,默认存在resources/static目录用于存放静态资源。而在Spring Boot项目中,默认一共有5个位置用于放静态资源,默认的五个路径如下:

  1. classpath:/META-INF/resources/
  2. classpath:/resources/
  3. classpath:/static/
  4. classpath:/public/
  5. /

其中第五个的/表示在webapp目录(这个目录需要我们手动添加)下。如果一个同名的文件同时放在这五个目录下,访问的优先级是按照上面列出的顺序的,如访问以下项目的hello.js:
在这里插入图片描述
hello.js的内容为

hello 上一级目录名称

浏览器访问,首先访问到的是:/META-INF/resources/路径下的
在这里插入图片描述
需要注意的是请求地址中不需要加上一级路径,如static,这是因为Spring Boot为我们自动提供了静态资源拦截配置。相当于SSM项目中的XML配置中的:

<mvc:resources mapping="/**" location="/static/"/>

可以在Spring Boot提供的WebMvcAutoConfiguration 类中找到静态资源拦截的相关配置方法,内容如下:

在这里插入图片描述
this.mvcProperties.getStaticPathPattern() 方法返回的值相当于SSM配置中的mapping。其对应的值是 “/**”。
可以在WebMvcProperties类中找到其定义的值(选中对应方法,按住ctrl+左击鼠标查找):
在这里插入图片描述
在这里插入图片描述
而this.resourceProperties.getStaticLocations()方法返回的值相当于SSM配置中的
location。其返回了四个位置,分别是:”classpath:/META-INF/resources/“, “classpath:/resources/“,”classpath:/static/“, “classpath:/public/“。
可以在ResourceProperties类中找到其返回的对应的值:
在这里插入图片描述
然后在getResourceLocations方法中,又添加了“/”,表示webapp目录,因此这里返回值一共有5个。
在这里插入图片描述
在这里插入图片描述
这就是为什么Spring Boot项目中有默认提供5个静态资源以及不需要我们访问静态资源时添加完整路径的原因。

二、自定义静态资源位置

当我们不想将静态资源放在系统默认的这五个位置或规定只访问一个目录时,我们可以自定义静态资源位置的路径映射。
例如,我们规定只访问默认提供的static下的静态资源,在application.properties中进行配置。如下:

#定义静态资源位置的路径映射
spring.resources.static-locations=classpath:/static/
#定义请求URL规则("/**"是默认提供的)
spring.mvc.static-path-pattern=/**

启动项目,在浏览器中访问,如下:
在这里插入图片描述
这样就直接访问static路径下的hello.js了。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值