无法从Servlet中检索数据

问题描述:

我想在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

我曾使用过的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

如果您无法检索第二个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