项目需求的缘故,需要把备份数据库表的文件及生成的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
相关推荐
Fastp实战指南:高效处理fastq数据的质控技巧
本文是Fastp实战指南,详细介绍了如何使用Fastp工具高效处理fastq数据的质控技巧。从数据清洗的必要性、基础命令解析,到高级参数定制、UMI数据处理及批量自动化流程,提供一站式解决方案。Fastp以其“All-in-One”的快速质控能力,帮助用户确保测序数据质量,为后续生物信息学分析奠定可靠基础。
下载文件异常-java.lang.IllegalStateException: getOutputStream() has already been called for this response
在写文件的时候,系统已经调用了getOutputStream()方法;如果接口还返回了其它数据,这样会造成2次调用getOutputStream(),所以报了此错误;在respone中已经调用了getOutputStream()方法。说系统应该调用了多次;所有只要接口不再返回数据的话,系统就不会再报以上错误。(当然不影响业务正常导出)
SCDM学习笔记(5)
几何前处理后一般会获得几何的固体区域,然而当进行流体仿真的时候是对流体的区域进行计算的。因此,如何快速地从固体的几何模型获得流体的几何模型是一个重点问题。 流体问题一般可分为内流场与外流场问题,对于内流场问题,SCDM有专门的处理工具 工程图纸大致如下: 要创建这个几何的大致策略是画出截面的圆形,再画出轴线,通过扫掠的方式建立几何。 以上是mixing的国体区域,通过体积抽...
【java.io.FileNotFoundException】: 下载文件项目
今天,做一个下载资源的案例,通过 this.getServletContext.getRealPath,获取到绝对路径后,再使用文件输入流读取文件时,老是报错,仔细检查发现读取的路径不正确。这是因为 资源没有在web文件夹下,如果资源在src包中,就会出现这种情况。 ...
SCU【C】程序设计基础期末安全项目lab2-Deadbeef-writeup(附题目&源码)
项目名称(本质:栈溢出攻击)【源码在文首】和lab1一样,此题又是美国卡耐基梅隆大学的平时作业哈哈哈! 项目要求是把栈溢出,强行更改函数返回值,输出0xdeadbeef。
STM32CubeIDE串口打印浮点数踩坑实录:5分钟搞定printf输出小数(附完整配置截图)
本文针对STM32CubeIDE中串口无法打印浮点数的常见问题,提供了详细的解决方案。核心在于通过添加“-u _printf_float”链接器参数,启用标准库的浮点数格式化支持。文章附有完整的配置截图和步骤,并提供了系统性的排查清单,帮助开发者快速解决printf输出小数的问题。
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中的处理
SAP Fiori Launchpad 上看不到任何 tile 应该怎么办?
中心UI组件是一个框架,为所有SAPFiori应用程序提供公共基础设施SAPFiorilaunchpad是所有SAPFioriUI的基础,并为SAPFiori应用程序提供基本功能,如登录,界面大小,应用程序之间的导航,和基于角色的应用程序目录。ABAP前端服务器包含所有基础设施组件,用于为客户端生成SAPFiori应用程序特定的UI,并与SAPBusinessSuite后端系统通信。SAPFiori应用程序的处理过程如下首先,客户端加载SAPFiori应用程序的界面。...
【SSM】关于SSM项目出现 “调用 init 方法失败;嵌套异常是 java.lang.IllegalStateException: Ambiguous mapping。”问题的解决方案
摘要
云端全自动AI漫剧生成工作流:从模型选型到完整实现
本文提出了一套云端全自动AI漫剧生成工作流解决方案,旨在解决传统漫剧制作效率低下的问题。该系统采用"编排引擎+模型矩阵"架构,通过集成大语言模型、图像生成、视频合成等技术,实现从剧本输入到成片输出的全流程自动化。 核心内容包括: 模型选型方案:剧本解析采用DeepSeek-V3/GPT-4o,图像生成使用DALL-E 3,视频合成选用Stable Video Diffusion,语音合成采用MiniMax TTS 系统架构设计:基于Celery分布式任务队列的编排层,分解任务至各功能模块
手把手教你学AUTOSAR(13.1)--基于 AUTOSAR 的开发实战实例(一)
通过上述几个基于 AUTOSAR 的开发实战实例,你可以全面了解如何从需求分析、系统设计、软件开发、集成测试到部署和验证等多个环节进行 AUTOSAR 系统的开发。这些实例不仅涵盖了不同的应用场景,还提供了具体的代码实现和技术细节,帮助你更好地应用 AUTOSAR 标准。
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...
C#操作MySQL从入门到精通(1)——安装MySQL数据库
我们使用C#操作MySQL数据库第一步要做的就是安装MySQL数据库,本文就是详细讲解如何安装MySQL数据库。
java.lang.IllegalStateException异常:简单分析和简单解决方案
今天写java文件下载程序,完成后使用一切正常,但是总抛出java.lang.IllegalStateException异常,虽然并不影响正常使用,但看了总让人觉得很不舒服,检查代码并没有错,最后上网查了不少资料,终于发现原因之所在。 我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流. 例如在action中使用: response.reset(); r
复分析 阿尔福斯(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...
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案
我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流.例如在JSP使用: response.reset(); response.setContentType(”application/vnd.ms-excel”); OutputStream os = response.getOutputStream(); 抛出异常:ERROR [Engine] StandardW
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
java.lang.IllegalStateException异常产生的原因及解决办法
java.lang.IllegalStateException异常产生的原因及解决办法 2011-01-24 17:28:53| 分类: JAVA&&JSP经典 | 标签:response servlet committed jsp to |举报|字号 订阅
关于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....
关于 java 上传,下载和导入报java.lang.IllegalStateException异常解决办法
java.lang.IllegalStateException异常解决办法 最近在使用response.sendRedirect()时出现如下错误:java.lang.IllegalStateException org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java...
下载文件时报异常: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...
【Servlet+Struts2】文件下载时抛出java.lang.IllegalStateException异常的解决方法
java.lang.IllegalStateException这种异常,不代表文件不能下载,不代表程序写错,它在Tomcat抛出完异常之后依然能够正常运行的。只是看着不爽而已,每次下载都要在Tomcat抛出一大堆异常。 java.lang.IllegalStateException主要是用了后台把文件丢进respond的缓冲区,然后respond再把下载的文件扔回JSP的情况所造成的。Servl
java.lang.IllegalStateException异常:原因分析和解决方法
今天写Java文件下载程序,完成后使用一切正常,但是总抛出java.lang.IllegalStateException异常,虽然并不影响正常使用,但看了总让人觉得很不舒服,检查代码并没有错,最后上网查了不少资料,终于发现原因之所在。 我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流. 例如在action中使用: response.reset();
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
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出现该错误一般都是在使用了输出流(如...
java.lang.IllegalStateException异常:简单的分析和简单解决方案
我们在做文件上传或者下载,或者过滤等操作时,可能要用到页面的输出流. 例如在action中使用: response.reset(); response.setContentType(”application/vnd.ms-excel”); OutputStream os = response.getOutputStream(); 抛出异常:java.lang....
391



被折叠的 条评论
为什么被折叠?



