【问题标题】:pass value and control from javascript to servlets将值和控制从 javascript 传递到 servlet
【发布时间】:2016-09-10 10:34:53
【问题描述】:

我有一个带有谷歌地图、放置自动完成和几个按钮的 jsp 文件。提交按钮单击调用 Javascript 中的方法,该方法又将 jsp 页面“输入”数据作为“参数”传递给 callServlet() 方法。我想调用一个 servlet 页面 MyServlet 并将参数传递给它。但是我的 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>

【问题讨论】:

    标签: javascript java jquery jsp servlets


    【解决方案1】:

    您没有为此使用 jQuery 是否有特定原因?

    基本上,xmlhttp.send(params) 期望接收 key=value 字符串,而不是 Json。如果您打算使用纯 XMLHttpRequest,则需要自己创建此字符串。

    另外,这个映射:var url = "./mapServlet";可能是错误的,因为通常您从根目录提供代码,而您的 JS 文件是从资源目录(例如 /js)提供的。使用 `var url = "/mapServlet" 会更好。

    最后,在你到达你的 servlet 之后,你可以使用 request.getParameter("parameter_name") 读取你的参数

    要使用 jQuery 调用您的服务器,请先使用 jQuery.post() 方法:

    https://api.jquery.com/jquery.post/

    $.post( "./mapServlet", params)
      .done(function( data ) {
         console.log("Got ", data);
      });
    

    【讨论】:

    • 我不知道 jQuery 解决方案。你能把它贴出来吗?除了网址是正确的。我会在没有json作为参数的情况下尝试这个解决方案
    • 嘿,jquery 在通过 MyServlet 后会在控制台上打印 JSP pg,但不会在浏览器上加载 jsp 页面。
    • 为什么会这样?您需要将 console.log 替换为实际代码。
    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2023-04-03
    • 1970-01-01
    • 2013-11-25
    • 2012-05-03
    相关资源
    最近更新 更多