首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何以正确的方式从JavaScript获取contextPath?

如何以正确的方式从JavaScript获取contextPath?
EN

Stack Overflow用户
提问于 2011-07-08 02:56:10
回答 6查看 150.6K关注 0票数 65

使用基于Java的后端(即servlet和JSP),如果我需要来自JavaScript的contextPath,推荐的模式是什么,为什么?我能想到几种可能性。我错过了什么吗?

1.将脚本标记烧录到在某个JavaScript变量中设置它的页面中

<script>var ctx = "<%=request.getContextPath()%>"</script>

这是准确的,但在加载页面时需要执行脚本。

2.在一些隐藏的DOM元素中设置contextPath

<span id="ctx" style="display:none;"><%=request.getContextPath()%></span>

这是准确的,并且在加载页面时不需要执行任何脚本。但是,当需要访问contextPath时,确实需要DOM查询。如果您非常关心性能,那么可以缓存DOM查询的结果。

3.通过检查 JavaScript 或基本标记,尝试在中找出它

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查询)。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-07-23 04:33:51

根据评论中的讨论(特别是来自BalusC的),可能不值得做比这更复杂的事情:

<script>var ctx = "${pageContext.request.contextPath}"</script>
票数 67
EN

Stack Overflow用户

发布于 2014-05-22 03:43:33

明白了:D

function getContextPath() {
   return window.location.pathname.substring(0, window.location.pathname.indexOf("/",2));
}
alert(getContextPath());

重要提示:只适用于“根”上下文路径。不适用于“子文件夹”,或者上下文路径中包含斜杠("/")。

票数 43
EN

Stack Overflow用户

发布于 2011-07-23 04:02:33

我认为你可以通过将数字1与调用数字3中的函数相结合来实现你想要的。

你不想在页面加载时执行脚本,而更愿意在以后调用函数?好的,只需创建一个函数,该函数返回您将在变量中设置的值:

function getContextPath() {
   return "<%=request.getContextPath()%>";
}

它是一个函数,所以在您实际调用它之前不会执行它,但它直接返回值,而不需要遍历DOM或修改URL。

在这一点上我同意@BalusC使用EL:

function getContextPath() {
   return "${pageContext.request.contextPath}";
}

或者根据JSP回退到JSTL的版本:

function getContextPath() {
   return "<c:out value="${pageContext.request.contextPath}" />";
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6615641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档