struts2 java.lang.IllegalStateException异常的解决方法

环境:eclipse+struts2+EJB3.0+jasperReport
最近在一个项目,用到jasperReport生成报表,页面提交请求时,在后台生成报表,然后struts以流的形式返回到页面,报表能显示在页面上,但tomcat抛异常: java.lang.IllegalStateException
......sendError()
这是因为web容器的Servlet会有一个out对象,这个对象是通过response.getOutStream()获得,在程序中,我通过response.getWriter()获得了一个writer对象,因为生成报表时我需要通过这个对象输出到页面,异常就是这里抛出的。
在Servlet中不能同时通过这两个方法来获得输出流,否则就会抛出上面的异常。
解决方法:在获得writer对象之前把out对象flush,
在response.getWriter()之前加入这句:response.getOutStream().flush()。

备注:我的同事用我这种方法时,后台还是会报错,java.lang.IllegalStateException:getOutputStream() has already been called for this response
后来仔细检查了代码,发现我自作多情了,直接使用out对象就可以了,如:
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
当然,你也可以使用out对象来封装一个PrintWriter对象,对不起,之前误导了大家。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值