调用Servlet并从JavaScript调用Java代码以及参数
我有一个会话密钥,它是从REST API调用中获得的JavaScript变量。 我需要在servlet中调用我的Java代码并将该密钥作为参数传递。 我可以用什么JavaScript函数来做到这一点?
几种方法:
使用window.location
来激发GET请求。 警戒是它是同步的(所以客户端会看到当前页面被改变)。
window.location = "http://example.com/servlet?key=" + encodeURIComponent(key);
请注意内置的encodeURIComponent()
函数在传递它之前对请求参数进行编码的重要性。
使用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>
或者,您也可以只设置现有表单的隐藏字段,并等待用户提交。
使用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));
使用jQuery发送兼容Ajax的交叉浏览器请求(上面的xhr
代码仅在真实浏览器中工作,为了MSIE兼容性,您需要添加一些混乱;))。
$.get("http://example.com/servlet", { "key": key });
$.post("http://example.com/servlet", { "key": key });
请注意,jQuery已经自己对请求参数进行透明编码,因此您不需要encodeURIComponent()
。
无论采用哪种方式,该key
都可以通过servlet中的request.getParameter("key")
获得。
也可以看看:
本身没有JavaScript函数,但浏览器通常*提供XMLHttpRequest对象,您可以通过它。
像YUI和jQuery这样的库提供了辅助函数来简化它的使用。
*为“通常”的值,包括几乎所有支持JavaScript的浏览器,并且自从Netscape 4死后发布
当发送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"));
}
链接地址: http://www.djcxy.com/p/46053.html
上一篇: Call Servlet and invoke Java code from JavaScript along with parameters