`
Luob.
  • 浏览: 1573493 次
  • 来自: 上海
社区版块
存档分类
最新评论

解决getOutputStream() has already been called for this response

阅读更多
java.lang.IllegalStateException: getOutputStream() has already been called for this response

//strut2 导出excel


//解决问题的代码
HSSFWorkbook workbook=productEcel(list,partTimer);
				response.reset();
				response.setContentType("contentType=application/vnd.ms-excel");
				response.setHeader("Content-disposition","attachment;filename="+URLEncoder.encode("统计.xls","utf-8")); 
				workbook.write(response.getOutputStream());
				response.flushBuffer();



//出现异常的原因
产生这样的异常原因:是web容器生成的servlet代码中有out.write(""),这个和JSP中调用的response.getOutputStream()产生冲突.即Servlet规范说明,不能既调用response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出IllegalStateException,因为在jsp中,out变量实际上是通过response.getWriter得到的,你的程序中既用了response.getOutputStream,又用了out变量,故出现以上错误。



//导出 excel
public String exportRedactor(){
		HttpServletRequest request =this.getRequest();
		HttpServletResponse response=null;
		FbbServiceClient service=null;
		ManagerUser user= (ManagerUser)request.getSession(true).getAttribute(Constants.SESSION_USER);
		InputStream is = null;
		PrintWriter out=null;
		try {
			method="";
			response=this.getResponse();
			response.setCharacterEncoding("utf-8");
			
			service=new FbbServiceClient();
			FbbService.Client client=service.open();
			if(partTimer == null)
				partTimer = new PartTimer();
			partTimer.setSourceId(2);
			List<PartTimer> list = client.getStatisticsPartTimer(user.getId(), user.getSignature(), partTimer);
			String result="";
			
			if(list==null || list.size()<=0){
				request.setAttribute("msg","没有数据需要导出");
				return SUCCESS; 
			}else{HSSFWorkbook workbook=productEcel(list,partTimer);
				response.reset();
				response.setContentType("contentType=application/vnd.ms-excel");
				response.setHeader("Content-disposition","attachment;filename="+URLEncoder.encode("统计.xls","utf-8")); 
				workbook.write(response.getOutputStream());
				response.flushBuffer();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("msg","导出数据出现异常");
			logger.error("errorcode ::: " + e.getMessage(), e);
		}finally{
			if(service!=null)
				service.close();
			if(out!=null){
				try {
					out.close();
				} catch (Exception e) {
					logger.error("errorcode ::: " + e.getMessage(), e);
				}
			}
			
			if(is!=null){
				try {
					is.close();
				} catch (Exception e) {
					logger.error("errorcode ::: " + e.getMessage(), e);
				}
			}
		}
		return NONE;



private HSSFWorkbook productEcel(List<PartTimer> list,PartTimer partTimer) throws Exception {

		// 创建工作表和标题
		HSSFWorkbook workbook = null;
		try {
			workbook = new HSSFWorkbook();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		// 定义字体
		HSSFFont celltbnamefont = workbook.createFont();
		celltbnamefont.setFontHeightInPoints((short) 12); // 字体大小
		celltbnamefont.setColor((short) (HSSFFont.COLOR_NORMAL)); // 颜色
		celltbnamefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 粗体
		

		
		
		// 定义 date 的数据样式
		HSSFCellStyle datestyle = workbook.createCellStyle();
		HSSFDataFormat df = workbook.createDataFormat();
		datestyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);
		datestyle.setDataFormat(df.getFormat("yyyy-mm-dd hh:mm:ss"));

		// 定义 int 的数据样式
		HSSFCellStyle intdatestyle = workbook.createCellStyle();
		intdatestyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);

		// 定义 float 的数据样式
		HSSFCellStyle floatdatestyle = workbook.createCellStyle();
		floatdatestyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);
		df = workbook.createDataFormat();
		floatdatestyle.setDataFormat(df.getFormat("#.##"));

		// 定义 long 的数据样式
		HSSFCellStyle longdatestyle = workbook.createCellStyle();
		longdatestyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);

		//title样式
		HSSFCellStyle titledatestyle = workbook.createCellStyle();
		titledatestyle.setAlignment((short) HSSFCellStyle.ALIGN_CENTER_SELECTION);
		titledatestyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		//titledatestyle.setFillBackgroundColor(HSSFColor.BLUE.index2);
		titledatestyle.setFont(celltbnamefont);
			
		// 定义列的样式
		HSSFCellStyle items_style = workbook.createCellStyle();
		items_style.setAlignment((short) HSSFCellStyle.ALIGN_CENTER); // 设置对其方式
		items_style.setFont(celltbnamefont);
		items_style.setWrapText(false); // 设置自动换行
		items_style.setFillForegroundColor(HSSFColor.ROSE.index);// 设置背景色
		items_style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		items_style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
		items_style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
		items_style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
		items_style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
		
		HSSFCellStyle row_style = workbook.createCellStyle();
		titledatestyle.setAlignment((short) HSSFCellStyle.ALIGN_CENTER_SELECTION);
		titledatestyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		
		/*
		row_style.setAlignment((short) HSSFCellStyle.ALIGN_CENTER); // 设置对其方式
		row_style.setFont(celltbnamefont);
		row_style.setWrapText(false); // 设置自动换行
		row_style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		row_style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
		row_style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
		row_style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
		row_style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
		*/
		
		
		int rowIndex = 0;
		String sheetName="兼职信息及酬劳统计";
		String head="兼职信息及酬劳统计";
		if(!Misc.isStringEmpty(partTimer.getStime())){
			head+="(时间:"+partTimer.getStime()+"-"+partTimer.getEtime()+")";
		}
		
		HSSFSheet sheet = workbook.createSheet(sheetName); // 创建工作区
		//sheet.setDefaultRowHeightInPoints(100);
		//sheet.setDefaultRowHeight((short)100);
		
		
		//合并14列 用于写 表格名称
		Region region = new Region();
	    region.setRowFrom(0);
        region.setRowFrom(0);
        region.setColumnFrom((short)0);
        region.setColumnTo((short)14);
        sheet.addMergedRegion(region);
        
        //将list 数据 打印到表格中
      	HSSFCell cell;
      	
      	//表头信息
		HSSFRow heandRow =  sheet.createRow((short) rowIndex);
		cell=heandRow.createCell(0);
		cell.setCellStyle(titledatestyle);
		cell.setCellValue(head);
		heandRow.setHeightInPoints(30);
		
		
		
		// 创建数据列名
		String titles[] = {"序号","姓名","xx名","xxID","性别","QQ","手机", "微信","微博名及粉丝","应发数量","实发数量","审核通过数","酬劳","支付宝","备注"};

		HSSFRow row =sheet.createRow((short) (++rowIndex));
		// 加入 标题
		for (int i = 0; i < titles.length; i++) {
			cell = row.createCell(i, Cell.CELL_TYPE_STRING); // 设置 列类型
			if (i ==8 || i ==11 || i==14) {
				sheet.setColumnWidth(i, 5500);
			} else {
				sheet.setColumnWidth(i, 4000);
			}
			cell.setCellValue(titles[i]);
			cell.setCellStyle(items_style);
		}
		Iterator<PartTimer> it = list.iterator();
		int index=0;
		while (it.hasNext()) {
			HSSFRow dataRow = sheet.createRow((short) (++rowIndex));
			dataRow.setHeightInPoints(20);
			dataRow.setRowStyle(row_style);
			
			PartTimer obj = it.next();
			cell = dataRow.createCell(0, Cell.CELL_TYPE_NUMERIC);
			cell.setCellStyle(longdatestyle);
			cell.setCellValue(++index);

			cell = dataRow.createCell(1, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getRealName());

			cell = dataRow.createCell(2, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getUserName());

			cell = dataRow.createCell(3, Cell.CELL_TYPE_NUMERIC);
			cell.setCellStyle(longdatestyle);
			cell.setCellValue(obj.getId());
			
			cell = dataRow.createCell(4, Cell.CELL_TYPE_STRING);
			cell.setCellValue( "1".equals(obj.getPgender()) ? "男":"女");
			
			cell = dataRow.createCell(5, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getPqq());
			
			cell = dataRow.createCell(6, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getPmobile());
			
			cell = dataRow.createCell(7, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getPweixin());
			
			cell = dataRow.createCell(8, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getPweibo());
			
			cell = dataRow.createCell(9, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getRequire());
			
			cell = dataRow.createCell(10, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getPicCount());
			
			cell = dataRow.createCell(11, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getPassCount());
			
			
			cell = dataRow.createCell(12, Cell.CELL_TYPE_NUMERIC);
			cell.setCellStyle(floatdatestyle);
			cell.setCellValue(obj.getRepay());
			
			cell = dataRow.createCell(13, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getAlipay());
			
			cell = dataRow.createCell(14, Cell.CELL_TYPE_STRING);
			cell.setCellValue(obj.getRemark());
			
		}
		//sheet.setColumnWidth(9, 2730);
		//sheet.setColumnWidth(12, 2730);
	
		
		
		/*HSSFRow dataRow = sheet.createRow((short) (++rowIndex));
		cell = dataRow.createCell(0, Cell.CELL_TYPE_STRING);
		cell.setCellStyle(intdatestyle);
		cell.setCellValue("合计:");

		cell = dataRow.createCell(1, Cell.CELL_TYPE_STRING);
		cell.setCellValue("");

		// 添加 公式
		cell = dataRow.createCell(2, Cell.CELL_TYPE_NUMERIC);
		cell.setCellStyle(longdatestyle);
		cell.setCellFormula("SUM(" + getColLetter(2)
				+ sheet.getRow(2).getCell(2).getRowIndex() + ":"
				+ getColLetter(2)
				+ sheet.getRow(sheet.getLastRowNum()).getCell(2).getRowIndex()
				+ ")");
		// 添加 公式
		cell = dataRow.createCell(3, Cell.CELL_TYPE_NUMERIC);
		cell.setCellStyle(longdatestyle);
		cell.setCellFormula("SUM(" + getColLetter(3)
				+ sheet.getRow(2).getCell(3).getRowIndex() + ":"
				+ getColLetter(3)
				+ sheet.getRow(sheet.getLastRowNum()).getCell(3).getRowIndex()
				+ ")");*/
		
		/*String workDir = ServletActionContext.getServletContext().getRealPath("/");

		String workddd = workDir.replaceAll("\\\\", "/");

		Calendar calendar = Calendar.getInstance();
		String month = calendar.get(Calendar.YEAR) + "/"
				+ (calendar.get(Calendar.MONTH) + 1);
		String filePath = "newsxls/adxls/" + month + "/";
		File f = new File(workDir + filePath);
		if (!f.isDirectory()) {
			f.mkdirs();
		}

		String fileNameCode = java.util.UUID.randomUUID().toString();
		String completeFilePath = workddd + filePath + fileNameCode + ".xls";
		FileOutputStream fileOut = new FileOutputStream(completeFilePath);
		workbook.write(fileOut);
		fileOut.flush();
		fileOut.close();*/
		
		return workbook;
	}
分享到:
评论

相关推荐

    埃森哲制药企业数字化转型项目顶层规划方案glq.pptx

    埃森哲制药企业数字化转型项目顶层规划方案glq.pptx

    华为OD机试D卷 - 机场航班调度程序 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    基于FPGA读取设计的心电图代码源码+全部资料齐全.zip

    【资源说明】 基于FPGA读取设计的心电图代码源码+全部资料齐全.zip基于FPGA读取设计的心电图代码源码+全部资料齐全.zip 【备注】 1、该项目是高分课程设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    基于Hadoop平台的分布式搜索引擎的设计与实现+部署文档+全部资料 高分项目.zip

    【资源说明】 基于Hadoop平台的分布式搜索引擎的设计与实现+部署文档+全部资料 高分项目.zip基于Hadoop平台的分布式搜索引擎的设计与实现+部署文档+全部资料 高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    华为OD机试D卷 - 数的分解 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    基于Hadoop的智能购书系统的设计与实现+部署文档+全部资料 高分项目.zip

    【资源说明】 基于Hadoop的智能购书系统的设计与实现+部署文档+全部资料 高分项目.zip基于Hadoop的智能购书系统的设计与实现+部署文档+全部资料 高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    setuptools-27.2.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于 python 在树莓派上面实现摄像头视频人脸识别

    【作品名称】:基于 python 在树莓派上面实现摄像头视频人脸识别 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于 python 在树莓派上面实现摄像头视频人脸识别

    setuptools-28.4.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-16.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-68.2.0-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于MQTT的校园新闻APP原生Android源码.zip

    基于MQTT的校园新闻APP原生Android源码.zip基于MQTT的校园新闻APP原生Android源码.zip基于MQTT的校园新闻APP原生Android源码.zip基于MQTT的校园新闻APP原生Android源码.zip基于MQTT的校园新闻APP原生Android源码.zip基于MQTT的校园新闻APP原生Android源码.zip基于MQTT的校园新闻APP原生Android源码.zip基于MQTT的校园新闻APP原生Android源码.zip

    setuptools-0.9.8-py2.py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    电压检测系统(含VB上位机+下位机程序)proteus仿真+程序资料

    【作品名称】:电压检测系统(含VB上位机+下位机程序)proteus仿真+程序资料 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:电压检测系统(含VB上位机+下位机程序)proteus仿真+程序资料

    第三讲python基础day03.zip

    第三讲python基础day03.zip

    电子周跟踪:AI市场竞争加剧,AIPC加速落地,关注联想4月18日科技创新大会.pdf

    电子元件 电子行业 行业分析 数据分析 数据报告 行业报告

    华中科技大学电信专业 课程资料 作业 代码 实验报告-操作系统-内含源码和说明书.zip

    华中科技大学电信专业 课程资料 作业 代码 实验报告-操作系统-内含源码和说明书.zip

    基于Hadoop的VGI矢量空间数据管理方法研究.docx

    本研究提出了基于Hadoop的VGI矢量空间数据管理方法,旨在解决VGI数据管理中的诸多挑战。通过利用Hadoop的分布式计算平台,实现了对VGI数据的高效管理和分析,提高了数据的准确性和一致性。 适用人群:本研究的方法适用于地理信息系统领域的研究人员、空间数据管理者、以及对VGI数据感兴趣的社会学者和政策制定者。 使用场景及目标:该方法可以应用于处理大量VGI数据的管理和分析,为地理信息系统的应用提供更准确、更及时的数据支持。在实际场景中,可以用于城市规划、交通管理、环境监测等领域的数据处理和分析工作,促进社会各个领域的发展和进步。 其他说明:通过实验和案例分析验证了基于Hadoop的VGI矢量空间数据管理方法的有效性和可行性,展示了其在实际应用中的优势和潜力。该方法对于推动VGI数据的管理和应用具有重要的意义,为地理信息系统和空间数据管理领域的进步提供了新的思路和方法。

    电子设备行业专题研究:新型显示系列报告之一:显示技术演进之路,Mini LED承前启后.pdf

    电子元件 电子行业 行业分析 数据分析 数据报告 行业报告

    基于FPGA减法器、移位寄存器VHDL语言源码+全部资料齐全.zip

    【资源说明】 基于FPGA减法器、移位寄存器VHDL语言源码+全部资料齐全.zip基于FPGA减法器、移位寄存器VHDL语言源码+全部资料齐全.zip 【备注】 1、该项目是高分课程设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

Global site tag (gtag.js) - Google Analytics