📌 Spring Boot 静态资源默认映射规则详解
这张图展示了 Spring Boot 静态资源的默认查找路径与优先级规则,是 Spring Boot 项目中静态资源(HTML、CSS、JS、图片等)访问的核心机制。
一、默认静态资源路径(按优先级从高到低)
Spring Boot 会按以下顺序依次查找静态资源,优先级从 (1) 到 (4) 依次递减:
classpath:/META-INF/resources/classpath:/resources/classpath:/static/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/ |
优先级最低,需手动创建目录 |
二、核心规则说明
-
优先级生效逻辑 :当多个目录中存在同名文件 时,Spring Boot 会优先返回优先级更高目录 中的文件。例如:
static/index.html和resources/index.html同时存在时,会返回resources/index.html。 -
访问方式 :所有目录下的静态资源,都可以直接通过根路径访问,无需写目录名。比如:
static/js/main.js→ 访问路径为http://localhost:8080/js/main.js -
默认配置来源 :该规则对应 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