tôi cố gắng viết ứng dụng máy chủ đơn giản nhất có thể bằng Java, hiển thị biểu mẫu html với đầu vào văn bản, sau khi gửi cho tôi khả năng phân tích cú pháp xml được nhập trong văn bản đó. Còn bây giờ tôi xây dựng đơn giản ServerSocket máy chủ dựa như thế:Đọc dữ liệu POST từ biểu mẫu html được gửi tới serversocket
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class WebServer {
protected void start() {
ServerSocket s;
String gets = "";
System.out.println("Start on port 80");
try {
// create the main server socket
s = new ServerSocket(80);
} catch (Exception e) {
System.out.println("Error: " + e);
return;
}
System.out.println("Waiting for connection");
for (;;) {
try {
// wait for a connection
Socket remote = s.accept();
// remote is now the connected socket
System.out.println("Connection, sending data.");
BufferedReader in = new BufferedReader(new InputStreamReader(
remote.getInputStream()));
PrintWriter out = new PrintWriter(remote.getOutputStream());
String str = ".";
while (!str.equals("")) {
str = in.readLine();
if (str.contains("GET")){
gets = str;
break;
}
}
out.println("HTTP/1.0 200 OK");
out.println("Content-Type: text/html");
out.println("");
// Send the HTML page
String method = "get";
out.print("<html><form method="+method+">");
out.print("<textarea name=we></textarea></br>");
out.print("<input type=text name=a><input type=submit></form></html>");
out.println(gets);
out.flush();
remote.close();
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
public static void main(String args[]) {
WebServer ws = new WebServer();
ws.start();
}
}
Sau khi hình thức (textarea với xml và một đầu vào văn bản bổ sung) được gửi trong 'bị' String kiểu biến Tôi đã urlencoded giá trị của các biến của tôi (cũng hiển thị trên màn hình, có vẻ như:
gets = GET /?we=%3Cnetwork+ip_addr%3D%2210.0.0.0%2F8%22+save_ip%3D%22true%22%3E%0D%0A%3Csubnet+interf_used%3D%22200%22+name%3D%22lan1%22+%2F%3E%0D%0A%3Csubnet+interf_used%3D%22254%22+name%3D%22lan2%22+%2F%3E%0D%0A%3C%2Fnetwork%3E&a=fooBar HTTP/1.1
Tôi có thể làm gì để thay đổi phương thức GET thành POST (nếu tôi chỉ thay đổi biểu mẫu và đặt "if (str.contains (" POST ")) { "nó cung cấp cho tôi chuỗi như
gets = POST/HTTP/1.1
không có biến nào. Và sau đó, làm thế nào tôi có thể sử dụng xml từ trường văn bản của tôi (được gọi là 'chúng tôi')?
Xin chào qqryq. Tôi có cùng mã. Bạn đã tìm ra cách đọc nội dung POST?Tôi đã cố gắng chạy thứ hai trong khi chu kỳ như cygri nói, nhưng phương thức inputStream.read hoặc bufferedReader.readline chặn chuỗi của tôi. Làm thế nào bạn đọc POST cơ thể? – Alexmelyon
Ồ, tôi nhận ra! Tôi cần đọc tiêu đề "Content-Length:" và thực hiện theo chu kỳ đến độ dài này. – Alexmelyon