2012-09-24 137 views
0

我正在我的本地机器上运行tomcat servlet,并且使用向servlet发出发布请求的应用程序运行Android模拟器。 POST的代码如下(没有例外等):通过android模拟器发送HTTP POST请求不起作用

 String strUrl = "http://10.0.2.2:8080/DeviceDiscoveryServer/server/devices/"; 
     Device device = Device.getUniqueInstance(); 

     urlParameters += URLEncoder.encode("user", "UTF-8") + "=" + URLEncoder.encode(device.getUser(), "UTF-8"); 
     urlParameters += "&" + URLEncoder.encode("port", "UTF-8") + "=" + URLEncoder.encode(new Integer(Device.PORT).toString(), "UTF-8"); 
     urlParameters += "&" + URLEncoder.encode("address", "UTF-8") + "=" + URLEncoder.encode(device.getAddress().getHostAddress(), "UTF-8"); 

     URL url = new URL(strUrl); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setRequestMethod("POST"); 

     OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); 
     wr.write(urlParameters); 
     wr.flush(); 
     wr.close(); 

无论何时执行此代码,都不会调用该servlet。但是,如果我将请求的类型更改为“GET”,并且不向输出流写入任何内容,则会调用该servlet并且一切正常。我只是没有正确地开展POST或有其他一些错误?

+0

你应该将检查你的servlet代码。它应该接受POST请求。 –

+0

这个servlet的工作原理。看到下面,我找到了一个可行的解决方案。我不知道为什么。 –

回答

0

出于好奇,我试图得到响应代码为我的请求:

int responseCode = connection.getResponseCode(); 
System.out.println(responseCode); 

这实际上提出的要求,经过和我200我检查了我的Tomcat日志和请求终获处理。我猜想url.openConnection()并写入OutputStream是不够的。

1

试试下面的代码,它可以帮助ü

 try 
{ 
    String argUrl = 
     ""; 

    String requestXml = ""; 
    URL url = new URL(argUrl); 
    URLConnection con = url.openConnection(); 
    System.out.println("STRING" + requestXml); 
    // specify that we will send output and accept input 
    con.setDoInput(true); 
    con.setDoOutput(true); 

    con.setConnectTimeout(20000); // long timeout, but not infinite 
    con.setReadTimeout(20000); 

    con.setUseCaches (false); 
    con.setDefaultUseCaches (false); 

    // tell the web server what we are sending 
    con.setRequestProperty ("Content-Type", "text/xml"); 

    OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream()); 
    writer.write(requestXml); 
    writer.flush(); 
    writer.close(); 

    // reading the response 
    InputStreamReader reader = new InputStreamReader(con.getInputStream()); 

    StringBuilder buf = new StringBuilder(); 
    char[] cbuf = new char[ 2048 ]; 
    int num; 

    while (-1 != (num=reader.read(cbuf))) 
    { 
     buf.append(cbuf, 0, num); 
    } 

    String result = buf.toString(); 
    System.err.println("\nResponse from server after POST:\n" + result); 
} 
catch(Throwable t) 
{ 
    t.printStackTrace(System.out); 
}