-1

私は次の問題を扱っています。

私は、(doPost と doGet がオーバーライドされた) サーベルトと、次のコードを含むアプレットを持っています。

        String urlStr="blabla";
        URLConnection conn = StartConnection("http","localhost",8084,urlStr);            
        InputObject obj = GetInputObject();
        ObjectOutputStream oos = new ObjectOutputStream(conn.getOutputStream());
        oos.writeObject(obj);
        oos.flush();

このコードでは、サーブレットは何のアクションも行いません (doPost または doGet)。しかし、私が追加すると

        BufferedReader in=new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String result = in.readLine();
        log(result);

doPost本体に入ります。グーグルは何も与えません。必要がないのに、なぜ応答を読み返す必要があるのですか?

追加した:

private URLConnection StartConnection(String protocol,String host,int port, String urlStr){
        URLConnection conn = null;
        try
        {
            URL currentPage=getCodeBase();
            URL dataURL=new URL(protocol,host,port,urlStr);
            conn = dataURL.openConnection();            
            conn.setDoOutput(true);
            conn.setDoInput(true);
        }
        catch(Exception ee){
                log(ee.getMessage().toString());
        }
        return conn;

    }
4

2 に答える 2

2

StartConnection()unconnected を返すだけのようで、ソースが表示されませんURLConnection。このオブジェクトを作成しただけでは、ネットワークとはまったく通信しません。connect()これは が呼び出されたときにのみ発生します。入力ストリームから読み取ると暗黙的に が呼び出さconnect()れるため、これが機能します。connect()ただし、を呼び出すことができます。不要なデータを実際に読み取る必要はありません。

于 2012-05-29T12:57:29.443 に答える
1

アプレット クラスのシリアル化されたインスタンスをサーブレットに送信する場合は、ブラウザのように HTTP 呼び出しを行う必要があります。POST メソッドを使用し、シリアル化されたバイトを POST パラメータとして送信する必要があります。そのようなものに最適なライブラリはApache HttpClientです。ここにチュートリアルがあります。

于 2012-05-29T15:59:39.363 に答える