`
xp84012493
  • 浏览: 59249 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java.lang.IllegalStateException异常

    博客分类:
  • java
阅读更多

我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流.
例如在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]”);

}



愚人愚见,多多指教。 

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

相关推荐

    java.lang.IllegalStateException: Cannot call sendError() after the response has

    在Java的Web开发中,`java.lang.IllegalStateException: Cannot call sendError() after the response has been committed` 是一个常见的错误,通常发生在尝试在HTTP响应已经发送到客户端之后调用`sendError()`方法...

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

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

    java.lang.IllegalStateException: OutputStream already obtain

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

    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 ...

    Failed to convert value of type ‘java.lang.String’ to required type ‘java.util.Date’; nested except

    Type 异常报告 消息 Failed to convert ... nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.util.Date': no matching editors or co

    The full error is: java.lang.IllegalState

    在Java中,`IllegalStateException`是`java.lang`包下的一个运行时异常。它是由执行了非法操作(例如,线程已经启动后尝试启动,或者在没有正确设置某些必需状态的情况下调用方法)的代码引发的。这个异常通常伴随着...

    spring入门好教程

    此外,它提供了一种一致的数据访问方式,拥有统一的异常层次结构,简化了与JDBC、Hibernate、JDO等数据访问技术的交互。Spring的模型-视图-控制器(MVC)框架灵活易用,IoC与AOP的集成使得代码结构更加清晰。更重要...

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

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

    jsp的跳转方式总结

    * 不能在 response.sendRedirect() 之前使用 out.flush(),否则将抛出 java.lang.IllegalStateException 异常。 * 跳转后,浏览器地址栏将发生变化。 * 如果跳转到不同主机下,response.sendRedirect() 之后的语句将...

    Invalid name=”com.alibaba.dubbo.config.ProtocolConfig#0″

    java.lang.IllegalStateException: Invalid name=“com.alibaba.dubbo.config.ProtocolConfig#0” contains illegal character, only digit, letter, ‘-’, ‘_’ or ‘.’ is legal 原因: 如果没有指定id属性,...

    Android异常处理

    在Android开发中,由于其基于Java语言,因此异常处理机制也遵循Java的标准。本文旨在深入探讨Android开发中异常处理的相关概念和技术细节。 ##### 1.1 异常机制的作用 异常机制的主要作用是在程序执行过程中出现...

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

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

    借助Ehcache缓存框架实现对页面的缓存Demo

    java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader....

    tomcat部署多个项目.pdf

    在多个项目中,可能会遇到 `java.lang.IllegalStateException` 异常,例如: `java.lang.IllegalStateException: Web app root system property already set to dif` 这个异常是因为多个项目中的 `web.xml` 文件中...

    weblogic12c部署webservice错误问题WSSERVLET11

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

    java 中 request.getSession(true、false、null)的区别

    如果在响应已提交的情况下尝试创建会话,容器可能会抛出`IllegalStateException`。 1. `HttpServletRequest.getSession(true)`:这个调用等同于`HttpServletRequest.getSession()`。它表示如果当前请求中没有会话,...

    Java常见异常

    14. **java.lang.IllegalStateException: getAttribute: Session** 在非活动的Session上尝试获取属性。确保在调用getAttribute()方法前,Session处于活动状态。 处理这些异常时,关键在于理解异常信息、定位问题...

    java常见异常汇总

    **异常描述**:在使用 HQL (Hibernate Query Language) 时,如果没有给表名添加别名,可能会引发 `java.lang.IllegalStateException`。 **原因分析**:在 HQL 查询语句中,如果没有为表指定别名,HQL 解析器将无法...

    Spring 3.0所需jar文件和对应的配置文件

    nested exception is java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are ...

Global site tag (gtag.js) - Google Analytics