java.net.ProtocolException:读取输入后无法写入输出

时间:2013-03-27 06:24:15

标签: java java-ee applet struts

我正在尝试将对象从applet发送到struts动作类 使用对象输出流,但它给我一个异常java.net.ProtocolException:读取输入后无法写入输出。

我创建了一个新的URLConnection实例来提供特定的url 并尝试在url中编写对象以从applet发送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();
    }


}

但它不起作用。 如果有人知道如何处理这个例外,请给我一些提示。

1 个答案:

答案 0 :(得分:1)

这一切都与HTTP请求的生命周期有关(这是HttpURLConnection摘要的内容) - 一旦请求被发送,你就无法再进一步修改它 - 如果你有更多的数据要发送,你只需要另一个一。 下面发生的是,一旦你调用getHeaderFields()(响应头字段),'HttpURLConnection'就会发送请求并使响应可用。

我不知道'getServletConnection()'中的内容,但您可以尝试使用'doOutput()'而不是从响应中读取,直到您完成对请求的写入。