2016-08-03 58 views
-2

我想通過在servlet中使用POST方法發送一個字符串,以便它可以與存在於其他域中的其他servlet應用程序進行通信。但是我在Input蒸汽對象中收到了空值。在servlet中使用POST方法時接收空值?

我的代碼:

String content = "10 141 nahush123 01"; 
    URL url = new URL("http://52.220.37.12:8080/servers/servers"); 
    System.out.println(url.toString()); 
    HttpURLConnection httpCon = (HttpURLConnection)url.openConnection(); 
    httpCon.setDoInput(true); 
    httpCon.setDoOutput(true); 
    httpCon.setRequestMethod("POST"); 
    httpCon.setRequestProperty("Content-Type", "text/plain;charset=UTF-8"); 

    OutputStream os = httpCon.getOutputStream(); 
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os)); 
    out.write(content); 
    //br = BufferReader(out); 
    System.out.println(httpCon.getResponseCode()); 
    System.out.println(httpCon.getResponseMessage()); 
    writer.println(httpCon.getResponseMessage()); 


    httpCon.connect(); 
    br = new BufferedReader(new InputStreamReader(httpCon.getInputStream())); 
    //reading response 
    //String resp; 
    //if(br != null){ 
     content = br.readLine(); 
    //} 
    System.out.println(content); 
    writer.println(content); 
    out.flush(); 
    writer.flush(); 
    writer.close(); 
    out.close(); 
    os.close(); 
+0

爲什麼你連以前寫的OutputStream? – jr593

+0

嘗試將字符串作爲參數傳遞。 –

+0

我試圖連接之前outputsteam仍然無法正常工作。 –

回答

1

複製粘貼你在我的servlet代碼工作罰款

  1. 檢查您在servlet overrided doPost方法

  2. 檢查你的郵件metod是否正常工作並返回值,我使用"DHC Rest Client"插件進行Chrome瀏覽。這是非常酷的工具

  3. 嘗試刪除httpCon.connect()線。沒有必要。

    大約從connect()方法oracle的文檔:

依賴於被連接,像getContentLength,將 隱含如果必要執行連接,操作。

操作getResponseMessage,getResponseCode執行連接。

更新

我試圖用我的本地測試網址進行測試,它的工作原理。然後我嘗試與您的網址,它不起作用。

您需要使用輸入流來刷新輸出流。

此代碼工作並返回0#5#26#溫度#Living_Room#555555581#0 + 0#7#0#Room1#Master_bedroom#555555581#1 + 1#7#0#Door1#Living_Room#555555581# 2 + 1#6#0#frontdoor#Living_Room#555555581#2 + 0#0#0#doorback#陽臺#555555581#2 +」

PrintWriter writer = res.getWriter(); 
String content = "10 141 nahush123 01"; 
URL url = new URL("http://52.220.37.12:8080/servers/servers"); 
System.out.println(url.toString()); 
HttpURLConnection httpCon = (HttpURLConnection)url.openConnection(); 
httpCon.setDoInput(true); 
httpCon.setDoOutput(true); 
httpCon.setRequestMethod("POST"); 
httpCon.setRequestProperty("Content-Type", "text/plain;charset=UTF-8"); 

OutputStream os = httpCon.getOutputStream(); 
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os)); 
out.write(content); 
out.flush(); 
//br = BufferReader(out); 
System.out.println(httpCon.getResponseCode()); 
System.out.println(httpCon.getResponseMessage()); 
writer.println(httpCon.getResponseMessage()); 


//httpCon.connect(); 
BufferedReader br = new BufferedReader(new InputStreamReader(httpCon.getInputStream())); 
//reading response 
//String resp; 
//if(br != null){ 
content = br.readLine(); 
//} 
System.out.println(content); 
writer.println(content); 
writer.flush(); 
writer.close(); 
out.close(); 
os.close(); 
+0

你能分享你收到的回覆嗎?我正在尋找字符串作爲響應文本,它不會包含確定。 0#7#0#Room1#Master_bedroom#555555581#1 + 1#7#0#Door1#Living_Room#555555581#2 + 0#5#26#溫度#Living_Room#555555581#0 + 1 #6#0#frontdoor#Living_Room#555555581#2 + 0#6#0#doorback#陽臺#555555581#2 + –

+0

@NahushSarje我更新了我的答案。無法在此處粘貼代碼 – Azat

+0

感謝Azat,它現在的工作。 –

0

使用getParameter()函數嘗試在servlet

+0

我想發送內容變量中提到的字符串。而作爲回報,我只會得到一個字符串。所以我不認爲getParameter()會有用。 –

0

調用此方法與您傳遞字符串參數:

public String postData(String reqStr) { 
ObjectOutputStream objOS = null; 
ObjectInputStream objIS = null; 
HttpURLConnection servletCon = null; 
try { 
if (reqStr != null) { 
Thread.sleep(1000); 
objOS.writeObject(reqStr); 
} else { 
throw new Exception("request is null."); 
} 
} catch (Exception ex) { 
     logger.error("Failed to send request to server.", ex); 
    } 
    String response = null; 
    try { 
     objIS = new ObjectInputStream(servletCon.getInputStream()); 
     response = (String) objIS.readObject(); 
    } catch (Exception ex) { 
     logger.error("Failed to get response from server.", ex); 
     response = null; 
    } 
    return response; 
} 

初始化像你這樣的連接,而是調用不同:

public void initializeUrlConnection(String servletURL, String contentType, String method) { 

    try { 

     logger.debug("Servlet URL " + servletURL); 
     url = new URL(servletURL); 
     servletCon = (HttpURLConnection) url.openConnection(); 
     servletCon.setUseCaches(false); 
     servletCon.setDefaultUseCaches(false); 
     servletCon.setDoInput(true); 
     servletCon.setDoOutput(true); 
     servletCon.setRequestProperty("Content-Type", contentType); 
     servletCon.setRequestMethod(method); 
     objOS = new ObjectOutputStream(servletCon.getOutputStream()); 
    } catch (IOException ex) { 

     logger.error("Failed to initialize Http Connection.", ex); 
    } 
} 
通話

首先初始化連接方法與所需的參數:

Object.initializeUrlConnection(url, contentType,method); 

然後調用posDataMethod與您的字符串/ JSON參數:

Object.postData(str); 
+0

HI Vimal,網址在哪裏? –

+0

我希望你現在瞭解更多。 –