我正在尝试将对象从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();
}
}
但它不起作用。 如果有人知道如何处理这个例外,请给我一些提示。
答案 0 :(得分:1)
这一切都与HTTP请求的生命周期有关(这是HttpURLConnection摘要的内容) - 一旦请求被发送,你就无法再进一步修改它 - 如果你有更多的数据要发送,你只需要另一个一。
下面发生的是,一旦你调用getHeaderFields()
(响应头字段),'HttpURLConnection'就会发送请求并使响应可用。
我不知道'getServletConnection()'中的内容,但您可以尝试使用'doOutput()'而不是从响应中读取,直到您完成对请求的写入。