我有一些JavaScript,使用jQuery对一个相对url进行Ajax调用。
var servletUrl = "someservlet";
$.ajax({
type: "POST",
url: servletUrl,
success: function(response) {
// ...
}
});
其中 "someservlet"
是。
@WebServlet("/someservlet")
public class SomeServlet extends HttpServlet
我在多个页面中使用同一个脚本 当从一个处于servlet上下文根目录的页面中使用时,则相对url解析为相对于servlet上下文根目录,这是对的,但当从一个处于子文件夹的页面中使用时,url解析为相对于子文件夹,这将返回404错误。当从子文件夹中的页面使用时,URL相对于子文件夹解析,这将返回404错误。
我希望能够重用这个JavaScript,而不需要根据使用它的页面类型来修改它。理想情况下,我需要相当于JSTL的 <c:url>
标签。在JavaScript中有没有什么东西可以让我创建相对于servlet上下文根的URL?
几个选项。
设置一个HTML <base>
的元素(注:有自己的 利弊)
<head>
<base href="${pageContext.request.contextPath}/" />
...
</head>
然后在JS中。
var contextPath = $("base").attr("href");
var servletUrl = contextPath + "someservlet";
// ...
或者 设置数据属性
<html data-contextPath="${pageContext.request.contextPath}/">
...
</html>
然后在JS中。
var contextPath = $("html").data("contextPath");
var servletUrl = contextPath + "someservlet";
// ...
或者 用该值设置一个全局JS变量(做法欠妥)。
<head>
...
<script>var contextPath = "${pageContext.request.contextPath}/";</script>
</head>
然后在JS中:
var servletUrl = contextPath + "someservlet";
// ...