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:/
相关推荐
市场部需要一个软件开发岗位14 小时前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
历程里程碑14 小时前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
程序员泠零澪回家种桔子14 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
CodeCaptain14 小时前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
Anastasiozzzz15 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人15 小时前
通过脚本推送Docker镜像
java·docker·容器
韩立学长15 小时前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
铁蛋AI编程实战15 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘16 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays101116 小时前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列