JSP下载打包文件及java.lang.IllegalStateException异常解决

别再手动算频谱了!用这个在线FFT工具,5分钟搞定JSON/CSV数据分析 本文介绍了一款高效的在线FFT工具,帮助用户快速分析JSON/CSV格式的时域数据,5分钟内完成频谱分析。通过傅里叶变换(FFT)算法,大幅提升计算效率,解决传统手动计算的痛点,适用于工业振动分析、设备故障诊断等场景。 阅读详情

     项目需求的缘故,需要把备份数据库表的文件及生成的SQL脚本打包下载(本想做成可以浏览目录的方式,不得,故采用该种方法),从网上找了点资料:下载采用了
    org.apache.tools.zip.*;(
使用时把ant.jar放到classpath中,程序中使用import org.apache.tools.zip.*; 
Apache Ant 下载地址:[url]http://ant.apache.org/[/url] 
),因JDK本身的java.util.zip有中文乱码问题;
代码如下:
   <%@page import="java.util.*"%>
<%@page import="java.io.*"%>
<%@page import="org.apache.commons.lang.*" %>
<%@page import="com.cupdata.util.*" %>
<%@page import="org.apache.tools.zip.*" %>
<%
//读取文件集合
ArrayList<File>  files = FileUtil.getFiles(savePath);//传入保存文件的路径savePath,并读取文件集合,代码就不写了,呵呵

//设置浏览器显示的内容类型为Zip  
      response.setContentType("application/zip");  
      //设置内容作为附件下载,并且名字为:export.zip  
      response.setHeader("Content-Disposition", "attachment; filename= export.zip");  
        
      //装饰输出流为Zip输出流  
      ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());          
     
        
      //读取文件的缓存  
      byte[] buffer = new byte[1024];  
      int length = 0;  
        
      for (File file:files) { 
            
          //向Zip中添加一个条目(也就是添加一个文件)  
          zos.putNextEntry(new ZipEntry(file.getPath()));  
            
          //读取文件数据写到ZipOutputStream  
          BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));  
          while((length = bis.read(buffer))!=-1){  
              zos.write(buffer);  
          }  
            
          //关闭zip条目  
          zos.closeEntry();  
          bis.close();   
        }  
        
      zos.flush();  
      zos.close();    
      out.clear(); 
      out = pageContext.pushBody();   
%>

    最后两句 out.clear();     out = pageContext.pushBody();   ,如果不加,由于项目采用的框架在请求返回中有调用response.getWriter().write(out),导致抛异常
   java.lang.IllegalStateException: getOutputStream() has already been called for this response;


   网上查了查,说是getWriter和getgetOutputStream不能同时用,又从网上下了Servlet规范,确认了下:
   public ServletOutputStream getOutputStream()
throws IOException
Returns a ServletOutputStream suitable for writing binary data in the
response. The servlet container does not encode the binary data.
Calling flush() on the ServletOutputStream commits the response. Either this
method or getWriter() may be called to write the body, not both.
Returns: a ServletOutputStream for writing binary data
Throws:
IllegalStateException - if the getWriter method has been called on this
response
IOException - if an input or output exception occurred
 看来确实如此;


那么这两句话是什么意思呢?
JSP容器在处理完成请求后会调用releasePageContext方法释放所有的PageContextObject,并且同时调用getWriter方法。由于getWriter方法与在JSP页面中使用流相关的getOutputStream方法冲突,所以会造成这种异常;
pushBody()的作用是保存当前的out对象,并更新PageContext中Page范围内Out对象;

将out对象重置,从而解决了冲突;

注:本文主要参考以下四篇博文:
         http://www.pin5i.com/showtopic-23328.html
         http://alex295111.iteye.com/blog/519004
         http://xiangxingchina.iteye.com/blog/748233
         http://xiaodiandian.iteye.com/blog/662995

ESD防护设计宝典(二十三):ESD与EOS失效差异分析 ESD和EOS是电子制造业面临的两大挑战,随着电子产品向更高集成度、更低工作电压和更高工作频率发展,这一问题将更加突出。根据美国军方上世纪八十年代与可靠性分析中心(RAC)共同建立的现场失效返回程序(FFRP)统计数据,产品现场返回中EOS占比高达46%,而ESD仅占6%,另有6%的案例难以区分是EOS还是ESD。 阅读详情

相关推荐

Fastp实战指南:高效处理fastq数据的质控技巧

本文是Fastp实战指南,详细介绍了如何使用Fastp工具高效处理fastq数据的质控技巧。从数据清洗的必要性、基础命令解析,到高级参数定制、UMI数据处理及批量自动化流程,提供一站式解决方案。Fastp以其“All-in-One”的快速质控能力,帮助用户确保测序数据质量,为后续生物信息学分析奠定可靠基础。

weixin_29254029的博客 391

下载文件异常-java.lang.IllegalStateException: getOutputStream() has already been called for this response

在写文件的时候,系统已经调用了getOutputStream()方法;如果接口还返回了其它数据,这样会造成2次调用getOutputStream(),所以报了此错误;在respone中已经调用了getOutputStream()方法。说系统应该调用了多次;所有只要接口不再返回数据的话,系统就不会再报以上错误。(当然不影响业务正常导出)

shgh_2004的专栏 1102

SCDM学习笔记(5)

几何前处理后一般会获得几何的固体区域,然而当进行流体仿真的时候是对流体的区域进行计算的。因此,如何快速地从固体的几何模型获得流体的几何模型是一个重点问题。 流体问题一般可分为内流场与外流场问题,对于内流场问题,SCDM有专门的处理工具 工程图纸大致如下: 要创建这个几何的大致策略是画出截面的圆形,再画出轴线,通过扫掠的方式建立几何。 以上是mixing的国体区域,通过体积抽...

diyhoo的编程小屋 6358

【java.io.FileNotFoundException】: 下载文件项目

今天,做一个下载资源的案例,通过 this.getServletContext.getRealPath,获取到绝对路径后,再使用文件输入流读取文件时,老是报错,仔细检查发现读取的路径不正确。这是因为 资源没有在web文件夹下,如果资源在src包中,就会出现这种情况。 ...

qq_38777882的博客 949

SCU【C】程序设计基础期末安全项目lab2-Deadbeef-writeup(附题目&源码)

项目名称(本质:栈溢出攻击)【源码在文首】和lab1一样,此题又是美国卡耐基梅隆大学的平时作业哈哈哈! 项目要求是把栈溢出,强行更改函数返回值,输出0xdeadbeef。

2301_79586491的博客 1544

STM32CubeIDE串口打印浮点数踩坑实录:5分钟搞定printf输出小数(附完整配置截图)

本文针对STM32CubeIDE中串口无法打印浮点数的常见问题,提供了详细的解决方案。核心在于通过添加“-u _printf_float”链接器参数,启用标准库的浮点数格式化支持。文章附有完整的配置截图和步骤,并提供了系统性的排查清单,帮助开发者快速解决printf输出小数的问题。

weixin_29163797的博客 344

java.lang.IllegalStateException: getOutputStream() has already been called for this response解决方案

原因:在JSP页面释放资源的时候,调用了ServetResponse.getWriter()方法 。1、Jsp解决办法,在程序的最后添加:<% out.clear(); out = pageContext.pushBody(); %> <form id="queryForm2" > </form>2、Struts2解决办法 直接让action中的处理

culous的博客 1456

SAP Fiori Launchpad 上看不到任何 tile 应该怎么办?

中心UI组件是一个框架,为所有SAPFiori应用程序提供公共基础设施SAPFiorilaunchpad是所有SAPFioriUI的基础,并为SAPFiori应用程序提供基本功能,如登录,界面大小,应用程序之间的导航,和基于角色的应用程序目录。ABAP前端服务器包含所有基础设施组件,用于为客户端生成SAPFiori应用程序特定的UI,并与SAPBusinessSuite后端系统通信。SAPFiori应用程序的处理过程如下首先,客户端加载SAPFiori应用程序的界面。...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 943

【SSM】关于SSM项目出现 “调用 init 方法失败;嵌套异常是 java.lang.IllegalStateException: Ambiguous mapping。”问题的解决方案

摘要

Jerry‘s word 2293

云端全自动AI漫剧生成工作流:从模型选型到完整实现

本文提出了一套云端全自动AI漫剧生成工作流解决方案,旨在解决传统漫剧制作效率低下的问题。该系统采用"编排引擎+模型矩阵"架构,通过集成大语言模型、图像生成、视频合成等技术,实现从剧本输入到成片输出的全流程自动化。 核心内容包括: 模型选型方案:剧本解析采用DeepSeek-V3/GPT-4o,图像生成使用DALL-E 3,视频合成选用Stable Video Diffusion,语音合成采用MiniMax TTS 系统架构设计:基于Celery分布式任务队列的编排层,分解任务至各功能模块

huanghm88的专栏 645

手把手教你学AUTOSAR(13.1)--基于 AUTOSAR 的开发实战实例(一)

通过上述几个基于 AUTOSAR 的开发实战实例,你可以全面了解如何从需求分析、系统设计、软件开发、集成测试到部署和验证等多个环节进行 AUTOSAR 系统的开发。这些实例不仅涵盖了不同的应用场景,还提供了具体的代码实现和技术细节,帮助你更好地应用 AUTOSAR 标准。

MHD0815的博客 1195

java 实例化异常_bean的实例化失败,嵌套异常为java.lang.ExceptionInInitializerError

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.lansoft.isp.api.BsWoCircuitService': Instantiation of bean failed; nested excepti...

weixin_29191669的博客 993

C#操作MySQL从入门到精通(1)——安装MySQL数据库

我们使用C#操作MySQL数据库第一步要做的就是安装MySQL数据库,本文就是详细讲解如何安装MySQL数据库。

qq_34059233的博客 963

java.lang.IllegalStateException异常:简单分析和简单解决方案

今天写java文件下载程序,完成后使用一切正常,但是总抛出java.lang.IllegalStateException异常,虽然并不影响正常使用,但看了总让人觉得很不舒服,检查代码并没有错,最后上网查了不少资料,终于发现原因之所在。 我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流. 例如在action中使用:     response.reset();     r

a1304317638的专栏 7万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

springboot项目java.lang.IllegalStateException

1异常时后台的内容 java.lang.IllegalStateException: getOutputStream() has already been called for this response at org.apache.catalina.connector.Response.getWriter(Response.java:625) ~[tomcat-embed-core-8.5...

weixin_45337695的博客 1398

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案

我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流.例如在JSP使用:    response.reset();    response.setContentType(”application/vnd.ms-excel”);    OutputStream os = response.getOutputStream();  抛出异常:ERROR [Engine] StandardW

zhaosg198312的专栏 4912

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java.lang.IllegalStateException异常产生的原因及解决办法

java.lang.IllegalStateException异常产生的原因及解决办法   2011-01-24 17:28:53|  分类: JAVA&&JSP经典 |  标签:response  servlet  committed  jsp  to  |举报|字号 订阅       

evilcry2012的专栏 32万+

关于Springboot文件下载异常:getOutputStream() has already been called for this response 解决

使用Springboot做文件下载的时候报出了一下错误: java.lang.IllegalStateException: getOutputStream() has already been called for this response at org.apache.catalina.connector.Response.getWriter(Response.java:599) at org....

to_biubiu的博客 1万+

关于 java 上传,下载和导入报java.lang.IllegalStateException异常解决办法

java.lang.IllegalStateException异常解决办法 最近在使用response.sendRedirect()时出现如下错误:java.lang.IllegalStateException org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java...

a010655的专栏 447

下载文件时报异常:java.lang.IllegalStateException: getOutputStream() has already been called for this respons

jsp下载文件时报错。 java.lang.IllegalStateException: getOutputStream() has already been called for this response at org.apache.catalina.connector.Response.getWriter(Response.java:582) at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacad...

竖子不足与谋的博客 700

【Servlet+Struts2】文件下载时抛出java.lang.IllegalStateException异常的解决方法

java.lang.IllegalStateException这种异常,不代表文件不能下载,不代表程序写错,它在Tomcat抛出完异常之后依然能够正常运行的。只是看着不爽而已,每次下载都要在Tomcat抛出一大堆异常。 java.lang.IllegalStateException主要是用了后台把文件丢进respond的缓冲区,然后respond再把下载的文件扔回JSP的情况所造成的。Servl

编程记录,亲测有效 1961

java.lang.IllegalStateException异常:原因分析和解决方法

今天写Java文件下载程序,完成后使用一切正常,但是总抛出java.lang.IllegalStateException异常,虽然并不影响正常使用,但看了总让人觉得很不舒服,检查代码并没有错,最后上网查了不少资料,终于发现原因之所在。 我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流. 例如在action中使用:     response.reset();    

ghjzzhg的博客 9201

jxl导出EXCEL的java.lang.IllegalStateException异常

 http://blog.csdn.net/patriotlml/archive/2007/05/28/1628556.aspx我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流.例如在JSP使用:    response.reset();    response.setContentType(”application/vnd.ms-excel”);    OutputStre

流氓猪的窝 3060

java.lang.IllegalStateException: getOutputStream() has already been called for this response

1.问题描述:   在日常练习的时候遇见的错误,虽然页面可以顺利显示,但后台报错:(虽然不影响导出效果,但看到后台的异常,内心还是不舒服的) java.lang.IllegalStateException: getOutputStream() has already been called for this response 从字义上分析:getOutputStream()已经调用了这个响应,就是重复被调用引起的异常。 2.问题分析:   在tomcat下jsp出现该错误一般都是在使用了输出流(如...

rizon886的博客 3722

java.lang.IllegalStateException异常:简单的分析和简单解决方案

我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流. 例如在action中使用:     response.reset();     response.setContentType(”application/vnd.ms-excel”);     OutputStream os = response.getOutputStream();   抛出异常:java.lang....

weixin_30547797的博客 696
上一篇: 理解Javascript的闭包
下一篇: 获取数据库服务器时间
sun8288
博客等级 码龄22年 10粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值