/css/style.css 在 jsp 中会 404,因浏览器忽略 context path,将 / 解析为服务器根路径;须用 ${pagecontext.request.contextpath}/css/style.css 动态拼接。

直接写 /css/style.css 在 JSP 中大概率 404,因为浏览器会忽略应用的 context path(比如部署在 /myapp 下),硬解析成服务器根路径 http://localhost:8080/css/style.css。必须动态拼接上下文前缀。
为什么 /css/style.css 在 JSP 里会 404
浏览器解析路径时完全不感知 Tomcat 的 context path。哪怕你的页面地址是 http://localhost:8080/myapp/login.jsp,href="/css/style.css" 仍会被请求为 http://localhost:8080/css/style.css——漏掉 /myapp,自然返回 404。
- 这是纯前端行为,和 JSP 编译无关
- 路径是否以
/开头,决定了它是相对于服务器根还是当前 URL 路径解析 - WEB-INF 目录下的资源默认不可访问,CSS 必须放在
webapp/css/或等效静态资源目录下
${pageContext.request.contextPath} 是最稳妥的写法
它无需额外依赖、JSP 2.0+ 原生支持、可嵌入变量、语义清晰。相比 <url></url> 更轻量,也更少出错。
- 正确用法:
<link rel="stylesheet" href="%24%7BpageContext.request.contextPath%7D/css/main.css"> - 支持动态主题:
<link rel="stylesheet" href="%24%7BpageContext.request.contextPath%7D/css/%24%7Btheme%7D.css"> - 不能写成
${pageContext.request.contextPath}css/main.css(漏掉斜杠) - 若使用
,注意要确保页面编码为 UTF-8,否则中文路径可能乱码
<url></url> 的使用限制和常见错误
<url></url> 是 JSTL 标签,不是 JSP 内置能力,用错就静默失败或报错,且功能比表面看起来更受限。
- 必须以斜杠开头:
<url value="/css/main.css"></url>✅;<url value="css/main.css"></url>❌(变成相对路径) - 不处理
..:<url value="../css/main.css"></url>会原样输出,毫无意义 - 需提前声明 taglib:
- Spring Boot 项目默认不带 JSTL,得手动加
jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api和org.glassfish.web:jakarta.servlet.jsp.jstl
CSS 文件内部的 url() 引用与 JSP 路径无关
无论你用 ${pageContext.request.contextPath} 还是 <url></url> 引入 CSS,CSS 文件里写的 background: url(images/bg.png) 都是以该 CSS 文件自身位置为基准解析的——不是相对于 JSP 页面,也不是相对于 context path。
- 如果
main.css在/css/main.css,那url(images/bg.png)就找/css/images/bg.png - 想让它指向
/images/bg.png,就得写成url(/images/bg.png)(注意开头的/) - 这个细节常被忽略,导致背景图、字体、图标全挂,但错误日志里根本看不到蛛丝马迹
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











