0

GET および POST HTTP 要求を受け入れることができる Java サーバーを作成しようとしています。これで、GET メソッドを機能させることができました。しかし、私は POST メソッドを機能させることができません。サーバーはリクエスト ヘッダーを読み取ることができますが、メッセージの本文を読み取っていないようです。つまり、投稿されたもの。コードは次のとおりです。

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);
            }

ここで、ソケットを介して送信されるすべてのものを表示するだけです。しかし、何らかの理由でリクエストメッセージの本文を取得できず、Chromeでこれがあるため、本文が送信されていることがわかります。

ここに画像の説明を入力

その「フォームデータ」を取得する方法がわかりません。どんな助けでも本当に感謝します!!

アップデート:

ここで問題をさらに絞り込みます。From は HTTP リクエストを正常に送信します。HTTP POST メソッドを使用すると、リクエスト ヘッダーが \r\n になり、メッセージ データが続きます。問題は、私の BufferedData 変数ServerInputが \r\n (空の行) を読み取ると、ServerInput. とにかくこれを修正するには?

4

3 に答える 3

2

HTTP プロトコルについて読む必要があります。そのために HttpServlet api を見ることができます。

サーブレットの目的は、まさにソケットから Http プロトコルに渡すことです。本当にもう一度仕事をしたいですか?

于 2013-10-12T11:56:43.330 に答える
0

投稿で述べたように、私が抱えていた問題は、作成したサーバーが HTTP 要求ヘッダーを読み取ったが、Google chrome を介してサーバーに送信された投稿情報を読み取ることができなかったことです。

現在、HTTP ポスト リクエストの構造は次のとおりです。

request header
\r\n
post information

投稿情報が読めないのは機能のせいでした.readLine()!関数が \r\n を読み取ると、それがメッセージの終わりであると想定し、送信されている投稿情報の読み取りを停止するため、エラーが発生します。この問題を解決する.read()には、 の代わりに 関数を使用する必要がありました.readLine()。この.read()関数は、投稿情報を含む HTTP リクエストからすべての文字を読み取ります

于 2013-10-16T23:06:33.297 に答える