javascript - 如何执行相当于 JSTL 的 c :url in JavaScript?

标签 javascript jquery jsp servlets

我有一些 JavaScript 正在对相对 URL 进行 Ajax 调用(使用 jQuery)。

var servletUrl = "someservlet";

$.ajax({
    type: "POST",
    url: servletUrl,
    success: function(response) {
        // ...
    }
});

在哪里"someservlet"是:

@WebServlet("/someservlet")
public class SomeServlet extends HttpServlet

我在多个页面中使用相同的脚本。当从 servlet 上下文根中的页面使用时,相对 url 将相对于 servlet 上下文根进行解析,这是正确的。当从子文件夹中的页面使用时,URL 会相对于子文件夹进行解析,这将返回 404 错误。

我希望能够重用这个 JavaScript,而不必根据它在其中使用的页面类型对其进行修改。理想情况下,我需要相当于 JSTL 的 <c:url>标签。 JavaScript 中有什么允许我创建相对于 servlet 上下文根的 URL 吗?

最佳答案

几个选项:

  1. 设置一个 HTML <base>具有该值的元素(注意:有自己的 advantages and disadvantages )

    <head>
        <base href="${pageContext.request.contextPath}/" />
        ...
    </head>
    

    然后在 JS 中:

    var contextPath = $("base").attr("href");
    var servletUrl = contextPath + "someservlet";
    // ...
    

  2. 或者在某处设置一个数据属性

    <html data-contextPath="${pageContext.request.contextPath}/">
        ...
    </html>
    

    然后在 JS 中:

    var contextPath = $("html").data("contextPath");
    var servletUrl = contextPath + "someservlet";
    // ...
    

  3. 或者用该值设置一个全局 JS 变量(不好的做法):

    <head>
        ...
        <script>var contextPath = "${pageContext.request.contextPath}/";</script>
    </head>
    

    然后在 JS 中:

    var servletUrl = contextPath + "someservlet";
    // ...
    

关于javascript - 如何执行相当于 JSTL 的 c :url in JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681202/

相关文章:

javascript - Javascript 中的网络流量

javascript - Tablesorter 解析器忽略 div 元素

Javascript(无 JQUERY)切换 Div

javascript - Angular UI 中的 Accordion 式标题图像

javascript - 使用 JQuery/Javascript 向表单动态添加值

java.lang.IllegalStateException : Parameters processing failed error in jboss 7. 1.1

java - JSP 自定义标签库 : Nested Evaluation

JavaScript 字符串排序

jquery - 使用 jquery ajax 请求解析 xml

java - 无法访问 WEB-INF/folder/folder/file.jsp