环境: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对象,对不起,之前误导了大家。
分享到:
相关推荐
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
在struts2中使用result里type="stream"的结果类型时,可以实现文件的下载管理,使用时也是比较顺畅,但是当在“下载提示窗口”中点击“取消按钮”时,总是报出“java.lang.IllegalStateException”异常,异常内容...
在多个项目中,可能会遇到 `java.lang.IllegalStateException` 异常,例如: `java.lang.IllegalStateException: Web app root system property already set to dif` 这个异常是因为多个项目中的 `web.xml` 文件中...
如果遇到“java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode”的错误,这意味着在使用Hibernate的HQL查询时,忘记为表名添加别名。正确的做法是在查询语句中明确...
**异常描述**:在使用 HQL (Hibernate Query Language) 时,如果没有给表名添加别名,可能会引发 `java.lang.IllegalStateException`。 **原因分析**:在 HQL 查询语句中,如果没有为表指定别名,HQL 解析器将无法...
当你遇到`java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode`时,可能是你在HQL查询中忘记了为表名添加别名。正确的做法是为每个表指定别名,例如`select p from ...
在进行SSH(Struts+Spring+Hibernate)框架整合的过程中,启动Tomcat服务器时常会遇到一些问题。这些问题如果不能及时解决,将会影响到项目的正常运行与部署。本文将对“tomcat启动的错误”这一主题进行深入探讨,并...
首先,让我们来看看异常`java.lang.IllegalStateException`。这个异常通常表示在不合法或不合适的时间点调用了某个方法,比如在HTTP响应已经发送到客户端之后尝试修改响应状态。在这个场景下,异常可能源于`...
- **Java.lang.IllegalStateException: Cannot call sendError() after the response has**:这部分内容介绍了如何避免在发送响应后调用 sendError() 方法而导致的异常。 - **Java 中重载函数调用时出现的问题**:这...
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法...