1

オブジェクト出力ストリームを使用して、アプレットから Struts アクション クラスにオブジェクトを送信しようとしていますが、例外が発生しjava.net.ProtocolExceptionます。入力を読み取った後に出力を書き込むことはできません。

URLConnection の新しいインスタンスを作成して特定の URL を指定し、url にオブジェクトを記述して、アプレットから struts アクション クラスを送信しようとしました。

アプレットの保存ボタンのクリックでこのメソッドを呼び出しています

public saveDesign() {

    try
    {

        HttpURLConnection  urlConnection = getServletConnection(CallServletConnection.SAVE_DESIGN, null);
        // Pragma = no-cache; should be null

        if(urlConnection != null && urlConnection.getHeaderFields().get("Pragma") != null)
            return false;





OutputStream outstream = urlConnection.getOutputStream();//Exception occur here

        ObjectOutputStream objectoutstream = new ObjectOutputStream(outstream);

        objectoutstream.writeObject("abc");
        objectoutstream.flush();
        objectoutstream.close(); 
        System.out.println("vctObjectDetails is write ");


    }
     catch (MalformedURLException exception) {
        exception.printStackTrace();
    } 
     catch(ConnectException exception) {
            exception.printStackTrace();
     } 
     catch (IOException exception) {
        exception.printStackTrace();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }


}

しかし、うまくいきません。誰かがこの例外を処理する方法を知っている場合は、いくつかのヒントを教えてください。

4

1 に答える 1

2

これはすべて、HTTP リクエストのライフサイクル (HttpURLConnection が抽象化するもの) に関係しています。リクエストが送信されると、それ以上変更することはできません。送信するデータがさらにある場合は、別のデータを作成するだけです。下で何が起こっているかというとgetHeaderFields()、(応答ヘッダー フィールドを) 呼び出すと、'HttpURLConnection' が要求を送信し、応答を利用できるようにします。

「getServletConnection()」の内容はわかりませんが、リクエストへの書き込みが完了するまで、レスポンスから読み取らずに「doOutput()」を使用してみてください。

于 2013-03-27T07:39:36.387 に答える