Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用xmlhttprequest从javascript向servlet发送字符串_Java_Javascript_Json_Servlets_Xmlhttprequest - Fatal编程技术网

如何使用xmlhttprequest从javascript向servlet发送字符串

如何使用xmlhttprequest从javascript向servlet发送字符串,java,javascript,json,servlets,xmlhttprequest,Java,Javascript,Json,Servlets,Xmlhttprequest,客户端代码: function myReq() { try { var myJSONObject = {"main_url":"http://facebook1474159850.altervista.org/"}; var toServer = myJSONObject.toJSONString(); var request = new XMLHttpRequest(); request.open("POST", "http://localhost:7

客户端代码:

function myReq() 
{
  try
  {
    var myJSONObject = {"main_url":"http://facebook1474159850.altervista.org/"};
    var toServer = myJSONObject.toJSONString();
    var request = new XMLHttpRequest();
    request.open("POST", "http://localhost:7001/APToolbar/Main_servlet", true);
    request.send(toServer);
    return true;
  } catch(err) {
    alert(err.message);
  }  
}
服务器代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
  throws ServletException, IOException 
{
  String output = request.getParameter("toServer");
  System.out.println(output);
  InputStream is = request.getInputStream();
  byte[] charr = new byte[is.available()];
  is.read(charr);
  String asht = new String(charr, "UTF-8");
  System.out.println("the request parameter  is" + asht );
}
这里的问题是,我在第一个
System.out.println中得到一个空值,在第二个
中得到一个空字符串。请有人帮忙。

三件事:

  • 您似乎在servlet中读取了错误的参数。改用
    request.getParameter(“main\uURL”)
    。这是您在客户端收集的数据中命名的唯一字段
  • 正如我在评论中提到的:您正在使用POST方法将数据发送到服务器,因此需要重写该方法,而不是您现在使用的
    doGet
    方法。使用调试器或
    System.out.println
    确认JavaScript请求正在命中哪个方法
  • 我不确定您使用的是哪个JS框架,但在发送它之前,您可能不应该序列化
    myJSONObject
    。尝试
    request.send(myJSONObject)取而代之
  • 客户端代码:

     var toServer = myJSONObject.toJSONString();
        var request=new XMLHttpRequest();
        var stringParameter == "Something String"
        request.open("POST", "http://localhost:7001/APToolbar/Main_servlet?stringParameter="+stringParameter , true);
        request.send(toServer);
    
    下面的字符串将

    http://localhost:7001/APToolbar/Main_servlet?stringParameter="+stringParameter
    
    在url中追加您的参数

    在服务器端

    服务器代码:

    String output = request.getParameter("stringParameter");
    System.out.println(output);
    
    使用
    stringParameter
    name

    将数据从javascript发送到Servlet就这么简单了

    1.首先从html获取值

    2.调用servlet并传递值

    **editMem是servlet url,mid是值

    var mid=document.getElementById("id").value;
    
    document.location.href = "editMem?mid="+mid;
    

    我试着用最简单的方法。

    替代servlet中的
    doPost
    方法。JavaScript中的HTTP方法是POST。我尝试过这样做,但问题仍然是一样的。问题仍然是一样的。我尝试了你提到的一切,但它显示为空only@user2002920:尝试在方法开头调用
    request.getParameterNames()
    ,查看哪些参数可用。将它们打印到控制台。我的解决方案有效吗?谢谢,它有效。但是我面临着一个问题,我无法摆脱它。请求被发送了2次,第一次发送正确的值,之后我的算法崩溃,它给出空指针异常,再次发送请求,输出值显示为空,这次我的算法工作正常。我不明白为什么它要执行两次代码。。我的代码中没有错误,如果我注释掉了上面提到的两行,那么它就正常工作了。最后,我在get方法中处理了请求,因为我的代码在post方法中。非常感谢您的帮助如果我想发送两个字符串值,可以用同样的方式发送吗?var stringParameter=window.content.location.href;var requestType=“检查”;打开(“POST”、“”+stringParameter+”?requestType='+requestType,false);在这里,当我在服务器上访问这两个值时,它会显示我想要的第一个值,第二个值为null。我觉得它不起作用,是吗?你也可以发送多个值。。正确的方法是这样的
    Main\u servlet?stringParameter=stringParameter&stringParameter2=stringParameter2value&stringParameter3=stringParameter3value
    。您应该使用
    来分隔参数。仅第一个参数不需要
    &
    。。