如果我从 Java Servlet 发送 HTTP 请求并使用 ServerSocket 在 TCP 端口上接收它,我将如何读取 HTTP 请求参数。谁能帮我解决这个问题?
以下是我的设计
小服务程序
使用 HttpURLConnection 获取/发布
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");
在 localhost : 2309 我有一个 ServerSocket 并监听来自上面 servlet 的请求。我正在尝试读取请求,但我只读取了 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 ###
任何人都可以建议我
如何读取请求参数
在连接对象上写入输出流,它会在该位置为我提供请求参数吗?
这是一个好方法吗,当我只想保持一个独立的服务器运行时,它只会监听来自单个端口的请求并为它提供服务[或]有什么更好的方法可以执行此操作?