1

オブジェクトをシリアル化し、httpserver から送信する必要があります サーバーからクライアントに文字列を送信する方法は既に知っていますが、オブジェクトを送信する方法がわかりません

だから私はこのコードを持っています:

public class Test {
public static void main(String[] args) throws Exception {
    HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
    server.createContext("/test", new MyHandler());
    server.setExecutor(null); // creates a default executor
    server.start();
}
static class MyHandler implements HttpHandler {
    public void handle(HttpExchange t) throws IOException {
        String response = "This is the response";

        //this part here shows how to send a string
        //but i need to send an object here
        t.sendResponseHeaders(200, response.length());
        OutputStream os = t.getResponseBody();
        os.write(response.getBytes());
        os.close();
    }
}
}

だから私はGoogleを検索しようとしましたが、結果はありませんでした.コードを変更しようとしました(JavaのHttpServerに慣れていないため、機械的に何をしているのかよくわかりません)。

SendResponse obj = new SendResponse();
                    ObjectOutputStream objOut = new ObjectOutputStream();
                    t.sendResponseHeaders(200, objOut);

                    objOut.writeObject(obj);
                    objOut.close();

しかし、Eclipse は、ObjectOutputStream() コンストラクターが表示されず、httpExchange が引数 (int,ObjectInputStream) に適用できないことを示すエラーを表示します。

どうすればこれを修正できますか?よろしくお願いいたします。

4

2 に答える 2

1

1つのOutputStreamをパラメーターとして使用してコンストラクターにアクセスできます

ObjectOutputStream objOut = new ObjectOutputStream( the http or any other output stream here );

ObjectOutputStreamのコンストラクターはいくつかのヘッダーバイトを送信し、ObjectInputStreamのコンストラクターはこれらのヘッダーバイトを期待します。すべてのオブジェクトに対して新しいObjectOutputStreamと新しいObjectInputStreamを作成するか、すべてのオブジェクトに対して1つのObjectOutputStreamとObjectInputStreamのみを作成する必要があります。

より単純な代替手段は、google gsonです。これは使いやすく、Javaクラスをjson文字列に変換します。逆の方法もあります。

于 2012-11-01T13:35:56.353 に答える
0

さまざまなことを数時間試した後、交換するだけです

t.sendResponseHeaders(200, objOut);

t.sendResponseHeaders(200,0);

この質問でユーザーcyonが述べたように

于 2012-11-02T14:15:56.677 に答える