java - sendRedirect() 和 ObjectOutputStream 之间的 IllegalStateException

标签 java

有没有办法解决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/

相关文章:

java - Appengine 如何删除命名空间中的所有实体 - Java

位于 tomcat 库中的 Java keystore

java - Maven Java 不会对非详尽开关发出警告

java - 使用Java将Java项目导入到Eclipse中

java - 将xml文件注入(inject)spring bean

java - 如何获取鼠标单击相对于 Swing 窗口的位置

java - Jersey 与 liferay、Servlet 到 portlet 转换

java - 创建数千个 Netty 客户端,而无需创建数千个线程

java - 为什么运行应用程序时 jar 文件的大小会增加?

java - 具有不同参数的 Spring Prototype bean