Spring Boot 默认提供了 四个类路径(classpath)下的静态资源目录,用于存放如 HTML、CSS、JavaScript、图片等静态文件。
这些目录在应用启动时会自动被扫描,并映射到 Web 应用的根路径(/**),即你可以通过 http://localhost:8080/资源名 直接访问。
默认静态资源目录(按优先级从高到低):
classpath:/META-INF/resources/- 通常用于第三方 JAR 包中的静态资源(例如 WebJars)。
- 示例:
src/main/resources/META-INF/resources/logo.png
classpath:/resources/- 对应项目中的
src/main/resources/resources/。 - 适合放置不想放在
static或public中的资源。
- 对应项目中的
classpath:/static/- 最常用、官方推荐的默认静态资源目录。
- 对应
src/main/resources/static/。 - 示例:
src/main/resources/static/css/style.css→ 访问路径:/css/style.css
classpath:/public/- 通用公共静态资源目录。
- 对应
src/main/resources/public/。
✅ 注意:如果多个目录中存在同名文件,Spring Boot 会按照上述优先级顺序返回第一个找到的文件(即
/META-INF/resources/优先级最高)。
补充说明:
- 欢迎页支持:只要任意一个默认目录下有
index.html,访问http://localhost:8080/就会自动返回该页面。 - favicon 支持:自动查找
favicon.ico文件作为网站图标。 - 控制器优先:如果某个 URL 被
@Controller或@RestController映射了,即使静态资源目录中有同名文件,也会优先执行控制器逻辑。 - 传统 WAR 结构(仅在打包为 WAR 且部署到 Servlet 容器时有效):
file:./src/main/webapp/也会被识别为静态资源目录(但不属于 classpath,默认优先级最低)。
配置源码依据(来自 Spring Boot 源码)
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
};
该数组定义在 ResourceProperties 类中,是 Spring Boot 自动配置静态资源的基础。
如需自定义静态资源位置或访问路径,可通过以下方式:
- 配置文件:
spring.web.resources.static-locations - Java 配置:实现
WebMvcConfigurer并重写addResourceHandlers()方法。