oyj7454103
2012-11-12 10:26
浏览 1.9k
已采纳

经典的错误,求方案。getOutputStream() has already been called for this response

[code="java"]严重: Servlet.service() for servlet spring-mvc threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response[/code]

[code="java"]
严重: Servlet.service() for servlet spring-mvc threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:611)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:180)[/code]

尝试了网上和多的解决方案 无效!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • iteye_11593 2012-11-12 17:03
    已采纳

    下面的代码是在实现HTTP协议封装Response时的部分代码
    SimpleHttpResponse.java
    [code="java"]
    OutputStream ops;
    PrintWriter writer;
    String ce = "utf-8";
    public OutputStream getOutputStream() throws Exception {
    if(dateType==W)throw new Exception("getWriter() has already been called!");
    if(ops==null){
    ops = new ByteArrayOutputStream();
    dateType = O;
    }
    return ops;
    }
    public PrintWriter getWriter() throws Exception {
    if(dateType==O)throw new Exception("getOutputStream() has already been called!");
    if(writer==null){
    ops = new ByteArrayOutputStream();
    writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(ops,ce)),true);
    dateType = W;
    }
    return writer;
    }
    [/code]
    W和O表示已经定义流的模式。
    为什么getWriter()之后不能getOutputStream()?或者getOutputStream()之后不能getWriter()呢?
    很简单writer是写入字符的,一行写完之后还可能会插入换行回车。显然是不能和outputStream重叠使用。
    原理已经给出了,请楼主自己根据实际情况理解错误的原因。

    点赞 评论
  • lbinzhang 2012-11-12 11:21

    请看看这个地址,也许对你有帮助。
    http://www.189works.com/article-60271-1.html

    点赞 评论
  • iteye_5246 2012-11-12 11:25
    点赞 评论
  • iteye_5246 2012-11-12 11:25

    原因:在JSP页面释放资源的时候,调用了ServetResponse.getWriter()方法
    public java.io.PrintWriter getWriter()
    Either this method or getOutputStream() may be called to write the body, not both
    由于ServletResponse.getOutputStream()方法和该方法都有可能被调用,来输出JSP页面的内容,如果其中的一个方法被调用了,再调用另一个方法就会抛出异常。
    在jsp页面最后加上:
    out.clear();清空缓存的内容
    out = pageContext.pushBody();
    // ·返回一个新的BodyContent(代表一个HTML页面的BODY部分内容)
    //·保存JspWriter实例的对象out
    // ·更新PageContext的out属性的内容

    点赞 评论
  • lyp880809 2012-11-12 12:19

    流重复,不知道你是否是json数据的传递

    点赞 评论
  • chnaghong1990 2012-11-12 15:03

    OutputStream output = response.getOutputStream();

    // 输出图象到页面
    ImageIO.write(image, "JPEG", response.getOutputStream());
    output.flush();
    out.clear();
    out = pageContext.pushBody();
    
    点赞 评论
  • cy727893310 2012-11-12 17:33

    之前也遇到这个问题,就往excel中写数据,试了很多网上的解决方案,但是就是没解决掉,所以也就没解决了。总之对功能没影响,但是后台老是出现这个错误。期待哪位大侠能有什么好的解决方案出来。

    点赞 评论

相关推荐 更多相似问题