将值和控制从javascript传递给servlet

时间:2016-09-10 10:34:54

标签: javascript java jquery jsp servlets

我有一个带谷歌地图的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>

1 个答案:

答案 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);
  });