`
Alchemist-X
  • 浏览: 15300 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

java.lang.IllegalStateException错误

阅读更多

做毕设的时候,文件能够正常下载但是后台报错,于是查阅了下,发现以下的解决方法。

 

现象

java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:483)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at filters.TomcatFormFilter_UTF8.doFilter(TomcatFormFilter_UTF8.java:79)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
    at java.lang.Thread.run(Unknown Source)

 

原因

JSP文件或struts action(纯servlet应用中没发现此问题)中采用了,如下代码:

public void print2Screen(HttpServletResponse resp,String encodeString,String[] htmlCommands) throws IOException{
        resp.setCharacterEncoding(encodeString);
        ServletOutputStream httpOutput= resp.getOutputStream();
        for(String temp:htmlCommands)
            httpOutput.write(temp.getBytes());
    }

 

深层原理

1.Servlet规范说明,不能既调用 response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出 IllegalStateException.
2.servlet代码中有out.write(””),这个和JSP中缺省调用的response.getOutputStream()产生冲突.
因为在jsp中,out变量是通过response.getWriter得到的,在程序中既用了 response.getOutputStream,又用了out变量,故出现以上错误。


解决:

法一:在JSP文件中,加入下面两句

<%
out.clear();
out = pageContext.pushBody();
%>

此法的缺陷:
很多开发项目并不是JSP前端,如freemarker,velocity等
造成问题的"response.getOutputStream()"并未被写在JSP里,而是写在servlet/action里

法二: 在action中,不要return 回具体的result文件,而是return null

 //return SUCCESS;
 return null;

 

很好的解决了问题,同时也明白了相应的原理。

 

分享到:
评论
1 楼 蒋启云 2012-02-16  
为什么我这些条件都加上了,还是会出现java.lang.IllegalStateException这个异常呢????

相关推荐

    java.lang.IllegalStateException: getOutputStream() has already解决办法

    纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....

    Android异常 java.lang.IllegalStateException解决方法

    1. java.lang.IllegalStateException: No wrapped connection. 2.java.lang.IllegalStateException: Adapter is detached. 原因: 1.单线程一次执行一个请求可以正常执行,如果使用多线程,同时执行多个请求时就会...

    Java异常之—-Caused by: java.lang.IllegalStateException: Method has too many Body parameters

    异常:Caused by: java.lang.IllegalStateException: Method has too many Body parameters Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract ...

    weblogic12c部署webservice错误问题WSSERVLET11

    weblogic12c部署webservice错误问题WSSERVLET11: 无法解析运行时描述符: java.lang.IllegalStateException: MASM0001:

    Failed to load ApplicationContext

    java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate....

    java dubbo admin 2.5.3 + jdk1.7

    java dubbo admin 2.5.3 + jdk 1.7 亲试 好用 ... java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

    Java 8中10个不易察觉的错误

    不小心重用了流  我敢打赌,每人至少都会犯一次这样的错误。像现有的这些“流”(比如说InputStream),你也只能对它们消费一次。下面的代码是无法工作的: ...  java.lang.IllegalStateException:  st

    179海关联调服务

    {“code”:“20000”,“message”:“上传失败 java.lang.IllegalStateException: xxxx这里是错误信息内容”,“total”:0,“serviceTime”:1500000000000} 这个错误说明上传的数据格式不对,海关系统无法解析,注意看...

    elasticsearch-spring-boot-spring-data:将Elasticsearch存储库与Springboot结合使用的入门示例

    Elasticsearch Spring Boot Spring数据 :trophy: 将Elasticsearch存储库与Springboot结合使用的入门示例 ... java.lang.IllegalStateException: Received message from unsupported version: [2.0.0] minimal com

    移居

    收到以下错误java.lang.IllegalStateException:如果尚未设置测试规则,则无法重置状态。 在dagger.android.internal.testing.MarkThatRulesRanRule在dagger.android.internal.testing....

    spring boot 2.2.* 项目搭建 docker 部署项目 错误锦集

    spring boot 2.2.* 项目搭建 docker 部署项目 错误锦集 用于快速查找原因: 1 问题原因,没有启动 RabbitMQ 查找不到端口 log 中输出了 :5672 端口的字样: ...java.lang.IllegalStateException: couldn't de

    java 面试题 总结

    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...

    JAVA面试题最全集

    找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选那些字符(&lt; &gt; & “”) 3.在...

    超级有影响力霸气的Java面试题大全文档

     java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或...

Global site tag (gtag.js) - Google Analytics