我有一个带谷歌地图的jsp文件,放置自动完成功能和几个按钮。提交Button单击调用Javascript中的方法,该方法将jsp页面的“输入”数据传递给callServlet()方法,作为“params”。我想调用一个servlet页面MyServlet并将params传递给它。但是我的callServlet()完美地执行但是没有将控件/参数传递给MyServlet。 另外如何读取MyServlet中的参数?
请帮我解决。
JS代码:
function callServlet(params) {
var xmlhttp = new XMLHttpRequest();
var url = "./mapServlet";
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else
{// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
console.log(url);
xmlhttp.onreadystatechange = function ()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
console.log("Its perfect");
} else {
alert(xmlhttp.status);
}
}
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-Length", params.length); // POST request MUST have a Content-Length header (as per HTTP/1.1)
// params is of json format with key value pairs
xmlhttp.send(params);
}
Servlet代码:(对此页面没有任何更改。它是一个简单的servlet模板)
public class MyServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { ... }
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.print("aaas");
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
的web.xml
<servlet>
<servlet-name>mapServlet</servlet-name>
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mapServlet</servlet-name>
<url-pattern>/mapServlet</url-pattern>
</servlet-mapping>
答案 0 :(得分:1)
您是否有特定原因不使用jQuery?
基本上,xmlhttp.send(params)期望接收key = value字符串,而不是Json。如果您打算使用裸XMLHttpRequest,则需要自己创建此字符串。
此外,此映射:var url = "./mapServlet"
;可能是错误的,因为通常你从root提供代码,而你的JS文件是从资源目录(如/ js)提供的。使用`var url =&#34; / mapServlet&#34;会更好。
最后,在您访问servlet后,您可以使用request.getParameter("parameter_name")
使用jQuery以使用jQuery.post()方法调用服务器:
https://api.jquery.com/jquery.post/
$.post( "./mapServlet", params)
.done(function( data ) {
console.log("Got ", data);
});