getOutputStream() has already been called for this response 错误异常的处理
来源:互联网 发布:斐讯路由器 淘宝 编辑:程序博客网 时间:2024/05/21 07:14
1.今天在做导出excel导出的项目中遇到了这个问题:
网上搜了一下,参考地址:http://www.cnblogs.com/jorton/archive/2012/05/04/2482609.html
原因是因为在导出的时候使用response.getOutputStream() 和 response.getWriter()冲突。
2.解决方法
在输出流使用完后,加入下面两端代码
out.clear();
out = pageContext.pushBody();
3.以下为参考原文:
getOutputStream() has already been called for this response问题的解决
在jsp向页面输出图片的时候,使用response.getOutputStream()会有这样的提示:java.lang.IllegalStateException:getOutputStream() has already been called for this response,会抛出Exception
原因一:
JSP默认的输出流为PrintWriter ,即<% %>以外的东西所默认的输出方式,如果你尝试在JSP中使用ServletOutputStream就会引起错误.要嘛直接改用Servlet输出(复写service方法),要嘛删除除%><%中的任何东西(包括HTML标签,空格,回车等东西)应该就可以。对于这样的情况应该这样来解决,删除%><%之间的所有内容包括空格和换行符,最后也要消除空格和换行符,最好再加上一句response.reset()。
原因二:
在J2EE的API参考里有这么个:
ServletResponse的getWriter()方法里会抛出这个异常:
IllegalStateException - if the getOutputStream method has already been called for this response object
而它的getOutputStream()方法里会抛出这个异常:
IllegalStateException - if the getOutputStream method has already been called for this response object
并且两者的函数申明里都有这么样的一句
Either this method or getOutputStream() may be called to write the body, not both.
Either this method or getWriter() may be called to write the body, not both.
以上说明也解释了为什么在往页面中写入图片的时候要使用如下循环格式
OutputStream output=response.getOutputStream();
while((len=in.read(b)) >0) {
output.write(b,0,len);
}
output.flush();
而不是把response.getOutputStream().write()放到循环体内
在页面中直接写:
<body bgcolor="#ffffff">
<h1>
<%
response.getOutputStream();
%>
</h1>
</body>
将会出现错误消息如下:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.catalina.connector.Response.getWriter(Response.java:604)
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
- getOutputStream() has already been called for this response 错误异常的处理
- getOutputStream() has already been called for this response 异常处理
- getOutputStream() has already been called for this response异常处理
- 转异常getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response异常
- 异常:getOutputStream() has already been called for this response
- 异常 getOutputStream() has already been called for this response
- JAVA异常 getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response异常
- 抛出异常getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response错误解决办法!
- getOutputStream() has already been called for this response 错误解决
- getOutputStream() has already been called for this response 错误解决
- Struts2 getOutputStream() has already been called for this response 错误
- getOutputStream() has already been called for this response错误
- getOutputStream() has already been called for this response错误解决
- getOutputStream() has already been called for this response 的解决方法
- getOutputStream() has already been called for this response的解决方法
- 关系型数据库表结构的两个设计技巧
- Mina框架学习笔记(一)
- 欢迎使用CSDN-markdown编辑器
- 向热爱装逼的你推荐clojurescript
- 携程景点门票api演示示例分享
- getOutputStream() has already been called for this response 错误异常的处理
- iOS 搜索栏的使用
- Mina框架学习笔记(二)
- 树莓派外接USB摄像头系列三
- Maven搭建hadoop环境之pom.xml基本配置
- MySQL中如何将一个数据库的表导入到另一个数据库表中
- android的listView组件
- Virtualbox WDDM之DxgkDdiSetPointerShape
- synchronized详解