一尘不染

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

jsp

使用基于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.尝试通过检查document.URL或BASE标签在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查询)。


阅读 238

收藏
2020-06-08

共1个答案

一尘不染

根据评论中的讨论(尤其是来自BalusC),可能不应该做比这更复杂的事情:

<script>var ctx = "${pageContext.request.contextPath}"</script>
2020-06-08