首先说一下背景,公司某项目年代久远,大致环境要求如下:不可使用servlet(配置文件更新管理杂乱);基本框架没有,大部分是原始的JSP2.0。这对习惯了热门框架的开发人员来说是一种非常糟糕的体验,不仅维护难度大,并且扩展性极差。但是,还是硬着头皮去做。
主要软件环境:POI3.1,Jsp2.0,JDK1.7
示例代码如下:
1.前端页面,提供一个下载链接
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Get excel</title> <script type="text/javascript"> function go_excel(){ var ff = document.myform; ff.action = "/test/pages/do_act.jsp"; ff.target = "hidden_frame" ff.submit(); } </script> </head> <body> <form method="post" onsubmit="return false;" name="myform"> <input type="hidden" name="file_num" value="1"> <h2>Files to download</h2> <a href="javascript:go_excel()">Download</a> <iframe name="hidden_frame" src="" frameborder="0" width="0" height="0" scrolling="yes" marginheight="0" marginwidth="0"></iframe> </form> </body> </html>
2使用JSP作为action处理:
<%@page import="com.yan.service.ExcelExport"%> <%@page import="java.io.FileInputStream"%> <%@page import="java.io.OutputStream"%> <%@page import="java.io.File"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String value = request.getParameter("file_num"); String path = request.getSession().getServletContext().getRealPath(""); path = path.replace("\\", "/"); String file_name = ""; File file = null; if("1".equals(value)){ file_name = "test_xls.xls"; ExcelExport eep = new ExcelExport(path); eep.generateFile(request); file = new File(path+"/test_xls.xls"); } response.setHeader("Content-disposition", "attachment;filename="+file_name); response.setContentType("application/vnd.ms-excel"); long length = file.length(); response.setHeader("Content_Length", String.valueOf(length)); OutputStream os = response.getOutputStream(); byte b[] = new byte[1024]; FileInputStream in = new FileInputStream(file); int len = 0; while((len = in.read(b))!=-1){ os.write(b, 0, len); } os.flush(); os.close();//注意下面的用法 os=null; response.flushBuffer(); out.clear(); out = pageContext.pushBody(); in.close(); %>
值得注意的是:在Jsp中使用OutPutStream时,若不经过特殊处理,程序将会报以下异常:getOutputStream() has already been called for this response。具体原因是因为JSP在编译成Servlet时,在_jspService(HttpServletRequest request, HttpServletResponse response)方法之后有如下的一段代码:
finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); }
主要作用是释放JSP中使用到的一些内置对象,同时也会调用response.getWriter(),这个方法和response.getOutPutStream()是互相冲突的,因此在输出流使用完毕后需要添加上面的几行特殊处理代码。
3.后端服务程序:
后端程序主要是POI的一些用法,建立excel文件,提供下载。通常在实际应用中,这些数据需要从数据库加载,并非静态数据。
package com.yan.service; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * @ClassName: ExcelExport * @Description: (这里用一句话描述这个类的作用) * @author Helen * @date 2015年10月6日 上午10:21:39 */ public class ExcelExport { private String path; public String getPath() { return path; } public void setPath(String path) { this.path = path; } public ExcelExport(String path){ this.path = path; } public void generateFile(HttpServletRequest request){ HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("User_info"); sheet.setColumnWidth((short)0, (short)3000); sheet.setColumnWidth((short)1, (short)5000); sheet.setColumnWidth((short)2, (short)3000); HSSFRow row = sheet.createRow(0); HSSFCell cell[] = new HSSFCell[4]; HSSFCell col_cell = null; //DB数据示例 for (int i = 0; i < cell.length; i++) { cell[i] = row.createCell((short)i); } cell[0].setCellValue(new HSSFRichTextString("编号")); cell[1].setCellValue(new HSSFRichTextString("用户名")); cell[2].setCellValue(new HSSFRichTextString("性别")); cell[3].setCellValue(new HSSFRichTextString("地区")); for (int i = 1; i < 11; i++) { row = sheet.createRow(i); for (int j = 0; j < cell.length; j++) { col_cell = row.createCell((short)0); col_cell.setCellValue(new HSSFRichTextString("编号"+i)); col_cell = row.createCell((short)1); col_cell.setCellValue(new HSSFRichTextString("用户名"+i)); col_cell = row.createCell((short)2); col_cell.setCellValue(new HSSFRichTextString("性别"+i)); col_cell = row.createCell((short)3); col_cell.setCellValue(new HSSFRichTextString("地区"+i)); } } File f = new File(path+"/test_xls.xls"); if(!f.exists()){ try { f.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { FileOutputStream os = new FileOutputStream(f); workbook.write(os); os.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
以上就完成了此次核心功能的开发。
相关推荐
综上所述,该文档提供了一种在.NET 2.0环境下利用Interop组件开发Excel报表的实用方法,同时讨论了在IIS 6.0上部署时可能出现的权限问题及其解决策略,这对于.NET Web开发新手来说是一份有价值的参考资料。
目前的稳定版本V2.0支持读取Excel公式的计算结果,生成Excel 97格式的数据表,以及对单元格的格式化和颜色操作。 **导入Excel文件** 导入Excel文件通常涉及以下步骤: 1. **创建Workbook对象**:首先,你需要创建...
在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术。要实现在JSP中导出PDF和Excel文档,通常会利用一些开源库来帮助我们完成这项任务。这里主要涉及到JasperReports、iReport、iText、Apache ...
项目开发过程中,会做一些重复度较高的开发工作(表结构设计、生成数据库建库脚本、数据字典定义、hibernate映射文件编写、POJO对象文件编写、简单的JSP表单页面).在跨数据库平台的小组中甚至要做到一套程序多套...
14.2.3. 帮助简化开发的额外的标签 14.3. Tiles 14.3.1. 需要的资源 14.3.2. 如何集成Tiles 14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 ...
2.7 建立开发环境 2.8 测试系统的设置 2.9 实现简化的部署方法 2.10 默认web应用的部署目录:汇总 2.11 web应用:预览 第3章 servlet基础 .3.1 servlet的基本结构 3.2 生成纯文本的servlet 3.3 ...
它支持从Excel 2.0到Excel 2007版本的文件格式,并提供了丰富的API来处理这些文件。 - 该组件可以独立使用,也可以集成到Web应用程序或其他Java应用程序中。 - 使用`jExcelAPI`可以方便地创建、读取、修改或保存...
标题中的"struts2.0+hibernate3.1+spring2.0实例源码里的jar2"指的是一个基于这三个经典技术栈的Web应用程序示例。Struts2、Hibernate和Spring是Java开发中非常流行的开源框架,它们分别用于MVC(模型-视图-控制器)...
简介 免费的源代码行数统计工具,支持20多种代码...具有统计迅速、准确的优点,是程序开发人员的必备工具。可以对 VC++/.Net/JAVA/VB/Delphi/ASP/JSP/HTML 等项目的代码进行统计,并能保存统计的结果。 下载地址 ...
3. **JExcelAPI**:用于处理Excel的纯Java API,可从官方网站下载,推荐版本为V2.0。 此外,需设置以下环境变量和文件路径: 1. **PATH环境变量**:包含JDK的安装路径。 2. **CLASSPATH环境变量**:包含JDK库、...
Java Excel API 是一个开源项目,专门用于在Java环境中读取、创建和修改Microsoft Excel文件。这个API使得非Windows操作系统上的开发者也能使用纯Java代码处理Excel数据。Java Excel API的稳定版本V2.0支持多种Excel...
Java Excel API使得在Web应用程序中处理Excel文件变得更加便捷,例如在JSP或Servlet中生成CSV文件供用户下载,或者通过API直接创建和更新Excel文件,满足数据分析、报表生成等多种需求。由于其跨平台的特性,无论...
虽然对于Windows用户来说,使用Microsoft Office中的Excel进行日常的数据处理非常直观简便,但对于需要在服务器端或者跨平台环境中处理Excel文件的应用程序而言,使用传统的Office套件就显得不太现实。因此,开发一...
咖啡智能报表控件 2.0[下载地址] 咖啡智能报表组件是一个类似Excel风格的报表组件 1、操作风格与EXCEL类似,是一款表格型报表组件,功能强大、操作简单 2、灵活多样性的单元格属性 合并、拆分、对齐方式、背景、...
Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的...
在Web应用中,通常通过JSP或Servlet调用API来实现Excel数据表的访问。 Java Excel API的稳定版本V2.0提供了以下主要功能: 1. 读取不同版本(如Excel 95、97、2000)的数据。 2. 读取Excel 97之后的公式的值。 3. ...
在Web开发中,经常需要处理各种格式的文档,如Word、Excel等。对于Java Server Pages(JSP)而言,利用第三方库或组件来实现对Word文档的操作是一种常见的需求。本文将深入探讨如何使用软航的eOffice2.0组件在JSP...
Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的...