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:/
相关推荐
晒太羊的猫8 分钟前
hot100子串
java·算法·leetcode
开开心心就好31 分钟前
本地文件搜索工具,双击Ctrl就能呼出搜索
java·服务器·前端·支持向量机·ffmpeg·音视频·模拟退火算法
独隅36 分钟前
Claude 高效使用指南深度评测
java·开发语言·claude·claude code
ByteCoder.43 分钟前
班前十分钟的清单,按体检引导单来写
java·服务器·前端·助播虾
海的透彻1 小时前
如何让docker容器启动时用自定义的用户
java·docker·dubbo
疯狂学习GIS1 小时前
将谷歌地球引擎账号升级为Contributor与Partner层级的方法
java·数据库·人工智能
GG.WinGel1 小时前
质数数目(蓝桥杯练习题)
java·数据结构·算法·青少年编程·蓝桥杯
泡泡糖的中文规格书1 小时前
HDLbits 2.2 学习笔记 · 多路复用器
java·开发语言
John_Hui1 小时前
第 3 篇:配置 JDK 17 环境
java·开发语言·ubuntu
秋天的怀念_David1 小时前
算法一千零一夜 · 第十七夜 长街点灯
java·程序人生·算法