Java サーブレットから HTTP リクエストを送信し、ServerSocket を使用して TCP ポートで受信する場合、HTTP リクエスト パラメータをどのように読み取るのでしょうか。誰でもこれについて私を助けてもらえますか?
以下は私のデザインです
サーブレット
HttpURLConnection を使用した GET/POST
URL url = new URL("http://localhost:2309/");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("Content-Type", "application/text");
connection.setRequestProperty("Accept", "application/text");
connection.setRequestMethod("POST");
connection.setRequestProperty("header1", "value1");
at localhost : 2309 ServerSocket を起動して、上記のサーブレットからのリクエストをリッスンしています。リクエストを読み取ろうとしていますが、HTTPヘッダーのみを読み取っていますが、リクエストパラメータが表示されません(上記の例では、パラメータを送信していないことがわかっています。接続の出力ストリームを取得して書き込むことでこれを試しましたそれ)。
これは、ServerSocket プログラムにリクエスト パラメータを送信しようとした方法です。
byte[] parameters = someString.getBytes();
OutputStream outStream = connection.getOutputStream();
outStream.write(parameters);
以下は私のServerSocketプログラムです。
public static void main(String... args) {
int port = 2309;
ServerSocket sSocket = new sSocket(port);
System.out.println("### SERVER IS UP AND RUNNING, WAITING FOR A CLIENT TO CONNECT ON " + port + " ###");
Socket cSocket = sSocket.accept();
System.out.println("### CONNECTION WITH THE CLIENT CREATED ###");
BufferedReader readRequest = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
PrintWriter writeResponse = new PrintWriter(cSocket.getOutputStream());
String line = "";
while (readRequest != null && (line = readRequest.readLine()) != null) {
if (line.length() == 0)
break;
System.out.println(line);
}
writeResponse.write("HTTP/1.0 200 OK\r\n");
writeResponse.write("Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n");
writeResponse.write("Server: Apache/0.8.4\r\n");
writeResponse.write("Content-Type: text/html\r\n");
writeResponse.write("Content-Length: 59\r\n");
writeResponse.write("Expires: Sat, 01 Jan 2000 00:59:59 GMT\r\n");
writeResponse.write("Last-modified: Fri, 09 Aug 1996 14:21:40 GMT\r\n");
writeResponse.write("\r\n");
writeResponse.write("<TITLE>Example</TITLE>");
writeResponse.write("<P>This is an example</P>");
}
以下は、ServerSocket プログラムの OUTPUT に表示される内容です。
### SERVER IS UP AND RUNNING, WAITING FOR A CLIENT TO CONNECT ON 2309 ###
### CONNECTION WITH THE CLIENT CREATED ###
POST / HTTP/1.1
Content-Type: application/text
Accept: application/text
header1: value1
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.7.0_75
Host: localhost:2309
Connection: keep-alive
### CONNECTION WITH THE CLIENT TERMINATED ###
誰でも私に提案できますか
リクエストパラメータの読み方
接続オブジェクトの出力ストリームに書き込むと、その場所で要求パラメーターが取得されますか?
スタンドアロン サーバーを維持したいだけの場合、これは良いアプローチでしょうか。これは、単一のポートに着信する要求をリッスンして処理するだけです [OR] これを実行するためのより良い方法はありますか?