使用基于 Java 的后端(即 servlet 和 JSP),如果我需要来自 JavaScript 的 contextPath,建议的模式是什么?为什么?我能想到几种可能性。我还缺什么吗?
1. 将 SCRIPT 标签烧录到页面中,并在某些 JavaScript 变量中设置它
<script>var ctx = "<%=request.getContextPath()%>"</script>
这是准确的,但需要在加载页面时执行脚本。
2. 在某些隐藏的 DOM 元素中设置 contextPath
<span id="ctx" style="display:none;"><%=request.getContextPath()%></span>
这是准确的,并且在加载页面时不需要执行任何脚本。但是当需要访问 contextPath 时,您确实需要 DOM 查询。如果您非常关心性能,则可以缓存 DOM 查询的结果。
3. 尝试通过检查在 JavaScript 中找出答案document.URL
或 BASE 标签
function() {
var base = document.getElementsByTagName('base')[0];
if (base && base.href && (base.href.length > 0)) {
base = base.href;
} else {
base = document.URL;
}
return base.substr(0,
base.indexOf("/", base.indexOf("/", base.indexOf("//") + 2) + 1));
};
这在加载页面时不需要执行任何脚本,并且如果需要,您还可以缓存结果。但这仅在您知道上下文路径是单个目录而不是根目录时才有效(/
)或多个目录下(/mypath/iscomplicated/
).
我倾向哪一边
我更喜欢隐藏的 DOM 元素,因为它不需要在页面加载时执行 JavaScript 代码。只有当我需要 contextPath 时,我才需要执行任何操作(在本例中,运行 DOM 查询)。