不推荐在jsp中使用标签,因其强制全局修改相对url解析、与context path不兼容、导致css内部url()路径失效且难以适配多环境;应优先使用${pagecontext.request.contextpath}动态生成资源路径。

直接用 <base> 标签在 JSP 里统一路径基准,确实能解决部分相对路径混乱问题,但风险远大于收益——它会全局劫持所有相对 URL(包括 <img>、<a></a>、<script></script>),且与上下文路径(context path)不兼容,极易引发二级资源加载失败。
为什么 <base href="/myapp/"> 在多数 JSP 场景下不推荐
很多人看到页面中 CSS 路径错乱,第一反应是加 <base> 统一基准。但实际效果常适得其反:
-
<base>的href值必须是**绝对 URL**(如http://localhost:8080/myapp/),不能只写/myapp/—— 否则浏览器会按协议+域名补全,导致跨域或协议错误 - 一旦设了
<base>,页面里所有相对路径(比如<img src="logo.png">)都会拼到这个 base 上,而 CSS 文件内部的url(../images/bg.jpg)不受控制,仍以 CSS 文件自身位置为基准,造成“路径套娃”失效 - 开发环境(
http://localhost:8080/)和生产环境(https://prod.example.com/app-v2/)的 base 值不同,硬编码无法自动适配 - JSP 页面可能被
<include></include>或 Filter 动态嵌入,此时<base>的作用域不可控,容易污染父页面
${pageContext.request.contextPath} 是更安全的替代方案
它只影响你明确写出的资源路径,不干扰 HTML 其他行为,且天然适配 WAR 部署路径:
基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
- 写法简单:
<link rel="stylesheet" href="%24%7BpageContext.request.contextPath%7D/css/style.css"> - 自动处理空 context path:应用部署在根路径(
/)时,表达式返回空字符串,结果是/css/style.css,完全合法 - 支持嵌套动态路径:比如
href="${pageContext.request.contextPath}/css/${theme}.css",可配合后端传参切换主题 - 无需额外 taglib 引入,JSP 2.0+ 默认支持 EL 表达式
如果非要用 <base>,必须满足这三个条件
极少数场景(如纯静态前端嵌入 JSP 模板、且所有资源都由同一 CDN 托管)才考虑启用,且必须:
- 确保
<base>的href包含协议、域名、端口和完整 context path,例如:<base href="https://cdn.example.com/myapp/"> - 所有静态资源(CSS、JS、图片、字体)的路径都改为相对于该 base 的**纯相对路径**,且 CSS 内部不再使用
url()引用其他资源(或全部改用绝对 URL) - 在
最顶部声明,且整个页面只出现一次;避免被子模板重复插入
真正容易被忽略的点是:CSS 文件里的 url() 路径永远以 CSS 文件自身位置为基准,跟 JSP 页面的 <base> 完全无关。这意味着即使你在 JSP 里设了 base,CSS 里写的 background: url(images/icon.png) 还是会从 /css/images/icon.png 加载——这个逻辑不会因为 JSP 的 base 改变而改变。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










