你如何从JavaScript获得contextPath?正确的方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

使用基于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));
};

这在加载页面时不需要执行任何脚本,并且如果需要,还可以缓存结果。但是,只有当你知道你的上下文路径是一个单一的目录时 - 这与根目录(/)或多个目录的down(/mypath/iscomplicated/)不同。

我倾向于哪种方式

我喜欢隐藏的DOM元素,因为它不需要在页面加载时执行JavaScript代码。只有当我需要contextPath时,我是否需要执行任何操作(在这种情况下,请运行DOM查询)。

提问于
用户回答回答于

可能不值得做任何比这更复杂的事情:

<script>var ctx = "${pageContext.request.contextPath}"</script>
用户回答回答于

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

重要说明:仅适用于“root”上下文路径。不适用于“subfolders”,或者上下文路径中有斜线(“/”)。

扫码关注云+社区