Java HTTP 服务器 Get 和 Post 到 Ajax

4

我有一个简单的Java编写的HTTP服务器。我的目标是让一个javascript/ajax客户端能够从服务器获取消息。我已经可以检测到建立的连接,但客户端无法获取从服务器中输出的消息。

在我的客户端中有一个按钮,点击它后服务器的消息没有被传递,但是可以向服务器发送连接。当点击这个按钮时,客户端应该显示“Test Server”。

客户端

<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>

服务器

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();
  }
1个回答

2
浏览器可能会拒绝响应,因为您缺少Access-Control-Allow-Origin HTTP标头。 请尝试像这样添加它: out.println("Access-Control-Allow-Origin: *");

好的建议。这样的错误也应该在浏览器开发工具的控制台中打印出错误信息。 - zapl
我应该在哪里添加 out.println("Access-Control-Allow-Origin: *");?我没有使用Java Servlet,也没有要添加到响应头中的内容。 - newbieprogrammer
1
你应该在服务器代码中这一行之后添加它:out.println("Content-Type: text/html"); - cris23
我用httpserver重写了新的服务器代码,以便可以发送sendResponseHeaders。现在我能够从服务器获取消息。但是你的答案也有效。 - newbieprogrammer
有没有使用Node.js服务器的示例? - Zuitlander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接