2

ObjectOutputStreamを使用してオブジェクトを返すと主張されているJavaコードのセグメントを見つけました

     OutputStream outstr = response.getOutputStream();
     ObjectOutputStream oos = new ObjectOutputStream(outstr);

     oos.writeObject(process);

     oos.flush();
     oos.close();

responseはHttpServletResponseオブジェクトです。このコードセグメントがどのように機能し、どのようにテストするのか知りたいですか?

4

2 に答える 2

1

これは、Javaのデフォルトのバイナリシリアル化プロトコル(個人的には使用するのがやや気が進まない)を使用して、オブジェクトをサーブレットの出力ストリーム(HTTP応答で提供されるデータなど)にシリアル化します。詳細については、オブジェクトのシリアル化仕様を参照してください。

それをテストする方法に関しては-それはあなたが使用したいテストのレベルに依存します。偽のHTTPサーブレットライブラリを使用して応答を取得し、を使用して再度読み取るObjectInputStreamか、実際のサーブレットコンテナを実行して、HTTP要求を作成し、応答の逆シリアル化を試みることができます。

于 2011-05-18T18:59:06.520 に答える
1

以下は、HTTPを介してシリアル化されたオブジェクトを読み取る方法を示す簡単な例です。

import java.net.URL;
import java.net.HttpURLConnection;
import java.io.ObjectInputStream;

/**
 * This is a simple example to read an object. 
 *
 * This is not production ready code ;-)
 */
public class Sample {

    public static void main(final String [] pArgs) throws Exception {

        // Change SERVER:PORT/PATH to match your application.
        final URL url = new URL("http://SERVER:PORT/PATH");
        final HttpURLConnection conn = (HttpURLConnection)url.openConnection();

        conn.setRequestMethod("GET");
        conn.setReadTimeout(10000);
        conn.connect();

        final ObjectInputStream is 
        = new ObjectInputStream(conn.getInputStream());

        final Object obj = is.readObject();

        if (obj instanceof String) System.out.println((String)obj);
        else // Convert to object and do whatever.

        is.close();
        conn.disconnect();
    }
}
于 2011-05-18T19:27:08.037 に答える