java.lang.IllegalStateException java.lang.IllegalStateException: getOutputStream() has already been called for this response在导出Excel表格的时候报这个错是什么原因啊? 如何解决??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 图片验证时,遇到过这个错代码中加上out.clear(); out = pageContext.pushBody(); 试试 getOutputStream() has already been called for this response输出流以及被调用了,你代码里面有2次以上获取 out.getOutputStream()?代码肯定是有问题,把导出的那一段贴出来吧。 String fname = "Customization";// Excel文件名 OutputStream out = response.getOutputStream();// 取得输出流 response.reset();// 清空输出流 response.setHeader("Content-disposition", "attachment; filename=" + fname + ".xls"); // 设定输出文件头,该方法有两个参数,分别表示应答头的名字和值 response.setContentType("application/msexcel"); //查询出所有的数据 List<RequireInfo> rinfo = dao.getAll2(); try { // 将 查询出来的数据 和 输出流对象传入该方法 并输出打印 edao.createFixationSheet(rinfo, out); } catch (IOException e) { System.out.println(e.toString()); e.printStackTrace(); } out.flush(); public void createFixationSheet(List<RequireInfo> resurt, OutputStream out) throws IOException { // 创建 实例一个 Excel 工作薄 也就是 创建一个Excel 的项目 wb = new HSSFWorkbook(); // 设置工作薄的名称 HSSFSheet sheet = wb.createSheet("my sheet"); wb.setSheetName(0, "所有的详细需求", HSSFWorkbook.ENCODING_UTF_16); // 创建row 第一行 HSSFRow row = sheet.createRow((short) 0); // 列宽 sheet.setDefaultColumnWidth((short) 20); sheet.createFreezePane(0, 1); createCell(wb, row, (short) 1, "备注"); if (null != resurt && resurt.size() > 0) { // 循环list数组 并动态打印 行与列 for (int i = 0; i < resurt.size(); i++) { RequireInfo rinfo = resurt.get(i); int cid = resurt.get(i).getCid(); int mid = resurt.get(i).getMid(); SubverCInfo cinfo = dao.getById(cid); ReqAndNum rm = dao.getBymId(mid); if (rinfo != null) { // 创建第N行数据 HSSFRow row2 = sheet.createRow((short) i + 1); createCell(wb, row2, (short) 1, rinfo.getRe()); } } } // 将数据输出 wb.write(out); } response.reset();// 清空输出流这句删掉。建议楼主代码改下。1. 先组Excel报表。2. 在获取Response流。3. 导出。HSSFWorkbook wb = new HSSFWorkbook();String fileName = "A.xls";createReport(wb, list);setHeader(response, fileName);WriteInReportByResponse(response, wb);public void WriteInReportByResponse(HttpServletResponse response,HSSFWorkbook wb) { try { OutputStream op = response.getOutputStream(); wb.write(op); op.flush(); op.close(); } catch (IOException e){ log.error(e.getMessage()); } } public void setHeader(HttpServletResponse response, String fileName) { response.setContentType("application/msexcel"); response.setHeader("Pragma", "public"); response.setHeader("Cache-Control", "max-age=0"); response.setHeader("Content-disposition","attachment; filename="+fileName); } 关于一个request.getParameter()传值的问题 项目开发常识问题 我要为学校开发一个新的邮件系统(有经验的大虾们给点意见) 有关hibernater的一点疑问 请教牛人? htmlParser中NotFilter方法到底怎么用 100分求助iReport报表高手,在线等! tomcat?? 在jbuilder7.0中怎么将外部的一个servlet也包含到发布文件web.xml中? JSP网页向SQLSERVER同时提交7万多字,怎么实现! 网易笔试题 在safari中如何获取 textarea 的value的宽度跟高度
代码中加上
out.clear();
out = pageContext.pushBody();
试试
OutputStream out = response.getOutputStream();// 取得输出流
response.reset();// 清空输出流
response.setHeader("Content-disposition", "attachment; filename="
+ fname + ".xls");
// 设定输出文件头,该方法有两个参数,分别表示应答头的名字和值
response.setContentType("application/msexcel");
//查询出所有的数据
List<RequireInfo> rinfo = dao.getAll2();
try {
// 将 查询出来的数据 和 输出流对象传入该方法 并输出打印
edao.createFixationSheet(rinfo, out);
} catch (IOException e) {
System.out.println(e.toString());
e.printStackTrace();
}
out.flush();
throws IOException { // 创建 实例一个 Excel 工作薄 也就是 创建一个Excel 的项目
wb = new HSSFWorkbook();
// 设置工作薄的名称
HSSFSheet sheet = wb.createSheet("my sheet"); wb.setSheetName(0, "所有的详细需求", HSSFWorkbook.ENCODING_UTF_16);
// 创建row 第一行
HSSFRow row = sheet.createRow((short) 0);
// 列宽
sheet.setDefaultColumnWidth((short) 20); sheet.createFreezePane(0, 1);
createCell(wb, row, (short) 1, "备注"); if (null != resurt && resurt.size() > 0) {
// 循环list数组 并动态打印 行与列
for (int i = 0; i < resurt.size(); i++) {
RequireInfo rinfo = resurt.get(i);
int cid = resurt.get(i).getCid();
int mid = resurt.get(i).getMid();
SubverCInfo cinfo = dao.getById(cid);
ReqAndNum rm = dao.getBymId(mid);
if (rinfo != null) {
// 创建第N行数据
HSSFRow row2 = sheet.createRow((short) i + 1);
createCell(wb, row2, (short) 1, rinfo.getRe());
}
}
}
// 将数据输出
wb.write(out);
}
建议楼主代码改下。1. 先组Excel报表。
2. 在获取Response流。
3. 导出。
HSSFWorkbook wb = new HSSFWorkbook();
String fileName = "A.xls";
createReport(wb, list);
setHeader(response, fileName);
WriteInReportByResponse(response, wb);public void WriteInReportByResponse(HttpServletResponse response,HSSFWorkbook wb) {
try {
OutputStream op = response.getOutputStream();
wb.write(op);
op.flush();
op.close();
} catch (IOException e){
log.error(e.getMessage());
}
}
public void setHeader(HttpServletResponse response, String fileName) {
response.setContentType("application/msexcel");
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=0");
response.setHeader("Content-disposition","attachment; filename="+fileName);
}