provo a scrivere l'app server più semplice possibile in Java, visualizzando il modulo html con input textarea, che dopo l'invio mi dà la possibilità di analizzare xml digitato in quella textarea. Per ora mi costruisco semplice server basato ServerSocket così:Lettura dei dati POST dal modulo html inviato ai server
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();
}
}
Dopo modulo (textarea con XML e un ingresso testo aggiuntivo) è presentata in 'ottiene' di tipo stringa variabile ho urlencoded valori delle variabili my (visualizzato anche sullo schermo, sembra che:
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
Cosa posso fare per cambiare arrivare a metodo POST (se ho semplicemente cambiare in forma e poi messo "se (str.contains (" POST ")) { "mi dà una stringa come
gets = POST/HTTP/1.1
senza variabili. E dopo, come posso usare xml dal mio campo textarea (chiamato 'noi')?
Ciao qqryq. Ho lo stesso codice. Hai capito come leggere il corpo POST?Ho provato a eseguire il secondo mentre andavo in ciclo, come dice cygri, ma i metodi inputStream.read o bufferedReader.readline bloccano la mia discussione. Come leggi il corpo del POST? – Alexmelyon
Oh, ho capito! Ho bisogno di leggere l'intestazione "Content-Length:" e fare for-cycle fino a questa lunghezza. – Alexmelyon