我有一些 JavaScript 对相对 url 进行 Ajax 调用(使用 jQuery)。
var servletUrl = "someservlet";
$.ajax({
type: "POST",
url: servletUrl,
success: function(response) {
// ...
}
});
Where "someservlet"
is:
@WebServlet("/someservlet")
public class SomeServlet extends HttpServlet
我在多个页面中使用相同的脚本。当从 servlet 上下文根中的页面使用时,相对 url 会相对于 servlet 上下文根进行解析,这是正确的。当从子文件夹中的页面使用时,URL 会相对于子文件夹进行解析,这将返回 404 错误。
我希望能够重用此 JavaScript,而不必根据它所使用的页面类型对其进行修改。理想情况下,我需要相当于 JSTL 的<c:url>
标签。 JavaScript 中是否有任何内容允许我创建相对于 servlet 上下文根的 URL?
几种选择:
-
设置 HTML<base>
具有该值的元素(注意:有自己的的优点和缺点 https://stackoverflow.com/questions/1889076/is-it-recommended-to-use-the-base-html-tag)
<head>
<base href="${pageContext.request.contextPath}/" />
...
</head>
然后在JS中:
var contextPath = $("base").attr("href");
var servletUrl = contextPath + "someservlet";
// ...
-
Or在某处设置数据属性
<html data-contextPath="${pageContext.request.contextPath}/">
...
</html>
然后在JS中:
var contextPath = $("html").data("contextPath");
var servletUrl = contextPath + "someservlet";
// ...
-
Or设置一个具有该值的全局 JS 变量(不好的做法):
<head>
...
<script>var contextPath = "${pageContext.request.contextPath}/";</script>
</head>
然后在JS中:
var servletUrl = contextPath + "someservlet";
// ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)