2013-02-06 29 views
0

我試圖用DataOutputStream發送POST數據並獲取響應數據。DataOutputStream似乎不發送參數

我這樣編碼。

String urlParameters = "table=page&format=xml"; 

    out.println(urlParameters+"<br/><br/><br/>"); 

    String searchUrl = "http://localhost:8081/WebTest/test.jsp"; 
    URL url = new URL(searchUrl); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();   
    connection.setDoOutput(true); 
    connection.setDoInput(true); 
    connection.setInstanceFollowRedirects(false); 
    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    connection.setRequestProperty("charset", "utf-8"); 
    connection.setRequestProperty("Content-Length", ""+Integer.toString(urlParameters.getBytes().length)); 
    connection.setUseCaches (false); 

    DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
    wr.writeUTF(urlParameters); 
    wr.flush(); 
    wr.close(); 

    if(connection.getResponseCode() == 200){ 

     XMLInputFactory xmlFactory = XMLInputFactory.newInstance(); 
     XMLStreamReader reader = xmlFactory.createXMLStreamReader(new InputStreamReader(connection.getInputStream(),"UTF-8")); 

     try{ 
      while (reader.hasNext()) { 
       Integer eventType = reader.next(); 
       if (eventType.equals(XMLStreamReader.START_ELEMENT)){ 
        out.print(" " + reader.getName() + "<br/>"); 
       }else if (eventType.equals(XMLStreamReader.CHARACTERS)){ 
        out.print(" " + reader.getText() + "<br/>"); 
       }else if (eventType.equals(XMLStreamReader.ATTRIBUTE)){ 
        out.print(" " + reader.getName() + " <br/>"); 
       }else if (eventType.equals(XMLStreamReader.END_ELEMENT)){ 
        out.print(" " + reader.getName() + " <br/>"); 
       } 
      } 
     } catch (XMLStreamException e){ 
      e.printStackTrace(); 
     } finally{ 

      connection.disconnect(); 
      reader.close(); 
     } 
    } 

,這是test.jsp的

<?xml version="1.0" encoding="UTF-8" ?> 
<%@ page language="java" contentType="text/xml; charset=UTF-8" %> 
<response> 
    <table><%=request.getParameter("table") %></table> 
</response> 

但是,結果卻

response 

table 
null 
table 

response 

爲什麼用request.getParameter( 「表」),不能獲得(或DataOutputStream類不發)數據?

我很困惑。

感謝大家的幫助。

回答

3

你不應該使用DataOutputStream.writeUTF,見API

首先,兩個字節寫入到輸出流中使用writeShort方法並給定要跟隨的字節數。該值是實際寫出的字節數,而不是字符串的長度。在長度之後,字符串的每個字符按順序使用修改後的UTF-8編碼輸出。如果未拋出異常,則寫入的計數器將增加寫入輸出流的總字節數。這將是至少兩個加上str的長度,並且最多兩個加上str的長度的三倍。

也就是說,什麼DataOutputStream.writeUTF寫入只能用DataInputStream.readUTF

讀我建議使用

OutputStreamWriter w = new OutputStreamWriter(connection.getOuputStream(), "UTF-8"); 
    w.write(urlParameters); 
    w.flush(); 
+0

太謝謝你了,葉夫根尼。它現在運作良好。 –