css文件必须放在src/main/resources/static/下才能被直接访问,因spring boot仅默认从classpath:/static等四个路径加载静态资源,且仅/static支持目录结构与url路径1:1映射;thymeleaf中须用@{/css/style.css}引入,不可用相对路径或/static前缀。

CSS 文件必须放在 src/main/resources/static/ 下才能被访问
Spring Boot 默认只从 classpath 的四个路径加载静态资源:classpath:/static、classpath:/public、classpath:/resources、classpath:/META-INF/resources。但只有 /static 支持「目录结构与 URL 路径 1:1 映射」——也就是说:
-
src/main/resources/static/css/style.css→ 可通过/css/style.css访问 -
src/main/resources/static/js/app.js→ 可通过/js/app.js访问 - 放错位置(比如
src/main/resources/css/或src/main/java/)必然 404 - 用 Maven 构建时,确保
process-resources阶段执行成功,否则target/classes/static/里没内容
Thymeleaf 模板中必须用 @{/css/style.css},不能写相对路径
在 Thymeleaf 中写 <link href="css/style.css"> 看似简洁,但一旦页面 URL 是 /user/list,浏览器会尝试加载 /user/css/style.css,直接 404。
- 正确写法:
<link th:href="@{/css/style.css}" rel="stylesheet"> -
@{}会自动补全上下文路径(如部署在/myapp下,生成的是/myapp/css/style.css) - 路径必须以
/开头,表示从应用根路径起始,不是当前页面路径 - 绝对不要写成
@{/static/css/style.css}——static是源码目录名,不是 URL 前缀
为什么改了 CSS 却看不到效果?大概率是缓存或 IDE 同步问题
这不是配置错误,而是开发环境干扰最常见的情况:
- 浏览器强缓存:按
Ctrl+Shift+R(Windows/Linux)或Cmd+Shift+R(macOS)硬刷新;或打开 DevTools → Network → 勾选Disable cache - IDEA 没自动复制新文件到
target/classes/static/:手动执行Build → Rebuild Project,或检查是否启用Build project automatically -
spring-boot-devtools未生效:确认pom.xml中已声明依赖,且未配置spring.devtools.restart.exclude=static/** - 自定义了
spring.web.resources.static-locations却忘了移除默认值:该配置会完全覆盖默认四个路径,除非你明确需要,否则别动它
加了 @EnableWebMvc 或自定义 WebMvcConfigurer 就会失效
这是最隐蔽也最致命的配置陷阱。只要项目中出现以下任一情况,Spring Boot 的默认静态资源映射就会被彻底关闭:
- 类上加了
@EnableWebMvc注解(哪怕只是临时加来试个拦截器) - 自定义了
WebMvcConfigurer实现类,但addResourceHandlers方法里没调用super.addResourceHandlers(registry) - 重写了
WebMvcConfigurationSupport,却没手动注册默认的四个静态资源路径
这类问题不会报错,但所有 /css/、/js/ 请求全部 404,排查时优先 grep 项目代码里的 @EnableWebMvc 和 extends WebMvcConfigurationSupport。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











