[特殊字符] 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
相关推荐
世人万千丶1 天前
Flutter 框架跨平台鸿蒙开发 - 恐惧清单应用
学习·flutter·华为·开源·harmonyos·鸿蒙
yuzhuanhei1 天前
Visual Studio 配置C++opencv
c++·学习·visual studio
此刻觐神1 天前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习
憧憬从前1 天前
算法学习记录DAY2
学习
babe小鑫1 天前
会计岗位学习数据分析的价值分析
学习·数据挖掘·数据分析
千枫s1 天前
电脑vm虚拟机kali linux安装shannon
学习·网络安全
zjnlswd1 天前
tkinter学习案例--笔记代码
笔记·学习
咬_咬1 天前
go语言学习(基本数据类型)
开发语言·学习·golang·数据类型
山甫aa1 天前
List 容器 -----C++的stl学习
开发语言·c++·学习
无聊大侠hello world1 天前
Yu-AI-Agent 项目(AI 恋爱大师智能体) · 学习笔记
人工智能·笔记·学习