intento escribir la aplicación de servidor más simple posible en Java, mostrando el formulario html con la entrada textarea, que después de enviarlo me da la posibilidad de analizar xml escrito en ese área de texto. Por ahora construyo servidor basado ServerSocket sencillo como eso:Lectura de datos POST desde un formulario html enviado a 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();
}
}
Después de la forma (área de texto con XML y una entrada de texto adicional) se presenta en 'consigue' variable de tipo cadena que he urlencoded valores de mi variables (también representada en la pantalla, se ve así:
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
¿Qué puedo hacer para cambiar llegar al método POST (si simplemente lo cambio en su forma y que puse "si (str.contains (" POST ")) { "me da cadena como
gets = POST/HTTP/1.1
sin variables. Y después de eso, ¿cómo puedo usar xml desde mi campo textarea (llamado 'nosotros')?
Hola qqryq. Tengo el mismo código. ¿Has descubierto cómo leer el cuerpo POST?Intenté ejecutar el segundo ciclo mientras dice cygri, pero los métodos inputStream.read o bufferedReader.readline bloquean mi hilo. ¿Cómo lees el cuerpo POST? – Alexmelyon
¡Oh, me di cuenta! Necesito leer el encabezado "Content-Length:" y hacer for-cycle a esta longitud. – Alexmelyon