[特殊字符] Spring Boot 静态资源默认映射规则详解

📌 Spring Boot 静态资源默认映射规则详解

这张图展示了 Spring Boot 静态资源的默认查找路径与优先级规则,是 Spring Boot 项目中静态资源(HTML、CSS、JS、图片等)访问的核心机制。


一、默认静态资源路径(按优先级从高到低)

Spring Boot 会按以下顺序依次查找静态资源,优先级从 (1) 到 (4) 依次递减:

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

对应项目实际目录

这些路径对应 src/main/resources 下的子目录:

表格

配置路径 项目实际目录 说明
classpath:/META-INF/resources/ src/main/resources/META-INF/resources/ 优先级最高,通常用于第三方 Jar 包内置的静态资源
classpath:/resources/ src/main/resources/resources/ 优先级次高,可用于存放自定义静态资源
classpath:/static/ src/main/resources/static/ 最常用的默认目录,项目前端资源默认放这里
classpath:/public/ src/main/resources/public/ 优先级最低,需手动创建目录

二、核心规则说明

  1. 优先级生效逻辑 :当多个目录中存在同名文件 时,Spring Boot 会优先返回优先级更高目录 中的文件。例如:static/index.html 和 resources/index.html 同时存在时,会返回 resources/index.html。

  2. 访问方式 :所有目录下的静态资源,都可以直接通过根路径访问,无需写目录名。比如:static/js/main.js → 访问路径为 http://localhost:8080/js/main.js

  3. 默认配置来源 :该规则对应 Spring Boot 自动配置的 spring.resources.static-locations 属性,默认值为:

    properties

    复制代码
    spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

三、常见使用场景与最佳实践

1. 常规项目

  • 直接使用 classpath:/static/ 作为前端资源目录,符合 Spring Boot 约定,无需额外配置。
  • 示例:src/main/resources/static/index.html → 访问 http://localhost:8080/index.html

2. 自定义静态资源路径

如果需要修改默认路径,可在 application.properties/application.yml 中配置:

properties

复制代码
# 自定义静态资源路径(覆盖默认规则)
spring.resources.static-locations=classpath:/custom/,file:/D:/static-files/

3. 第三方 Jar 包资源

META-INF/resources/ 常用于第三方依赖(如 Spring Boot Starter)内置的静态资源,优先级最高可确保其优先加载。


四、避坑提示

  • ❌ 不要在多个目录下放同名文件,容易引发资源覆盖问题,排查困难。
  • ✅ 统一将项目静态资源放在 static/ 目录,保持结构清晰。
  • ✅ 如需自定义路径,优先通过配置文件修改,而非手动调整目录结构。

3. 最关键的坑(90% 的人都错在这里)

❌ 错误放法:

plaintext

复制代码
src/main/resources/index.html

这样访问不到!404!

✅ 正确放法:

plaintext

复制代码
src/main/resources/static/index.html
相关推荐
辣知15 小时前
辣知·化智93 被历史尘封的鬻子
学习
每天题库16 小时前
西藏安全员 A 证备考真题题库 强化重点知识刷题提升通过率
学习·安全·考试·题库·考证
Be for thing16 小时前
PyTorch基础|Tensor张量详解,张量创建、数据类型与常用操作
pytorch·学习·1024程序员节
前进的李工17 小时前
Agent 学习笔记 02:Harness 与工作流怎么理解
笔记·学习·agent·工作流·harness
m4Rk_17 小时前
【论文阅读】Agent记忆机制(114):MemoryTax——当 Agent 能自主搜索历史,专门的记忆系统还划算吗?
论文阅读·人工智能·学习·开源·github
程序员梅雨20 小时前
【从零开始学习数据仓库 | 第一篇】:维度建模理论
大数据·数据仓库·学习·阿里云·数据分析
keyipatience20 小时前
Git学习(4)Git分布式优势与实战配置全解析
git·学习
comyccccc1 天前
STM32F407VET6核心板的部分电路绘制学习笔记
笔记·stm32·学习
叼烟扛炮1 天前
Linux 学习笔记(三十六):并发进阶——读写锁 vs 自旋锁,到底怎么选?
linux·运维·服务器·笔记·学习
是隼人1 天前
buuctf-pwn [极客大挑战 2019]Not Bad(orw+jmp)题解(学习过程持续更新)
学习·安全·pwn入门·ctf入门