2014-10-03 110 views
1

我想在HttpURLConnection中寫一些消息,我試圖在Servlet中檢索相同的消息。這是兩種不同的應用。無法從Servlet中檢索數據

消息編寫代碼(無異常處理)

public static void formUrlAndWrite() 
    { 
    URL url = null; 
    HttpURLConnection httpConnection = null; 
    OutputStreamWriter outStream = null; 
    String host = "http://127.0.0.1:8080/HttpTester"; 
    url = new URL(host); 
    httpConnection = (HttpURLConnection) url.openConnection(); 
    httpConnection.setDoOutput(true); 
    httpConnection.setAllowUserInteraction(true); 
    httpConnection.setDefaultUseCaches(false); 
    outStream = new OutputStreamWriter(httpConnection.getOutputStream()); 
    outStream.write("This is a plain text"); 
    outStream.flush(); 
} 

servlet代碼(無異常處理)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException 
{ 
     BufferedReader reader = null; 
     PrintWriter out = null; 
     StringBuffer buffer = new StringBuffer(); 
     try 
     { 
      //reader = new BufferedReader(new InputStreamReader(request.getInputStream())); 
      reader = request.getReader(); 
      int read = 0; 
      char[] charArray = new char[2000]; 

      while((read=reader.read(charArray))>-1) 
      { 
       buffer.append(charArray, 0, read); 
      } 
      response.setContentType("text/html"); 
      out = response.getWriter(); 

      out.println("<html><body>"); 
      out.print("<h2> Request Buffer is"+buffer+"</h2>"); 
      out.println("</body></html>"); 
     } 
} 

Ť這兩個應用程序異步運行,我沒有從我的servlet獲取輸出。我的疑問是如果我運行消息寫入應用程序,它會將數據寫入網址。那麼當我運行servlet時,它是如何得到請求的?可能我在這件事上做錯了事。任何幫助表示讚賞。

我已經嘗試了下面的URL,這與我的問題非常相似,但它沒有幫助。

Getting request payload from POST request in Java servlet

回答

0

我曾使用過的Android, 這個代碼,它可以幫助你,這可能不是完整的解決方案

寫入服務器

try{ 

       String u="hello"; 
       String p="world"; 

       URL url=new URL("http://localhost:8080/LoginExample/LoginServlet?"+"key1="+u+"&key2="+p); 

       HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection(); 

       urlConnection.setRequestMethod("GET"); 
       urlConnection.connect(); 


      }catch(Exception e) 
       { 
       e.printStackTrace();  
       System.out.println("ERROR IN URL CONNECTION---"+e); 
       } 

ServletPage

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

public class LoginServlet extends HttpServlet { 

public void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, java.io.IOException { 

    try 
    {  
     System.out.println("-----servlet--------------"); 
     // UserBean user = new UserBean(); 
     String uname=request.getParameter("key1"); 
     String password=request.getParameter("key2"); 

     System.out.println("uname ins ervlet==="+uname); 

     System.out.println("password in servlet==="+password); 
    }    
    catch (Throwable theException)  
    { 
     System.out.println(theException); 
    } 

} 

} 
+0

非常感謝您的回覆。我已經嘗試過你的程序。但這不起作用。我運行第一個程序然後運行servlet,我得到了 _uname ins ervlet === null_和 _password在servlet中=== null_ – atom 2014-10-03 09:20:43

1

如果您無法檢索第二個servlet中的任何數據,可能是因爲你在某處調用類似request.getParameter()/getParameterValues()/getParameterMap()的東西。確實,這些方法調用getInputStream(),您只能讀取請求的內容。

+0

感謝您的迴應。這個想法是我的第一個應用程序將始終在URL中寫入一些內容。在第二個應用程序中,我的servlet應該檢索我的第一個應用程序寫的內容。我的問題是第一個應用程序的寫入很好,但在我的servlet中,我沒有收到內容。我需要servlet中的內容,我不想將任何內容發回給我的第一個應用程序。 – atom 2014-10-03 09:12:58

+0

@Som Sry不明白你的需要,我編輯了我的答案。 – 2014-10-03 09:46:08

+0

感謝您的回覆。你以前的回答是正確的。我有一個Java程序,它在URL中寫入一些消息。我有一個單獨的servlet(一個單獨的應用程序),它假設接收請求並打印由第一個java程序寫入的消息。但我無法實現。我到目前爲止所做的是 '在URL中編寫消息(Java程序1) - >在Servlet中執行處理(Java程序2) - >打印處理後的消息(Java程序1)' 感謝您顯示路徑。但我原來的問題仍然沒有解決。 – atom 2014-10-03 10:09:38