2013-08-20 56 views
0

我想通過一個java應用程序發送一個字符串,它是一個json,它不會在servlet中獲得這個json,我該怎麼辦,誰能幫助我? 這是我的servlet代碼:如何通過java應用程序將數據傳輸到servlet

public void service(HttpServletRequest req, HttpServletResponse res) 
     throws ServletException, IOException { 
    BufferedInputStream in = new BufferedInputStream(req.getInputStream()); 
    byte[] data = null; 
    byte[] bts = new byte[1024]; 
    int index; 
    while ((index = in.read(bts)) >= 0) { 
     if (data == null) { 
      data = new byte[index]; 
      System.arraycopy(bts, 0, data, 0, index); 
     } 
     else { 
      byte[] tmp = data; 
      data = new byte[tmp.length + index]; 
      System.arraycopy(tmp, 0, data, 0, tmp.length); 
      System.arraycopy(bts, 0, data, tmp.length, index); 
     } 
    } 
    String json = new String(data); 
      System.out.print(json); 
} 

,這是我的Java應用程序:

String _url = "http://localhost:8080/jsf/test"; 
    URL url = null; 
    HttpURLConnection urlconn = null; 
    String json = URLEncoder.encode(JSONObject.fromObject(req) 
      .toString(), "UTF-8"); 
    url = new URL(_url); 
    urlconn = (HttpURLConnection) url.openConnection(); 
    urlconn.setRequestMethod("POST"); 
    urlconn.setDoOutput(true); 
    urlconn.setDoInput(true); 
    OutputStream out = urlconn.getOutputStream(); 
    out.write(json.getBytes("UTF-8")); 
    out.flush(); 
    out.close(); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(
      urlconn.getInputStream(), "UTF-8")); 
    StringBuffer sb = new StringBuffer(); 
    int ch; 
    while ((ch = rd.read()) > -1) { 
     sb.append((char) ch); 
    } 
    System.out.println(sb); 
    rd.close(); 
+0

你的代碼永遠不會發送JSON。將它發送到連接的輸出流,然後精確地告訴你發生了什麼。 –

+0

我hava嘗試輸出流像thisOutputStream out = urlconn.getOutputStream(); \t \t \t out.write(json.getBytes(「UTF-8」)); \t \t \t out.flush(); \t \t \t out.close();但不起作用 –

+0

「它不起作用」對問題描述很差。什麼不行?它怎麼不工作?如果你得到一個異常,堆棧跟蹤是什麼?當你去看醫生時,你不只是說「我生病了,疼」。你描述症狀,你的感受,在哪裏。同樣在這裏。 –

回答

0

你應該JSON數據寫入的OutputStream作爲out.write(json.getBytes()); 。請參見下面的完整代碼:

String _url = "http://localhost:8080/jsf/test"; 
URL url = new URL(_url); 
String json = "[{\"id\":\"DFAB8108D69642EBBD461160B4519B0F\",\"name\":\"name1\"},{\"id\":\"B048B2521A5619DCE0440003BA11CFDA\",\"name\":\"name2\"}]"; 
HttpURLConnection urlconn = (HttpURLConnection) url.openConnection(); 
urlconn.setRequestMethod("POST"); 
urlconn.setDoOutput(true); 

OutputStream out = urlconn.getOutputStream(); 
out.write(json.getBytes()); 
out.flush(); 
out.close(); 
BufferedReader rd = new BufferedReader(new InputStreamReader(
     urlconn.getInputStream(), "UTF-8")); 
StringBuffer sb = new StringBuffer(); 
int ch; 
while ((ch = rd.read()) > -1) { 
    sb.append((char) ch); 
} 
System.out.println(sb.toString()); 
rd.close(); 
+0

雖然這裏沒關係,更好''json.getBytes(「UTF-8」)'。不需要「沖水」。 'StringBuilder' i.o. 'StringBuffer' - 儘管問題使用了這些。 –

+0

@lee棕褐色,你試過給定的解決方案嗎? – Suji

0

嘗試是這樣的

String _url = "http://localhost:8080/jsf/test"; 
URL url = new URL(_url); 
String json = "[{\"id\":\"DFAB8108D69642EBBD461160B4519B0F\",\"name\":\"name1\"},{\"id\":\"B048B2521A5619DCE0440003BA11CFDA\",\"name\":\"name2\"}]"; 
HttpURLConnection urlconn = (HttpURLConnection) url.openConnection(); 

    urlconn .setDoOutput(true); 
    urlconn .setRequestProperty("Content-Type", "application/json"); 
    urlconn .setRequestProperty("Accept", "application/json"); 
    urlconn .setRequestMethod("POST"); 
    urlconn .connect(); 

    OutputStream os = httpcon.getOutputStream(); 
    os.write((json.getBytes("UTF-8")); 

    os.close(); 
相關問題