调用Servlet并从JavaScript调用Java代码以及参数

Pra*_*nav 7 javascript jsp servlets parameter-passing

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

Bal*_*usC 13

几种方式:

  1. 使用window.location火的GET请求.警告是它是同步的(因此客户端将看到当前页面被更改).

    window.location = "http://example.com/servlet?key=" + encodeURIComponent(key);
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. form.submit()火GET或POST请求.需要注意的是它是同步的.

    document.formname.key.value = key;
    document.formname.submit();
    
    Run Code Online (Sandbox Code Playgroud)

    <form name="formname" action="servlet" method="post">
        <input type="hidden" name="key">
    </form>
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

    下面的例子将调用servlet 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));
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用jQuery发送与xhr浏览器兼容的Ajax请求(上面的代码仅适用于真实的浏览器,对于MSIE兼容性,你需要添加一些混乱;)).

    $.get("http://example.com/servlet", { "key": key });
    
    Run Code Online (Sandbox Code Playgroud)

    $.post("http://example.com/servlet", { "key": key });
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,jQuery已经透明地对请求参数进行了全部编码,因此您不需要encodeURIComponent()这里.

无论哪种方式,key都将request.getParameter("key")在servlet中提供.

也可以看看: