一、默认提供的静态资源位置
在使用IntelliJ IDEA中的Spring Boot初始化工具创建的Spring Boot项目中,默认存在resources/static目录用于存放静态资源。而在Spring Boot项目中,默认一共有5个位置用于放静态资源,默认的五个路径如下:
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public/
- /
其中第五个的/表示在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了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/44377.html