- 浏览: 1592378 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
java.lang.IllegalStateException: getOutputStream() has already been called for this response
//strut2 导出excel
//解决问题的代码
//出现异常的原因
//导出 excel
//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; }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 1007public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2285经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5665package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 1007import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1057/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1014//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1828更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1420import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 820import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2401import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 927// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1176import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 806import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1150import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3897import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 970/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1027import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1843Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1013/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2235package out; import ja ...
相关推荐
在Java Web开发中,"getOutputStream() has already been called for this response" 是一个常见的错误,通常出现在使用Servlet或JSP时。这个错误意味着在HTTP响应中,`getOutputStream()`已经被调用,然后尝试再次...
1.在tomcat6.0下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 在tomcat6.0下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),没有...
验证码出现getOutputStream() has already been called for this response错误解决
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
解决了getOutputStream() has already been called for this response. 并将产生验证码的逻辑从JSP页面中分离出来,单独写了一个类 便于重用。
通过仔细审查代码、优化逻辑和正确处理异常,可以有效地解决"Cannot forward after response has been committed"的问题。 关于提供的"filterTest"文件,可能是用于测试过滤器功能的示例代码。分析和理解这段代码...
ServletOutputStream out = response.getOutputStream(); out.write("<html><body>Hello, World!</body></html>".getBytes()); out.flush(); out.close(); ``` 描述中的"InputStream i" 提到了输入流`InputStream`...
标题 "java.lang.IllegalStateException: OutputStream already obtain" 涉及到的是Java编程中的一个常见错误,特别是当处理I/O流时。这个异常通常在尝试获取已经存在的OutputStream实例时抛出,表明该输出流已经被...
本篇将深入探讨`response`设置的实例源码,以及如何在Servlet中应用这些设置。 一、Response对象的基本介绍 `HttpServletResponse`接口是`ServletResponse`接口的子接口,它扩展了通用的响应功能,以适应HTTP协议的...
3. 使用`FileInputStream`读取文件内容,并通过`response.getOutputStream().write()`将内容写入响应流。 通过以上方法,我们可以在处理中文文件名的文件下载时,有效避免乱码问题,确保用户能够正确下载并识别文件...
try (OutputStream out = response.getOutputStream()) { // 使用Apache POI或其他库生成Excel内容并写入out流 } ``` #### 五、动态生成JPEG图像 如果需要动态生成并发送JPEG格式的图像,也需要设置正确的响应...
Returns a boolean indicating whether the named response header has already been set. contextDestroyed(ServletContextEvent) - Method in interface javax.servlet.ServletContextListener Notification ...
OutputStream ou = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); // 设置响应类型为二进制流 // 写入响应流并关闭 ou.write(buffer); ou....
2. getOutputStream():从Servlet中可以通过getOutputStream方法取得ServletOutputStream对象,既可以输出字符数据,也可以输出MIME格式的二进制数据。 3. setContentType():在响应中可以表明内容格式和长度。 4. ...
这里使用了Servlet的`HttpServletResponse`对象,调用其`setContentType`方法设置响应的MIME类型为`image/jpeg`或`image/png`,然后使用`getOutputStream`获取输出流,并调用`ImageIO.write`方法将图片写入。...
在Java Web开发中,`response.jsp`通常是指服务器端的响应页面,主要涉及Servlet和JSP(JavaServer Pages)技术。`response`对象是Servlet API中的一个关键组件,全称为`HttpServletResponse`,它用于构建并发送回...
JSP内置对象request和response详解 JSP内置对象request和response是JSP开发中两个非常重要的对象,它们分别用于处理客户端请求和响应信息。在本文档中,我们将详细介绍request和response对象的功能和使用方法。 ...
ServletOutputStream sos = response.getOutputStream(); //解决中文乱码问题 response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); sos.write(str.getBytes()); } ...
3. `getOutputStream()`:返回ServletOutputStream,用于写入二进制数据到响应体,如文件下载。 4. `getWriter()`:返回PrintWriter,用于写入文本数据到响应体,如HTML、JSON等。 在实际应用中,我们通常会创建一...