0

javascriptとjavaの間で通信しようとしています。私のスクリプトjavascriptはjavaにメッセージを送信し、javaは応答を送信します。

JavaScript 部分:

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4)
        {
        alert(xmlhttp.responseText);
        }
      }
    var s = "LIGNE \n 2 \n il fait beau \nEND\n";
    xmlhttp.open("POST","http://localhost:6020",true);
    xmlhttp.send(s);

Java 部分:

    try {
        serverSocket = new ServerSocket(6020);
    } catch (IOException e) {
        System.err.println("Could not listen on port: 6020.");
        System.exit(-1);
    }
    serverSocket.accept()
    BufferedReader br = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
    BufferedWriter bw =  new BufferedWriter(
                new OutputStreamWriter(socket.getOutputStream()));
    String ligne = "";
    while(!(ligne = plec.readLine()).equals("END")){
        System.out.println(ligne);
    }
    bw.write("Il fait beau\n");
    bw.flush();
    bw.close();
    plec.close();
    socket.close();

出力 Java :

POST / HTTP/1.1
Host: localhost:6020
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost:8080/test.html
Content-Length: 30
Content-Type: text/plain; charset=UTF-8
Origin: http://localhost:8080
Pragma: no-cache
Cache-Control: no-cache

LIGNE 
 2 
 il fait beau 

したがって、javascript によって送信されたメッセージは正しく受信しますが、アラートは常に空です。このメッセージにどのように応答しますか? 私は多くの可能性を試しますが、うまくいきません。そして、私はサーブレットを使用したくありません。それを行うのは重すぎます。

ありがとう。

編集:

これは私がしました :

bw.write("HTTP/1.1 200 OK\r\n"+
        "Content-Type: text/html; charset=utf-8\r\n"+
        "Content-Length: 13\r\n\r\n" +
        "il fait beau\n");

この:

String data = "il fait beau \n";

StringBuilder builder = new StringBuilder();

builder.append("HTTP/1.1 200 OK\r\n");
builder.append("Content-Type: text/html; charset=utf-8\r\n");
builder.append("Content-Length:" + data.length() + "\r\n\r\n");
builder.append(data);
bw.write(builder.toString());

しかし、アラートは空のままです。多分それはjavascriptの問題です。

4

2 に答える 2

3

javascriptは完全なHTTP応答を確認する必要があります。単に文字を送り返すだけで、無効なHTTP応答であるため、応答を破棄します。

あなたのJavaコードで、このようなものを送り返してください

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: <length of data>

---data here---

参照

何かのようなもの:

StringBuilder builder = new StringBuilder();
builder.append("HTTP/1.1 200 OK\r\n");
builder.append("Content-Type: text/plain; charset=utf-8\r\n");
builder.append("Content-Length:" + data.length() + "\r\n\r\n);
builder.append(data);
bw.write(builder.toString());
于 2012-07-17T12:03:31.780 に答える
2

試す:

bw.write("HTTP/1.1 200 OK\r\n"+
            "Content-Type: text/html; charset=utf-8\r\n"+
            "Content-Length: 13\r\n\r\n" +
            "il fait beau\n");

\r\nHTTP ヘッダーは(CRLF)で区切られます。ヘッダーと本文は で区切られてい\r\n\r\nます。

\n文字列の末尾のもカウントする必要があるため、長さを 13 に設定することに注意してください。

編集: cross-domain-policy のため、機能しませんhttp://localhost:6020JavaScript を実行する Web サイトと同じポートではないため、xmlhttprequest が配信されない可能性があります。

于 2012-07-17T12:14:39.487 に答える