SpringBoot整合SpringMVC(上)

SpringBoot对静态资源的映射规则

先做 2 个核心铺垫(消除源码和专业术语的困惑)

  1. 核心配置类的作用WebMvcAutoConfiguration是 SpringBoot 的web 场景自动配置类 ,静态资源的映射规则就是这个类里的addResourceHandlers方法定的,我们不用改这个类,只需要按它定的规则来就行;ResourceProperties是管静态资源的小配置(比如缓存、自定义路径),后续想改默认规则时会用到。
  2. classpath 是什么? 不用纠结专业定义,对 SpringBoot(Maven/Gradle)项目来说,classpath:/ 就等价于项目里的 src/main/resources/ 文件夹 ,后续所有说classpath:的路径,你直接往这个文件夹里放文件就行。

映射规则的本质就是 「你在浏览器输什么 URL」→「SpringBoot 去项目的哪个位置找文件」,总共 4 条,按「使用频率」排序。

所有规则都有一个前提:创建 SpringBoot 项目时,必须选中「Spring Web」模块(静态资源映射属于 web 场景,没选的话规则全部失效)。

规则 1:Webjars 规则 ------「以 jar 包方式引入的静态资源」专属访问规则

适用场景 :想引入 jQuery、Vue、Bootstrap 这类前端框架,不想自己下载 js/css 文件,直接用 Maven/Gradle 依赖引入(版本统一管理,适合团队开发)。核心对应关系 :浏览器输入 localhost:8080/webjars/xxx/版本号/资源名 → SpringBoot 去 所有 jar 包的classpath:/META-INF/resources/webjars/ 里找资源。关键webjars是一个专门的网站,把所有前端框架打成了 Mavenjar 包,地址:webjars.org,你只需要复制对应依赖到项目里,不用自己放文件。

规则 2:通用静态资源规则 ------「自己写的 / 下载的静态资源」核心规则(最常用)

适用场景 :自己写的 css、js,下载的图片、视频,自定义的静态页面等,都用这个规则。核心对应关系 :浏览器输入 localhost:8080/任意路径/资源名(即/**) → SpringBoot 按顺序去4 个默认静态文件夹 里找资源,找到就返回,找不到才报 404。4 个默认静态文件夹 (都在src/main/resources/下,随便建一个就行,也可以都建):

复制代码
src/main/resources/META-INF/resources/
src/main/resources/resources/
src/main/resources/static/ 【最推荐用这个,SpringBoot官方默认】
src/main/resources/public/

避坑重点 :访问时不用加文件夹名 !比如把abc.jpg放在static里,直接输localhost:8080/abc.jpg,而不是localhost:8080/static/abc.jpg,SpringBoot 会自动去 4 个文件夹里找。

规则 3:欢迎页规则 ------「项目根路径访问的首页」专属规则

适用场景 :访问项目根路径localhost:8080/时,想自动显示首页(比如官网的首页)。核心对应关系 :浏览器输入 localhost:8080/ → SpringBoot 去4 个默认静态文件夹 里找index.html,找到就显示,找不到报 404。关键 :这个规则是规则 2 的延伸 ,因为/属于/**的范围,SpringBoot 对index.html做了特殊处理,优先匹配。

规则 4:网站小图标(favicon.ico)规则 ------「浏览器标签页的小图标」专属规则

适用场景 :想给项目加一个浏览器标签页的小图标(比如百度的小爪子)。核心对应关系 :浏览器会自动请求 **/favicon.ico(不管你输什么 URL,都会自动找) → SpringBoot 去4 个默认静态文件夹 里找favicon.ico文件,找到就显示,找不到用浏览器默认图标。关键 :文件名必须是favicon.ico,格式也必须是 ico(jpg/png 不行),放在 4 个静态文件夹里即可。

实用扩展:不想用默认规则?自定义静态资源路径(常用需求)

如果觉得 4 个默认文件夹不好用,想把静态资源放在自己命名的文件夹里(比如src/main/resources/my-static/),只需要在配置文件里加一行配置,不用改源码,这就是 SpringBoot 的灵活之处。

  1. 打开src/main/resources/application.properties(默认是空的);

  2. 加一行配置,指定自定义的静态资源文件夹:

    自定义静态资源路径,classpath:/my-static/ 就是src/main/resources/my-static/

    spring.web.resources.static-locations=classpath:/my-static/

  3. src/main/resources/my-static/文件夹,放一个custom.jpg图片;

  4. 重启项目,访问http://localhost:8080/custom.jpg,能看到图片就成功。

注意 :自定义路径后,默认的 4 个文件夹会失效(比如 static 里的文件访问不到了),如果想保留默认文件夹 + 加自定义文件夹,用逗号分隔:

复制代码
# 保留默认4个文件夹 + 加自定义my-static
spring.web.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/
相关推荐
小龙报11 分钟前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
ruleslol23 分钟前
SpringBoot26-@Configuration + @Component
spring boot
自强的小白32 分钟前
重点!起始时间和结束时间与创建时间和修改时间的区别(localdate与LocaldateTIME区别)以及增删改查什么时候设置目前时间(添加和更新员工时)
java
雪的季节43 分钟前
Python 线程同步与异步编程 全解析
java·开发语言
吃饱了得干活1 小时前
缓存与数据库一致性:从理论到实战
java·后端·面试
520拼好饭被践踏1 小时前
JAVA+Agent学习day22
java·开发语言·后端·学习
笨蛋不要掉眼泪1 小时前
Java虚拟机:堆的参数配置
java·开发语言·jvm
霸道流氓气质1 小时前
SpringBoot中使用JasperReports 报表引擎 — 介绍、原理与使用实践
java·spring boot·后端
花生了什么事o1 小时前
DDD 分层架构:六层分层架构
java·架构·ddd
Y3815326621 小时前
3 种 SERP 数据处理方案对比:流式 / 批处理 / 缓存
java·spring·缓存