Spring spring

Spring中文网站 > Spring Boot > Spring Boot是否支持静态资源 Spring Boot中静态资源有几个路径
Spring Boot是否支持静态资源 Spring Boot中静态资源有几个路径
发布时间:2026/09/20 16:34:13

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

我们在做Spring Boot项目的时候,放几张图片或者将前端打包好的静态页面丢进去,是不是随便丢个文件夹就能访问?这个问题相信还有不少人没弄明白。有的项目图片放在static目录下访问没问题,换个目录名就直接404了,Spring Boot对静态资源的支持是默认开启的,只是它认的目录是固定的几个,放对地方才能通过路径直接访问到。下面给大家介绍一下Spring Boot是否支持静态资源,Spring Boot中静态资源有几个路径的相关内容。

一、Spring Boot是否支持静态资源

可以肯定的告诉大家Spring Boot是支持静态资源的,而且这个支持是开箱即用的,不用我们去额外写配置,它底层是靠WebMvcAutoConfiguration这个自动配置类来处理静态资源的,只要项目引入了spring-boot-starter-web,这套机制就自动生效了。

静态资源演示
图1:静态资源演示

框架内部注册资源处理器,将指定目录文件映射为可通过URL直接访问的静态资源,浏览器请求过来的时候不会经过Controller,而是直接由资源处理器去对应目录下找文件返回。

通过URL访问静态内容
图2:通过URL访问静态内容

我们很容易搞混的是,静态资源和动态接口走的是两条不同的路,我们在Controller里写的方法处理的是业务请求,返回的是数据或者视图,而静态资源比如CSS、JS、图片、HTML页面,这些文件本身不需要经过业务逻辑处理,直接原样返回给浏览器就行,所以Spring Boot单独给它们开了一条通道,我们不用特地为了一张图片专门写个Controller方法。

Controller中处理业务请求
图3:Controller中处理业务请求

要注意了,如果Controller请求路径与静态资源访问路径重复,那么Spring Boot会优先匹配Controller,静态资源那边反而访问不到,这种冲突排查起来容易让人很懵,建议我们遇到路径重名的时候尽量避开。

如果我们想自定义静态资源的访问路径或者存放目录,不想用默认的那几个,这时候可以实现WebMvcConfigurer接口,重写addResourceHandlers方法,手动指定URL前缀对应到哪个物理目录就可以了。

自定义存放目录
图4:自定义存放目录

二、Spring Boot中静态资源有几个路径

Spring Boot默认识别的静态资源目录一共有四个,classpath下的static、public、resources,还有META-INF/resources。

Spring Boot默认识别的静态资源目录
图5:Spring Boot默认识别的静态资源目录

这几个目录都得放在src/main/resources下面,项目打包之后会一起进到classpath里,访问的时候不用带目录名,直接从根路径开始写文件相对路径就行,比如static下有个logo.png,访问时写成域名加端口再加/logo.png就能拿到,不用写成/static/logo.png。

在浏览器访问静态资源
图6:在浏览器访问静态资源

这四个目录也不是随便排列的,它们之间是有优先级顺序的,如果几个目录下出现同名文件的时候,Spring Boot会按META-INF/resources优先,其次是resources,再是static,然后才是public,前面优先级高的目录里找到了文件就不会再往后找。这个顺序在日常开发里其实用得不算特别频繁,但如果引入了某些第三方jar包,里面自带了META-INF/resources这样的资源目录,项目自己写的static下同名文件反而会被吃掉,遇到静态资源加载异常,就需要核查该优先级规则。

测试同名文件
图7:测试同名文件

实际项目里用得更多的还是static这一个,前端打包好的dist目录整个丢进static里,基本就能跑起来,public和resources其实用得少一些,至于META-INF/resources,一般是给做成jar包的公共组件用的,方便这些组件自带一些静态页面或者资源文件,打包进主项目之后照样能被访问到。

以上就是Spring Boot是否支持静态资源,Spring Boot中静态资源有几个路径的全部内容了。Spring Boot默认就支持静态资源访问,底层靠的是WebMvcAutoConfiguration自动注册的资源处理器,不用我们手写配置就能直接把文件通过URL暴露出去,遇到路径冲突或者想自定义目录,再用WebMvcConfigurer去调整。默认能放的位置就是static、public、resources和META-INF/resources这几个classpath下的目录,彼此之间还有优先级先后之分。

180 1563 6924