7

我有会话密钥,它是我从 REST API 调用中获得的 JavaScript 变量。我需要在 servlet 中调用我的 Java 代码并将该键作为参数传递。我可以使用什么 JavaScript 函数来做到这一点?

4

3 回答 3

15

几种方式:

  1. 用于window.location触发 GET 请求。需要注意的是它是同步的(因此客户端将看到当前页面正在更改)。

    window.location = "http://example.com/servlet?key=" + encodeURIComponent(key);
    

    请注意内置encodeURIComponent()函数在传递请求参数之前对其进行编码的重要性。

  2. 用于form.submit()触发 GET 或 POST 请求。需要注意的是它是同步的。

    document.formname.key.value = key;
    document.formname.submit();
    

    <form name="formname" action="servlet" method="post">
        <input type="hidden" name="key">
    </form>
    

    或者,您也可以只设置现有表单的隐藏字段,然后等待用户提交。

  3. 用于XMLHttpRequest#send()在后台触发异步请求(也称为 Ajax)。下面的示例将调用 servlet"s doGet()

    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://example.com/servlet?key=" + encodeURIComponent(key));
    xhr.send(null);
    

    下面的示例将调用 servlet"s doPost()

    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://example.com/servlet");
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send("key=" + encodeURIComponent(key));
    
  4. 使用jQuery发送一个跨浏览器兼容的 Ajax 请求(上面的xhr代码只在真实的浏览器中工作,为了兼容 MSIE,你需要添加一些杂乱的东西;))。

    $.get("http://example.com/servlet", { "key": key });
    

    $.post("http://example.com/servlet", { "key": key });
    

    请注意,jQuery 本身已经对请求参数进行了透明编码,所以这里不需要encodeURIComponent()

无论哪种方式,key都将request.getParameter("key")在 servlet 中可用。

也可以看看:

于 2010-01-25T12:45:14.457 回答
1

本身没有 JavaScript 函数,但浏览器通常*提供一个XMLHttpRequest对象,你可以通过它

YUIjQuery提供帮助函数来简化其使用。

* 表示“通常”的值,包括几乎所有支持 JavaScript 并且自 Netscape 4 死后发布的浏览器

于 2010-01-25T12:43:07.097 回答
1

发送 POST 时添加头 xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

代码看起来像 客户端:

    function executeRequest(req) {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
               // Typical action to be performed when the document is ready:
               document.getElementById("response").value = xhttp.responseText;
            }
        };
        xhttp.open("POST", "execute/cardbrowser", true);
        xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhttp.send("lorem=ipsum&name=binny");
    }

服务器:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println(req.getParameter("lorem"));
}
于 2017-07-17T04:58:23.607 回答