Response.getWriter() 和Response.getOutputStream冲突
今天写java验证码程序,完成后使用一切正常,但是总抛出java.lang.IllegalStateException异常,虽然并不影响正常使用,但看了总让人觉得很不舒服,检查代码并没有错,最后上网查了不少资料,终于发现原因之所在。
我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流. 例如在JSP使用: response.reset(); response.setContentType(”application/vnd.ms-excel”); OutputStream os = response.getOutputStream(); 抛出异常: ERROR [Engine] StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception java.lang.IllegalStateException: getOutputStream() has already been called for this response 从网上找了下资料,综合一下原因分析: 这是web容器生成的servlet代码中有out.write(””),这个和JSP中调用的response.getOutputStream()产生冲突. 即Servlet规范说明,不能既调用 response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出 IllegalStateException,因为在jsp中,out变量是通过response.getWriter得到的,在程序中既用了response.getOutputStream,又用了out变量,故出现以上错误。 解决方案: 1.在程序中添加: out.clear(); out = pageContext.pushBody(); 就可以了; 2,不要在%][%之间写内容包括空格和换行符 3,在页面写入图片的时候,需要flush() OutputStream output=response.getOutputStream(); output.flush(); 4,在页面确定写入<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312”> 孙卫琴说可能是tomcat的bug,我给她回了封信: :我看了看这里,http://www.javathinker.org/main.jsp?bc=showessay.jsp+filename=tomcat/tomcat_question_chapter13.htm这里是你回复别人的一个帖子,里面的观点基本上和我理解的一样,但是你最后写到可能是tomcat的bug,我想解释一下:在jsp中,out是内嵌对象,即已经设置了PrintWriter out=response.getWriter();这样在再次getOutputStream()得到输出流时(比如转发过滤、下载文件时)就出错了(写排斥锁),我不止一次看到有人的文件下载页面在后台不断打印这个异常。而在servlet中没有默认out内置对象,所以没有出错.你可以在servlet中添加out对象试试,应该会报异常的.所以正确的处理方式就应该是:在servlet中做控制层,在业务处理以前不要获得out对象,当业务操作失败或出现异常时再生成out对象回显操作结果。 *********************************************************** (1)使用tomcat5容器调用response.getOutputStream()方法即可实现,但调用requonse.getWriter()方法时,输出二进制数据时(图片等内容无法显示)则出现“getWriter() has already been called for this response”异常。 |
转载于:https://blog.51cto.com/tianya23/1072702
Response.getWriter() 和Response.getOutputStream冲突相关推荐
- JSP的概念||原理||JSP的脚本||JSP的内置对象||response.getWriter()和out.write()的区别||案例:改造Cookie案例
1. 概念 * Java Server Pages: java服务器端页面 * 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码 * ...
- response.getWriter().write()和 response.getWriter().print()的区别
异步上传图片的代码.发现里面用了response.getWriter().print(),故联想到response.getWriter().writer(),经过一番api的查找与实操,总结如下: r ...
- response.getWriter().write 传递中文乱码
在拦截器中用到了response.getWriter().write返回JSON数据 但传递中午是一直乱码 解决方案 最后在调用response.getWriter()之前添加这句话解决问题: re ...
- [转]response.getWriter().write()与out.print()的区别
原文地址:http://blog.csdn.net/javaloveiphone/article/details/8133772 1.首先介绍write()和print()方法的区别: (1).w ...
- response.getWriter()和jsp中out对象的区别
两者的主要区别:1.内置对象out的类型是JspWriter: response.getWrite()返回的类型是PrintWriter: out和response.getWriter的类不一样,一个 ...
- java response.write_@ResponseBody与response.getWriter .write()区别
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML 数据,需 ...
- response.getWriter().write()与out.print()的区别
response.getWriter().write()与out.print()的区别 1.首先介绍write()和print()方法的区别: (1).write():仅支持输出字符类型数据,字符 ...
- response.getWriter().write()和 response.getWriter().print()的区别 以及 PrintWriter对象 和 out对象 的区别
感谢原文作者:krismile__qh 原文链接:https://blog.csdn.net/krismile__qh/article/details/89926001 一.response.getW ...
- response.getWriter()
response.getWriter()的作用 PrintWriter out = response.getWriter(); getWriter()返回一个PrintWriter object 但是 ...
最新文章
- HDU6964 I love counting (字典树+莫队)
- 《黑客与画家》读后感
- redhat6.5 配置使用centos的yum源
- IplImage和Mat间的相互转换
- 工作组模式下SQL Server 2008 R2 数据库镜像
- 关闭TCP连接的学问
- java技术学习内容_Java开发主要都学些什么内容?
- java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...
- 互联网高并发之Hystrix实现服务隔离和降级
- ReentrantLock1.8源码
- Android网络库的比较:OkHTTP,Retrofit和Volley [关闭]
- html5做在线音乐,html5实现在线响应式音乐播放器
- c语言 牛逼代码,有c语言牛逼的神人吗
- vpp之feature机制介绍
- 干货:怎么提高科技成果转移转化成效?
- 阅读笔记——基于CART决策树的计算机网络课程学生成绩分析
- 苹果计算机没有根号,计算器根号,在iphone自带的计算器上怎样打出根号
- LabVIEW编程LabVIEW控制GPS例程与相关资料
- 母函数(指数型)(泰勒展开式)
- php扑克牌随机发,PHP实现随机发放扑克牌
热门文章
- 阿里三面被挂,幸获内推,历经5轮终于拿到口碑offer
- ​Openresty最佳案例 | 第8篇:RBAC介绍、sql和redis模块工具类
- 新一代算法模型:从搜索、推荐到广告!
- 数据分析索引总结(中)Pandas多级索引
- 谷歌大脑新研究:强化学习如何学会用声音来观察?
- 最喜欢随机森林?周志华团队 DF21 后,TensorFlow 开源决策森林库 TF-DF
- 推荐一位在BAT大厂工作的技术+美女双料博主
- 集成、知识蒸馏和自蒸馏有区别?
- 【GCN】图卷积网络 Graph Convolutional Networks
- selenium之作用和工作原理