2013-10-12 35 views
0

我正在尝试制作一个可以接受GET和POST HTTP请求的java服务器。现在我设法让GET方法起作用。但我没有设法让POST方法工作。我的服务器设法读取请求头,但似乎没有读取消息的正文。即发布的内容。这里是代码:让HTTP POST在制作自己的Java服务器时工作

int port = 1991; 

     ServerSocket serverSocket = new ServerSocket(port); 

     System.err.println("The Server is on and listening on port " + port); 
     System.out.println(" "); 

     while (true) 
     { 
      Socket ClientSocketConnection = serverSocket.accept(); 
      System.err.println("We have established a connection with a client!"); 
      System.out.println(" "); 

      BufferedReader ServerInput = new BufferedReader(new InputStreamReader(ClientSocketConnection.getInputStream())); 
      DataOutputStream ServerOutput =new DataOutputStream(ClientSocketConnection.getOutputStream()); 

      String StringInput; 
      int iCount = 0; 
      int CountNull = 0; 

      while ((StringInput = ServerInput.readLine()) != null) 
      { 

       System.out.println(StringInput); 
      } 

现在我只显示通过套接字发送的所有东西。但由于某些原因,我只是不明白的请求消息的身体,我知道身体是因为在铬送我有这样的:

enter image description here

我不知道怎么去说,“表单数据”。任何帮助将非常感谢!

UPDATE:

这里的问题是进一步收窄。从发送HTTP请求罚款。使用HTTP POST方法,我们将请求标头设为\ r \ n,然后是消息数据。问题是当我的BufferedData变量ServerInput读入\ r \ n(空行)时,它停止从ServerInput读取数据。有任何解决这个问题的方法吗?

+0

您是否收到“Content-length”标头?如果是这样,那么在读取一个空行(表示头部分的结尾)后,读取_Content-length_字节数并将它们转换为字符串。你的问题可能是在你的ServerInput的末尾没有行结束,因此readLine()会永远等待它。 – halfbit

+0

事实上,我确实得到了12的Content-Legnth。我现在会尝试你的建议 – user481610

回答

0

正如在帖子中提到的那样,我遇到的问题是我制作的服务器读取了HTTP请求标题,但是一些从未设法读取通过Google Chrome发送到服务器的发布信息。

现在HTTP POST请求的结构如下:

request header 
\r\n 
post information 

的理由让我不能够读取该发布信息是.readLine()功能,因为!一旦函数读入一个\ r \ n,它会假定这是消息的结尾,并停止读取正在发送的发布信息,从而导致错误。要解决这个问题,我不得不使用.read()函数而不是.readLine().read()函数从HTTP请求中读取每个字符,其中包含发布信息

2

您需要阅读有关HTTP协议。你可以看看HttpServlet API。

servlet的目的正在从套接字传递到Http协议。你确定你想再次做这项工作吗?

+0

这是一个学校作业,所以我不完全确定我们是否可以使用servlet,但我会研究它。 – user481610

+0

可以下载rt源代码并仔细查看servlet API:这将使您了解很多关于良好体系结构的知识。 如果你匆忙,只需阅读一些关于HTTP协议的文档来理解标题信息(POST,GET,UPDATE等...命令写在标题中)。您可以在Firefox上使用Firebug插件来查看http请求中发生的情况并提供标题示例 –

0

我强烈建议你看看Jetty。这是一个可嵌入的http服务器,它将为你抽象出所有这些内容。