2016-05-09 20 views
2

Ich habe einen einfachen HTTP-Server in Java geschrieben. Was ich versuche zu erreichen ist, dass ich einen Javascript/Ajax Client habe, der Nachrichten vom Server bekommen kann. Der Java-Server, den ich habe, ist in der Lage, die hergestellte Verbindung zu erkennen, aber der Client kann die vom Server ausgedruckte Nachricht nicht abrufen.Java Http-Server Get Post to Ajax

Es gibt eine Schaltfläche in meinem Client, nach dem Klicken der Server-Nachricht wurde nicht gedacht, aber in der Lage, eine Verbindung zum Server zu senden. Der Kunde sollte "Test Server" Zeigen Sie die Taste

Kunden beim Klicken

<html> 
<body> 

<h2>AJAX</h2> 

<button type="button" onclick="loadDoc()">Request data</button> 

<p id="demo"></p> 


<script> 
function loadDoc() { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
    if (xhttp.readyState == 4 && xhttp.status == 200) { 
     document.getElementById("demo").innerHTML = xhttp.responseText; 
    } 
    }; 
    xhttp.open("GET", "http://127.0.0.1", true); 
    xhttp.send(); 
} 
</script> 

</body> 
</html> 

Server

public class JavaHttpServer { 

    protected void start() { 
    ServerSocket s; 

    System.out.println("Webserver starting up on port 80"); 
    try { 

     s = new ServerSocket(80); 
    } catch (Exception e) { 
     System.out.println("Error: " + e); 
     return; 
    } 

    System.out.println("Waiting for connection"); 
    for (;;) { 
     try { 

     Socket remote = s.accept(); 

     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(); 

     out.println("HTTP/1.0 200 OK"); 
     out.println("Content-Type: text/html"); 
     out.println("Server: Bot"); 

     out.println(""); 

     out.println("<H1>Test Server</H2>"); 
     out.flush(); 
     remote.close(); 
     } catch (Exception e) { 
     System.out.println("Error: " + e); 
     } 
    } 
    } 

    public static void main(String args[]) { 
    JavaHttpServer ws = new JavaHttpServer(); 
    ws.start(); 
    } 

Antwort

1

Der Browser weist wahrscheinlich die Antwort, weil Sie den Access-Control- verpassen Allow-Origin-HTTP-Header Versuchen Sie es wie folgt hinzuzufügen: out.println ("Access-Control-Allow-Origin: *");

+0

Guter Punkt. Fehler wie diese sollten auch eine Fehlermeldung in der Konsole der Dev Tools des Browsers ausgeben. – zapl

+0

Wo sollte ich out.println hinzufügen ("Access-Control-Allow-Origin: *"); Ich benutze kein Java-Servlet, ich habe keine Antwort-Header zu – newbieprogrammer

+0

hinzuzufügen Sie sollten es in den Server-Code direkt nach der Zeile hinzufügen: out.println ("Content-Type: text/html"); – cris23