Pra*_*nav 7 javascript jsp servlets parameter-passing
我有一个会话密钥,它是我从REST API调用获得的JavaScript变量.我需要在servlet中调用我的Java代码并将该密钥作为参数传递.我可以用什么JavaScript函数来做到这一点?
Bal*_*usC 13
几种方式:
使用window.location火的GET请求.警告是它是同步的(因此客户端将看到当前页面被更改).
window.location = "http://example.com/servlet?key=" + encodeURIComponent(key);
Run Code Online (Sandbox Code Playgroud)
请注意内置encodeURIComponent()函数在传递请求参数之前对其进行编码的重要性.
用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)
或者,您也可以只设置现有表单的隐藏字段,并等待用户提交它.
用于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)使用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中提供.