直接写 /css/style.css 在 JSP 中可能失效,因为硬编码路径会忽略应用上下文路径(如 /myapp),导致浏览器请求 http://.../css/style.css 而非 http://.../myapp/css/style.css,引发 404;应使用 ${c:url('/css/style.css')} 自动拼接 context path。

为什么直接写 /css/style.css 在 JSP 里可能失效
因为 JSP 页面常部署在带上下文路径(context path)的 Web 应用中,比如应用部署为 /myapp,而浏览器请求的是 http://localhost:8080/myapp/page.jsp。此时硬编码 /css/style.css 会被解析成 http://localhost:8080/css/style.css——漏掉了 /myapp,404 就不可避免。
用 生成带 context path 的绝对路径
是 JSTL 标准标签库里的路径解析工具,它会自动拼上前缀 request.getContextPath(),确保资源路径与当前应用部署位置对齐。
使用前确认已引入 JSTL:
然后在 中写:
<link rel="stylesheet" href="%24%7Bc:url('/css/style.css')%7D">
注意: 标签本身不支持自闭合写法,但 EL 表达式 ${c:url(...)} 更简洁且等效;路径必须以 / 开头(表示相对于 context root)。
- ✅ 正确:
${c:url('/css/style.css')}→ 解析为/myapp/css/style.css - ❌ 错误:
${c:url('css/style.css')}→ 不加斜杠会相对当前 URL 路径,极不可靠 - ❌ 错误:
${c:url('../css/style.css')}→不处理相对路径向上跳转
替代方案对比:request.getContextPath() vs
有人会写 ,也能工作,但有明显短板:
-
支持 URL 编码(如路径含空格或中文时自动转义),contextPath拼接不会 -
可嵌套参数(如配合),适合动态资源路径 - 多个资源引用时,
更统一、可读性略高,尤其团队协作时减少风格分歧
常见错误现象和调试技巧
如果样式仍不生效,先检查浏览器开发者工具 Network 面板里 CSS 请求是否返回 404,并看实际请求地址是什么:
- 请求地址是
http://.../css/xxx.css→ 说明没走 context path,确认用了/开头 +或 EL 写法 - 请求地址是
http://.../myapp/myapp/css/xxx.css→ 说明 context path 被重复拼了两次,检查是否在外又手动加了${pageContext.request.contextPath} - 请求返回 404 但路径看起来正确 → 真实文件路径可能不对,确认
webapp/css/style.css(不是src/main/webapp下其他目录)
真正容易被忽略的是:JSP 容器(如 Tomcat)默认不处理 .css 文件的 EL 表达式,所以不要试图在 CSS 文件里写 ${...} —— 那是服务端模板,CSS 是静态资源,得靠 HTML 层正确引入。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











