`
anminer
  • 浏览: 11227 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java.lang.IllegalStateException: OutputStream already obtain

阅读更多
这个问题终于解决了。
java.lang.IllegalStateException: OutputStream をすでに取得しました
或者
java.lang.IllegalStateException: OutputStream already obtain

这个问题本身存在于文件下载的页面中,一般的JSP以字节的方式输出(JspWriter),下载的页面需要以数据流的方式输出(OutputStream)。这两者只能选其一,不能同时使用,否则会出IllegalStateException。
问题将会很隐蔽的出现。原因在于当页面中有不必要的字符的时候,比如"空格"、"换行符",JSP则默认以字节的方式输出这时候就会出IllegalStateException。所以在下载的页面不应该有多余的字符:
<%
....
....

%><%
....
....

%>

本次问题的直接原因并不在于页面是下载页面,相反的页面是上传画面,只是在确认文件是否存在的时候调用了下载的共通方法,该方法中取得了response.getOutputStream()。但是,不知道为什么JRun下没有该问题,Websphere下却出现,奇怪。









解决了,     jsp里面默认就有out对象
在Java脚本范围外(即 <%   ...%> 之外),不要包含HTML代码、空格、回车或换行等字符,有的话将不能正确下载。因为它影响了返回给浏览器的数据流,导致解析出错。  












检查应用服务器日志有“OutputStream already obtained”或者“已获取输出流”的错误信息。
此问题很隐蔽,解决问题的办法倒是很简单,将原来生成报表的JSP代码中的第二行的“<%”加到第一行,同时确认JSP代码的最后一定是以“%>”结束,“%>”后面跟空格和回车换行都会出错。














原因是由于Servlet 规范不同造成的. 
Servlet1.2规范规定了OutputStream只能获得一次,在jsp中实际上已经通过内置对象out获得过一次,所以在程序里输出excel等文件时需要再getOutoutStream时就会报:OutputStream already obtained, WAS6里面遇上这种情况就直接报错并且不会正确执行输出,而WAS5。0只是报错但是还是允许输出。WAS6实际上对规范的实现更加严格了。

解决方法:将进行输出的jsp改用servlet实现。因为servlet里面没有内置的out对象,所以程序执行etOutoutStream就不会出错


分享到:
评论

相关推荐

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

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

    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()`方法...

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

    关于IllegalStateException: The specified child already has a parent.

    IllegalStateException: The specified child already has a parent.我的博客中有文章讲解

    ListView后台更新报错:java.lang.IllegalStateException

    java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but...

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

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

    spark 核心架包

    解决java.lang.IllegalStateException: unread block data的架包

    spring入门好教程

    《Spring框架:开启Java开发新纪元》 Spring框架,由Rod Johnson创立并由Interface21公司推广,自诞生以来,它就致力于简化Java企业级应用(J2EE)的开发,提供了一种非侵入式的解决方案,极大地提高了开发效率。它...

    xfire访问webservice客户端用到的jar包

    在Java开发中,Web服务(Web Service)是一种标准的接口,允许不同系统之间进行通信,而XFire是早年流行的一款用于构建和消费Web服务的开源框架。它使用SOAP(简单对象访问协议)和XML(可扩展标记语言)作为基础,...

    asm5.0.jar

    2013-08-12 14:33:37.672:... Add CGLIB to your classpath.:java.lang.IncompatibleClassChangeError: class net.sf.cglib.core.DebuggingClassWriter has interface org.objectweb.asm.ClassVisitor as super class

    Jnative1.4_java调用动态库所需jar

    Java是一种高级编程语言,通常用于开发跨平台的应用程序。然而,有时我们可能需要在Java程序中调用操作系统底层的动态链接库(DLLs on Windows,SOs on Linux,dylibs on macOS),以便利用C、C++等语言编写的高性能...

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

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

    The full error is: java.lang.IllegalState

    标题中的"The full error is: java.lang.IllegalStateException"是一个典型的Java编程错误,通常表示在不合法或不适当的状态下调用了某个方法。这个错误通常暗示程序试图执行一个不能在这个特定时刻执行的操作。让...

    oop object , for apple ios developer

    ### 面向对象编程与Objective-C:苹果iOS开发者指南 #### 一、概述 面向对象编程(Object-Oriented Programming, OOP)是一种广泛应用于软件开发中的编程范式,它将程序设计围绕“对象”进行组织。...

    powerbuilder

    ### PowerBuilder 中从 Excel 导入数据到 DataWindow 的实现方法 #### 标题解析: 在 PowerBuilder 开发环境中,经常需要将外部数据源(如 Excel 文件)中的数据导入到程序内部的数据展示组件(DataWindow)中进行...

    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属性,...

    nexus-3.70.1-02-java17-unix.tar.gz

    java.lang.IllegalStateException: The maximum Java version for OrientDb is Java 11. Please check current Java version meets this requirement. 参见: ...

Global site tag (gtag.js) - Google Analytics