[特殊字符] 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.htmlresources/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
相关推荐
V搜xhliang02461 天前
AI智能体的数据安全与合规实践
人工智能·学习·数据分析·自动化·ai编程
无敌的牛1 天前
redis学习过程
数据库·redis·学习
旅僧1 天前
Π环境部署(运行 且 无理论讲解)
学习
jushi89991 天前
Lucas Chess R国际象棋、中国象棋、日本将棋、五子棋训练学习工具游戏软件
学习
自传.1 天前
尚硅谷 Vibe Coding|第一章 AI 编程基础理论 学习笔记
笔记·学习·尚硅谷·vibe coding
吃好睡好便好1 天前
改变时间轴的跨度
学习·生活
fox_lht1 天前
15.3.改进我们之前的输入、输出项目
开发语言·后端·学习·rust
chase。1 天前
【学习笔记】SimpleVLA-RL:通过强化学习扩展 VLA 训练
笔记·学习
C语言小火车1 天前
什么时候用智能指针?什么时候用裸指针?
c语言·c++·学习·指针
AOwhisky1 天前
Redis 学习笔记(第一期):概述、安装配置与核心理论
运维·数据库·redis·笔记·学习·云计算