有没有办法解决objectOutputStreamhere
使用之间的冲突和sendRedirect()
!?
private void writeObjectStream(HttpServletRequest request,
HttpServletResponse response) {
getQueryFromAttribute(request);
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(response.getOutputStream());
oos.writeObject(appInfo);
oos.writeObject(serviceInfo);
oos.writeObject(queriesMap);
response.reset();
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtil.closeQuietly(oos);
}
}
这里我称之为writeObjectStream
writeObjectStream(request, response);
try {
response.sendRedirect(response.encodeRedirectURL(appInfo.getUrl()));
} catch (IOException e) {
e.printStackTrace();
}
我尝试了其他解决方案来解决此问题,如下所示:
private void writeObjectStream(HttpServletRequest request,
HttpServletResponse response) {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(response.getOutputStream());
oos.writeChars("x");
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtil.closeQuietly(oos, ois);
}
}
writeObjectStream
的来电:
....
response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
response.setHeader("Location", "www.sample.com");
response.setHeader("Content-Length", "" + 500);
writeObjectStream(request, response);
return true;
}
该解决方案的问题是它启动了 java.io.EOFException
在服务器端,当我尝试执行 ois = new ObjectInputStream(request.getInputStream());
时
最佳答案
在sendRedirect之后写入return语句
response.sendRedirect(response.encodeRedirectURL(appInfo.getUrl()));
return;
根据HttpServletResponse#sendRedirect
If the response has already been committed, this method throws an IllegalStateException.After using this method, the response should be considered to be committed and should not be written to.
您还调用了reset()
。如果您想调用它,您应该在提交响应之前调用它
根据ServletResponse#reset
Clears any data that exists in the buffer as well as the status code and headers. If the response has been committed, this method throws an IllegalStateException.
关于java - sendRedirect() 和 ObjectOutputStream 之间的 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18025284/