一尘不染

调用Servlet并从JavaScript和参数中调用Java代码

jsp

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


阅读 261

收藏
2020-06-08

共1个答案

一尘不染

几种方法:

  1. 使用window.location火的GET请求。请注意,它是同步的(因此客户端将看到当前页面正在更改)。
    window.location = "http://example.com/servlet?key=" + encodeURIComponent(key);
    

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

  1. 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>

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

  1. 用于XMLHttpRequest#send()在后台触发异步请求(也称为Ajax)。下面的示例将调用servlet doGet()
    var xhr = new XMLHttpRequest();
    

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

下面的示例将调用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));
  1. 使用jQuery发送跨xhr浏览器兼容的Ajax请求(以上代码仅在实际的浏览器中有效,为了实现MSIE兼容性,您将需要增加一些混乱;))。
    $.get("http://example.com/servlet", { "key": key });
    
    $.post("http://example.com/servlet", { "key": key });
    

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

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

2020-06-08