`

简单理解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对象回显操作结果。

可以这样:

try...{...}catch (Exception e) ...{

  PrintWriter out = response.getWriter();

  out.println(”[script type=”text/javascript”]alert(’您的附件不能正常下载,请检查操作或联系管理员’);window.close();[/script]”);

}



愚人愚见,多多指教。

分享到:
评论

相关推荐

    java.lang.IllegalStateException: OutputStream already obtain

    标题 "java.lang.IllegalStateException: OutputStream already obtain" 涉及到的是Java编程中的一个常见错误,特别是当处理I/O流时。这个异常通常在尝试获取已经存在的OutputStream实例时抛出,表明该输出流已经被...

    spring入门好教程

    Spring框架,由Rod Johnson创立并由Interface21公司推广,自诞生以来,它就致力于简化Java企业级应用(J2EE)的开发,提供了一种非侵入式的解决方案,极大地提高了开发效率。它的目标不仅仅是解决单一层次的问题,...

    weblogic12c部署webservice错误问题WSSERVLET11

    错误信息"无法解析运行时描述符: java.lang.IllegalStateException: MASM0001:"指出在部署Web服务时遇到了异常情况。这个错误代码MASM0001通常与WebLogic的模块组装(Module Assembly)过程有关,该过程是将应用组件...

    action-buffer:提供了在处理后台任务时避免片段过渡期间出现 IllegalStateException 的示例

    这个存储库提供了一种在处理片段传输和后台任务时避免“java.lang.IllegalStateException:Can not perform this action after onSaveInstanceState”的方法。 您可以在的非常权威的阅读有关该问题和可能的解决方案...

    Tomcat启动springboot项目war包报错:启动子级时出错的问题

    这个错误信息出现在`java.lang.IllegalStateException`中,具体是在`ContainerBase.addChildInternal`方法抛出的,这表明在尝试添加或启动Spring Boot的web应用(war包)作为Tomcat的一个子容器时发生了问题。...

    java常见异常汇总

    ### Java常见异常汇总 ...综上所述,Java 开发过程中会遇到各种异常情况,理解这些异常的原因和解决方案对于提高开发效率至关重要。以上列举的一些常见异常及其处理方法希望能帮助开发者更好地解决问题。

    python selenium运行失败常见错误.docx

    java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; 解决方案: * 将下载好的驱动添加到系统环境变量 path 中,类似 Java 变量...

    tomcat启动的错误

    本文将对“tomcat启动的错误”这一主题进行深入探讨,并结合具体的错误信息来分析其原因及解决方案。 #### 错误描述:“Could not load com.mysql.jdbc.Messages Could not load java.net.BindException MySQL JDBC...

    tomcat部署多个项目.pdf

    Tomcat 部署多个项目解决方案 在 Tomcat 中部署多个项目时,可能会遇到一些问题,例如多个项目间的配置冲突、日志记录问题等。以下是解决这些问题的方法和相关知识点。 问题 1:java.lang.IllegalStateException ...

    java的常见问题及解决方法定义.pdf

    以下是一些常见问题及其解决方案: 1. **类签名不匹配**: 当出现“'org.apache.commons.collections.SequencedHashMap'的签名信息与同一包中的其他类的签名信息不匹配”这样的错误时,通常是因为不同库提供的相同...

    尚学堂android开发常用错误集.docx

    01-16 22:18:39.222:E/AndroidHttpClient(26745): java.lang.IllegalStateException: AndroidHttpClient created and never closed ``` **原因分析**: 此错误表明`AndroidHttpClient`对象创建后未曾被正确关闭。`...

    log的方法分析

    本文将针对几种常见的错误日志进行深入解析,并给出相应的解决方案。 #### 二、常见异常日志类型及分析 ##### 1. 空指针异常 (NullPointerException) **定义**: 当尝试访问一个空对象的成员时,Java会抛出`...

    javax.servlet-api-3.1.0

    java.lang.IllegalStateException: Failed to read Class-Path attribute from manifest of jar file:/XXX 出现这个问题的解决方案就是将原有的jar删除 然后重新下载过一遍就可以使用

    详解spring cloud Feign使用中遇到的问题总结

    在使用 Feign 时,需要正确使用@PathVariable 注解,否则,会抛出异常,例如:Caused by: java.lang.IllegalStateException: PathVariable annotation was empty on param 0。正确的使用方式是:@RequestMapping...

    将应用部署到weblogic10及oracle linux遇到的问题及解决方案

    在本文中,我们将详细记录这些问题和解决方案,以便为后续的部署工作提供参考。 一、意外的异常 在将 Tomcat 环境下的应用移植到 WebLogic 下的过程中,遇到了第一个问题,那就是意外的异常错误。在处理请求时出现...

    WebRex:WebRex是用于在运行时进行Web资源聚合和优化的工具。 与wro4j等其他开放源代码优化器相比,它的突出优点是聚合和优化是动态的,而不是静态的

    WebRex目录包括WebRex标签库在JSP页面中定义一个插槽将资源分配到插槽其他资源类型的使用WebRex Java API 获取单个资源的URL 获取聚合结果的URL 将资源添加到页面上的现有插槽中常问问题为什么会出现异常:java.lang...

    将应用部署到weblogic10及oracle linux时遇到的问题 .pdf

    首先,我们遇到的第一个问题是“意外的异常”和“java.lang.OutOfMemoryError: unable to create new native thread”。这通常发生在尝试上传大型应用war包至WebLogic管理服务器时。由于应用较大,系统内存不足,...

    oozie+spark2结合

    - 如果遇到具体的错误信息,如java.lang.IllegalStateException,它提示library目录不存在,这时需要检查Spark是否正确构建以及相关的路径配置是否正确。 5. 文件内容补充 - 部分内容提到的" WARN org.apache....

Global site tag (gtag.js) - Google Analytics