css 必须放在 src/main/resources/static/ 下才能被直接访问,因为 spring boot 默认仅将 classpath:/static 等四个路径视为静态资源目录,且仅 /static 支持子目录结构与 url 路径 1:1 映射;thymeleaf 中必须用 @{/css/style.css} 引入,因其自动补全上下文路径并确保根路径解析,避免相对路径导致的 404。

CSS 文件必须放在 src/main/resources/static/ 下才能被直接访问,其他位置(如 resources/ 根目录、templates/)会导致 404;Thymeleaf 模板中必须用 @{/css/style.css},不能写 /static/css/style.css 或相对路径。
为什么 CSS 放在 static/ 目录下才能生效
Spring Boot 默认只从 classpath 的四个位置加载静态资源:classpath:/static、classpath:/public、classpath:/resources、classpath:/META-INF/resources。其中只有 /static 支持「目录结构 1:1 映射为 URL 路径」——也就是说:
-
src/main/resources/static/css/style.css→ 可通过/css/style.css访问 -
src/main/resources/static/images/logo.png→ 可通过/images/logo.png访问 - 而
/public或/resources下的文件虽能访问,但不支持子目录嵌套映射(比如/public/css/下的文件,仍需通过/style.css访问,无法保留/css/前缀)
Thymeleaf 中引入 CSS 的正确写法
在 Thymeleaf 模板里,不能写 <link href="css/style.css">,否则在非根路径页面(如 /user/list)会解析成相对路径 /user/css/style.css,导致 404。
- 必须使用 Thymeleaf 的 URL 表达式:
<link th:href="@{/css/style.css}" rel="stylesheet"> -
@{...}会自动补全上下文路径(例如部署在/myapp下,也会生成/myapp/css/style.css) - 路径必须以
/开头,表示从应用根路径开始,不是当前页面路径 - 绝对不要写成
@{/static/css/style.css}——static是源码目录名,不是 URL 路径的一部分
修改后 CSS 不生效的常见原因
开发时改了 CSS 却看不到效果,大概率不是配置问题,而是缓存干扰:
- 浏览器强缓存:按
Ctrl+Shift+R(Windows/Linux)或Cmd+Shift+R(macOS)硬刷新,或禁用缓存(DevTools → Network → Disable cache) - IDE 缓存:IntelliJ IDEA 有时不会自动复制新 CSS 到
target/classes/static/,可手动执行Build → Rebuild Project - Spring Boot DevTools 不生效:确认
pom.xml中已启用spring-boot-devtools,且未配置spring.devtools.restart.exclude=static/** - 自定义配置覆盖默认路径:检查
application.properties是否误设了spring.web.resources.static-locations,该配置会**完全替换**默认路径,导致原有/static失效
部署到外部路径时的注意事项
生产环境常需将用户上传文件或定制资源放在项目外(如 /data/uploads/),此时必须用 WebMvcConfigurer 手动注册资源处理器:
- 添加配置类,重写
addResourceHandlers,例如映射/uploads/**到file:/data/uploads/ - 若同时想保留默认
/static/映射,需显式调用.addResourceLocations("classpath:/static/"),否则会被覆盖 - 注意 Windows 路径末尾要加
/:file:D:/uploads/,否则启动报错 - Linux/macOS 下路径权限问题易被忽略:确保运行 Spring Boot 的用户对目标目录有读取权限
最易被忽略的是 spring.web.resources.static-locations 配置的覆盖行为——它不是追加,而是彻底替换,默认的四个路径全部失效。哪怕只加了一个自定义路径,也要把原来需要的路径手动列全,否则上线就 404。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











