没有数据从自己的HTTP服务器发送到浏览器

时间:2013-03-14 08:22:45

标签: java ajax sockets http

我创建了简单的Java服务器,它通过端口4567使用HTTP协议来接受连接,并且(至少现在)向浏览器发送硬编码响应:

public class Connection extends Thread {
    private boolean stop;
    private Socket socket;
    private BufferedWriter output;
    private BufferedReader input;

    public Connection(Socket socket) {
        try {
            this.socket = socket;
            output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch (IOException ex) {
            System.out.println("Could not create input/output readers: " + ex);
        }
    }

    @Override
    public void run() {
        //while (!stop) {
            try {
                String data = "{'success': 'yes'}".replaceAll("'", "\"");
                String read;

                // printing request on screen; it's ignored
                while (!(read = input.readLine()).equals("")) {
                    System.out.println(read);
                }

                // Last empty line send by browser won't be printed 
                System.out.println();

                // Writing hardcoded response
                writeln("HTTP/1.1 200 OK");
                writeln("Content-Type: application/json; charset=utf-8");
                writeln("Content-Length: " + data.length());
                writeln();
                writeln(data);
                output.flush();
                input.close();
                output.close();
            } catch (IOException ex) {
                System.out.println("IO Error: " + ex);
            }
        //}
    }    

    private void writeln(String... lines) throws IOException {        
        if (lines.length == 0) {
            System.out.println("Writing:");
            output.write("\n");
        }

        for (String line : lines) {
            System.out.println("Writing: " + line);
            output.write(line + '\n');
        }
    }

    public void setStop(boolean stop) {
        this.stop = stop;
    }
}

连接实例是在另一个线程中创建的,它只是new Connection(serversocket.accept()).start();

在浏览器端,通过以下代码发送AJAX请求:

$(document).ready(function() {
    $.ajax({
        url: "http://192.168.1.212:4567",
        crossDomain: true,
        success: function(data) {
            console.log("Success: " + data);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            console.log("Text: " + xhr.responseText);
            console.log("Status: " + xhr.status);
            console.log("Error: " + thrownError);
      }
    });
});

这就是浏览器所说的:

enter image description here

这就是服务器所说的:

GET / HTTP/1.1
Host: 192.168.1.212:4567
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.4) Gecko/20120425 Firefox/10.0.4
Accept: */*
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost:8383/Client/index.html
Origin: http://localhost:8383

Writing: HTTP/1.1 200 OK
Writing: Content-Type: application/json; charset=utf-8
Writing: Content-Length: 18
Writing:
Writing: {"success": "yes"}

我知道有跨域请求,这是我项目中非常重要的一部分。 发送所有标头,但没有响应数据。

1 个答案:

答案 0 :(得分:0)

你所粘贴的“服务器说什么”是正常的浏览器请求,而不是响应。 最小的响应如下所示:

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Date: Sun, 01 Mar 2012 00:00:00 GMT
Server: IAMME
Content-Length: 14444
Connection: Close 

some content here...

我还可以看到你没有发送任何状态(它是“0”)..看到上面一行的第一行。