- 浏览: 257470 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
qingtingchen:
请问下如果只有uid/emial 和密码的话要怎样进行认证
【总结】Spring LDAP整理 -
cylboke:
太给力了,搞了一下午,一直换jar版本,不起作用,用楼主的方法 ...
【学习】spring MVC之返回JSON数据(Spring3.0 MVC+Jackson+AJAX) -
hu3625067:
楼主写的很精辟,言简意赅,非常实用
【总结】Spring LDAP整理 -
hu3625067:
写的很精辟,很实用
【总结】Quartz整理 -
Mr小血:
找了好久,终于找到解决办法了,谢谢
formvalidator4.1.3 - 校验时不能自定义向后台传值的BUG问题
首先,下载POI JAR包 http://poi.apache.org/download.html
jar包就不赘述了
本文除了加POI的几个JAR包外,还需加上STRUTS2的JAR包。
jsp页面:
STRUTS2配置:(没有返回页 所以也就不用配置了)
action 方法:我用了将HASHMAP封装成List的方式导出数据,另一个常用的方式是将一个类封装成List的方式导出数据,方法思想大致相同,另一种方法 在导出基础类中 用反射形式实现。后面有写。
**重要**
下面就是 导出工具类了:我是整理了网上前辈们的资格,再改了点。
**注 **
若要用到exportExcel方法 需添加jar包:commons-codec-1.5.jar
具体调用方法:改下LIST生成方式就行了 其它的与ACTION里的export方法一样。BOOK是个实体类
book.java:getter setter方法略
**补充**
若想导出默认名用中文:
jar包就不赘述了
本文除了加POI的几个JAR包外,还需加上STRUTS2的JAR包。
jsp页面:
<form id="searchform" action="bizinfo/biz_orderList.action" method="post"> <input type="submit" value="导出"/> </form>
STRUTS2配置:(没有返回页 所以也就不用配置了)
<package name="default" namespace="/" extends="struts-default"> <action name="export" class="com.exporttest" method="export"></action> </package>
action 方法:我用了将HASHMAP封装成List的方式导出数据,另一个常用的方式是将一个类封装成List的方式导出数据,方法思想大致相同,另一种方法 在导出基础类中 用反射形式实现。后面有写。
public void export(){ try { // 测试图书 ExportExcel ex2 = new ExportExcel(); String[] headers2 = { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN","图书出版社", "封面图片" }; List<HashMap> dataset2 = new ArrayList<HashMap>(); HashMap map = new HashMap(); map.put("no", 1); map.put("name", "java"); map.put("author", "anjing"); map.put("price", 20); map.put("isbn", "123123123123"); map.put("out", "company"); map.put("img", "123.123"); dataset2.add(map); String[] keys = {"no","name","author","price","isbn","out","img"}; response.setContentType("octets/stream"); String nowdate = DateUtils.getNowDateNormal().substring(0,8); response.addHeader("Content-Disposition","attachment;filename=orderlist"+nowdate+".xls"); OutputStream out = response.getOutputStream(); ExportExcel<HashMap> exportexcel = new ExportExcel<HashMap>(); exportexcel.exportExcelList( "导出",headers, dataset2 , out,keys); out.close(); } } catch (Exception e) { //e.printStackTrace(); } }
**重要**
下面就是 导出工具类了:我是整理了网上前辈们的资格,再改了点。
package com.cnnct.utils.excel; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFComment; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFPatriarch; 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; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.hssf.util.Region; public class ExportExcel<T> { /** * 通用的方法,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上 * Collection必须是HashMap形式*********** * * @param title 表格标题名 * * @param headers 表格属性列名数组 * * @param dataset 需要显示的数据集合,集合的泛形模式为HASHMAP * * @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * * */ @SuppressWarnings({ "deprecation" }) public void exportExcelList(String title, String[] headers, List<HashMap> dataset, OutputStream out,String[] keys) { // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 生成一个表格 HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为15个字节 sheet.setDefaultColumnWidth((short) 15); // 产生表格大标题行 HSSFRow row = sheet.createRow(0); row.setHeightInPoints(22); Region region = new Region(0,(short)0,0,(short)(headers.length -1)); sheet.addMergedRegion(region); HSSFCell cell0 = null; cell0 = row.createCell((short)0);// (第1列) 在第0位置上开始合并的就在该位置上填加内容 cell0.setCellStyle(this.createStyleTitle(workbook)); cell0.setCellValue(title); // 产生表格单元格标题行 row = sheet.createRow(1); for (short i = 0; i < headers.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(this.createStyleHeader(workbook)); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } Iterator<HashMap> it = dataset.iterator(); int index = 1; while (it.hasNext()) { index++; row = sheet.createRow(index); HashMap t = (HashMap) it.next(); // 遍历集合数据,产生数据行 for(int i = 0;i<keys.length;i++){ HSSFCell cell = row.createCell(i); cell.setCellStyle(this.createStyle(workbook)); cell.setCellValue(t.get(keys[i]).toString()); } } try { workbook.write(out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上 * * @param title 表格标题名 * * @param headers 表格属性列名数组 * * @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的 * javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据) * * @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * * @param pattern 如果有时间数据,设定输出格式。默认为"yyy-MM-dd" */ @SuppressWarnings({ "unchecked", "deprecation" }) public void exportExcel(String title, String[] headers, Collection<T> dataset, OutputStream out, String pattern) { // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 生成一个表格 HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为15个字节 sheet.setDefaultColumnWidth((short) 15); // 声明一个画图的顶级管理器 HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); // 定义注释的大小和位置,详见文档 HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5)); // 设置注释内容 comment.setString(new HSSFRichTextString("可以在POI中添加注释!")); // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容. comment.setAuthor("leno"); // 产生表格大标题行 HSSFRow row = sheet.createRow(0); row.setHeightInPoints(22); Region region = new Region(0,(short)0,0,(short)(headers.length -1)); sheet.addMergedRegion(region); HSSFCell cell0 = null; cell0 = row.createCell((short)0);// (第1列) 在第0位置上开始合并的就在该位置上填加内容 cell0.setCellStyle(this.createStyleTitle(workbook)); cell0.setCellValue(title); // 产生表格单元格标题行 row = sheet.createRow(1); for (short i = 0; i < headers.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(this.createStyleHeader(workbook)); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } // 遍历集合数据,产生数据行 Iterator<T> it = dataset.iterator(); int index = 0; while (it.hasNext()) { index++; row = sheet.createRow(index); T t = (T) it.next(); // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值 Field[] fields = t.getClass().getDeclaredFields(); for (short i = 0; i < fields.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(this.createStyle(workbook)); Field field = fields[i]; String fieldName = field.getName(); String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); try { Class tCls = t.getClass(); Method getMethod = tCls.getMethod(getMethodName, new Class[] {}); Object value = getMethod.invoke(t, new Object[] {}); // 判断值的类型后进行强制类型转换 String textValue = null; // if (value instanceof Integer) { // int intValue = (Integer) value; // cell.setCellValue(intValue); // } else if (value instanceof Float) { // float fValue = (Float) value; // textValue = new HSSFRichTextString( // String.valueOf(fValue)); // cell.setCellValue(textValue); // } else if (value instanceof Double) { // double dValue = (Double) value; // textValue = new HSSFRichTextString( // String.valueOf(dValue)); // cell.setCellValue(textValue); // } else if (value instanceof Long) { // long longValue = (Long) value; // cell.setCellValue(longValue); // } if (value instanceof Boolean) { boolean bValue = (Boolean) value; textValue = "是"; if (!bValue) { textValue = "否"; } } else if (value instanceof Date) { Date date = (Date) value; SimpleDateFormat sdf = new SimpleDateFormat(pattern); textValue = sdf.format(date); } else if (value instanceof byte[]) { // 有图片时,设置行高为60px; row.setHeightInPoints(60); // 设置图片所在列宽度为80px,注意这里单位的一个换算 sheet.setColumnWidth(i, (short) (35.7 * 80)); // sheet.autoSizeColumn(i); byte[] bsValue = (byte[]) value; HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255, (short) 6, index, (short) 6, index); anchor.setAnchorType(2); patriarch.createPicture(anchor, workbook.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG)); } else { // 其它数据类型都当作字符串简单处理 textValue = value.toString(); } // 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成 if (textValue != null) { Pattern p = Pattern.compile("^//d+(//.//d+)?{1}quot;"); Matcher matcher = p.matcher(textValue); if (matcher.matches()) { // 是数字当作double处理 cell.setCellValue(Double.parseDouble(textValue)); } else { HSSFRichTextString richString = new HSSFRichTextString( textValue); HSSFFont font3 = workbook.createFont(); font3.setColor(HSSFColor.BLUE.index); richString.applyFont(font3); cell.setCellValue(richString); } } } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 清理资源 } } } try { workbook.write(out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 大标题样式 * @param workbook * @return */ public HSSFCellStyle createStyleTitle(HSSFWorkbook workbook){ // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(HSSFColor.WHITE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成一个字体 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.BLACK.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); return style; } /** * 小标题样式 * @param workbook * @return */ public HSSFCellStyle createStyleHeader(HSSFWorkbook workbook){ // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成一个字体 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.BLACK.index); font.setFontHeightInPoints((short) 10); font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 style.setFont(font); return style; } /** * 正文样式 * @param workbook * @return */ public HSSFCellStyle createStyle(HSSFWorkbook workbook){ // 生成并设置另一个样式 HSSFCellStyle style = workbook.createCellStyle(); style.setFillForegroundColor(HSSFColor.WHITE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 生成另一个字体 HSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 10); font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 style.setFont(font); return style; } }
**注 **
若要用到exportExcel方法 需添加jar包:commons-codec-1.5.jar
具体调用方法:改下LIST生成方式就行了 其它的与ACTION里的export方法一样。BOOK是个实体类
// 测试图书 ExportExcel<Book> ex2 = new ExportExcel<Book>(); String[] headers2 = { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN", "图书出版社", "封面图片" }; List<Book> dataset2 = new ArrayList<Book>(); try { BufferedInputStream bis = new BufferedInputStream( new FileInputStream("book.jpg")); byte[] buf = new byte[bis.available()]; while ((bis.read(buf)) != -1) { // } dataset2.add(new Book(1, "jsp", "leno", 300.33f, "1234567", "清华出版社", buf)); dataset2.add(new Book(2, "java编程思想", "brucl", 300.33f, "1234567", "阳光出版社", buf));
book.java:getter setter方法略
public class Book { private int bookId; private String name; private String author; private float price; private String isbn; private String pubName; private byte[] preface; }
**补充**
若想导出默认名用中文:
response.addHeader("Content-Disposition","attachment;filename="+"\""+ new String(("我是中文名.xls").getBytes("GB2312"),"iso8859-1")+ "\"");
评论
2 楼
JustHere
2014-01-13
2014-01-03
1 楼
weipeng1986
2013-06-26
不错。
解决exce乱码很不错
response.addHeader("Content-Disposition","attachment;filename="+"\""+ new String(("我是中文名.xls").getBytes("GB2312"),"iso8859-1")+ "\"");
解决exce乱码很不错
发表评论
-
【总结】JAVA编码日常会忽略的小错误
2016-10-15 15:54 0偏基础的文章,很多都是可能很多coder日常都会遇上的问题。 ... -
【总结】Java基础之String
2016-03-26 15:46 0总结关于String的问题和特点。 1、contains() ... -
【总结】java.util.Date vs. java.sql.Date
2016-03-19 21:06 1734本文总结了java.util.Date和java.sql.Da ... -
【总结】Java基础之Set:HashSet vs. LinkedHashSet vs. TreeSet
2016-02-28 17:24 1764总结平时常用的Collection子接口:Set接口以及其实现 ... -
【总结】Java基础之List:ArrayList vs. LinkedList vs. Vector
2016-02-27 17:41 913总结平时常用的Collection ... -
【总结】Java基础之Map:HashMap vs. LinkedHashMap vs. TreeMap vs. ConcurrentHashMap
2016-02-21 18:17 2402Map是Java最常用的集合类之一。它有很多实现类,我总结了几 ... -
ant
2014-12-29 15:23 0https://ant.apache.org/manual/t ... -
1111111
2014-11-25 22:31 01\ My main work will be focus o ... -
d09
2014-09-22 14:19 02014-09-01 Recently I usually r ... -
【学习】使用Nginx进行多站点配置(初级)
2013-11-13 17:26 1969Nginx ("engine x") 是一 ... -
【学习】Java实现FTP上传功能(FTPClient)
2013-08-21 17:11 2190做项目时遇到的需求如下:本地查询的结果,导出XLS,上传至FT ... -
【问题】java.lang.OutOfMemoryError: Java heap space 解决方法
2013-07-22 16:49 1051项目在做一个功能的时候,发现项目报java.lang.OutO ... -
Axis2+Spring开发时遇到Service注入为空的问题
2013-06-24 17:12 3623需求:在SSI项目中使用Axis2的WEBSERVICE技术。 ... -
SpringMVC与Mybatis整合环境搭建
2013-06-15 23:21 5851Spring与Mybatis整合环境搭建 本文用的jar包 ... -
一个机器同时运行两个TOMCAT
2013-04-19 13:25 1106第一个TOMCAT全部用默认, 改变另一个TOMCAT/CON ... -
网站接入之使用人人网帐号登陆(直接使用OAuth 2.0来授权)
2013-02-20 13:52 1763人人网API不是特别好。 下面是我自己的步骤,希望对需要的人 ... -
JAVA通过SOCKET接收发送数据
2013-01-24 10:24 1598JAVA用SOCKET通信发送数据。::: public ... -
利用JAVA-COOKIE做的购物车DEMO
2013-01-07 15:34 3317这几天写了下JAVA写的COOKIE的DEMO。可能代码有点长 ... -
Spring --- java定时器,Spring定时器和Quartz定时器{转}
2012-10-11 09:16 1542在现实生活中,会出现这样的例子,比如烧水,一般烧了20分钟后, ... -
dao 表优化
2011-09-21 10:32 908//列表ticket 底层hql语言 可以去掉一些字段 比如简 ...
相关推荐
以下是关于POI导出Excel表格的相关知识点的详细解释。 1. **Apache POI库**: Apache POI 是一个开源项目,它提供了一组API用于读写Microsoft Office格式的文件,如Excel(XLS,XLSX),Word(DOC,DOCX)和...
在这个“struts2+poi导出excel表格完整例子”中,我们将深入探讨这两个工具如何协同工作,实现从Web应用导出数据到Excel电子表格的功能。 首先,让我们了解一下Struts2的工作原理。Struts2基于拦截器(Interceptor...
通过以上讲解,我们可以看到,结合Struts2和Apache POI,我们可以轻松实现动态生成和导出Excel表格的功能,满足企业级Web应用的需求。提供的文档和网页资源应该会进一步细化这一过程,帮助开发者更好地理解和实践。
Struts2 和 Apache POI 的结合使用...通过以上步骤,可以成功利用 Struts2 和 Apache POI 实现 Web 应用程序中的 Excel 导出功能。这个功能广泛应用于数据分析、报表生成、数据交换等多种场景,极大地提高了工作效率。
首先,让我们深入理解"struts1"和"poi导出excel"这两个标签。Struts1是Apache软件基金会的一个开源MVC框架,它主要用于构建基于Java的Web应用程序。而Apache POI则是一个用于处理Microsoft Office文档的库,特别是...
在Java编程领域,导入和导出Excel表格是一项常见的任务,特别是在数据处理、报表生成和数据分析等场景中。本项目提供了一个整合了Spring、Hibernate和Struts2(简称SSH)三大框架的小型应用示例,利用Apache POI库来...
本篇文章将深入探讨如何利用Struts2与POI结合,实现从数据库中获取数据并导出到Excel的功能。 首先,让我们了解Struts2的基本概念。Struts2作为一款强大的MVC框架,它的核心是Action,Action是业务逻辑的执行单元。...
【基于Struts2 Spring iBatis POI开发的导出Excel实例详解】 在现代Web应用程序中,导出数据到Excel格式是一种常见的需求,这有助于用户分析、存储或共享信息。本实例将详细介绍如何利用Struts2、Spring和iBatis...
二、Struts中使用POI导出Excel步骤 1. 引入依赖:在项目的pom.xml文件中添加Apache POI的相关依赖,确保能够使用POI的API。 ```xml <groupId>org.apache.poi <artifactId>poi <version>4.1.2 <groupId>org....
标题 "Excel 导出 struts2 spring hibernate" 暗示了这是一个关于使用Java Web开发框架Struts2、Spring和Hibernate实现Excel数据导入导出的教程或项目。这三个框架是Java后端开发中常见的技术栈,Struts2用于控制...
**JSP Struts2 分页 导出Excel** 在Web开发中,经常需要处理大量数据,这时分页显示和导出功能就显得尤为重要。JSP(JavaServer Pages)和Struts2作为Java Web开发中的常见技术,可以帮助我们构建动态、交互的网页...
总结来说,"struts2+poi实现导出Excel文件.docx"的实现方式是利用Struts2的Action和结果类型配置,结合Apache POI库生成Excel文件,并通过HTTP响应返回给客户端,实现数据的导出功能。这一过程涉及了MVC模式、HTTP...
通过以上步骤,我们可以实现一个简单的Struts2应用,该应用能够根据用户请求,使用Apache POI库动态生成并导出Excel文件。在实际项目中,可能还需要考虑数据过滤、排序、分页等功能,以及与数据库的交互,这些都可以...
Java Web 数据库数据与 Excel 表格形式导入导出 Java Web 数据库数据与 Excel 表格形式导入导出是指通过 Java Web 应用程序将数据库数据导入到 Excel 表格中,并实现数据的导出。该技术主要利用了 JXL(Java Excel ...
在Struts2框架中,导出Excel功能主要通过一个Action类实现。Action类是Struts2的核心组件,负责处理用户的请求并执行相应的业务逻辑。在本例中,创建了一个名为`panyu.flow.web.action.ExcelAction`的Action类,这个...
Struts1.2 + ExtJS + 导出Excel项目是一个基于Web的应用开发框架组合,用于构建企业级的Java应用程序。这个项目的重点在于整合Struts1.2(一个经典的MVC框架)与ExtJS(一个富客户端JavaScript库)来提供用户友好的...
当我们谈论“Java操作Excel表格”时,通常是指使用Java来读取、写入或处理Microsoft Excel文件,这在数据分析、报表生成或者数据交换等场景中非常常见。本主题将围绕Java如何与Excel交互进行深入探讨。 首先,Java...
在这个“Struts1.2导出Excel表完美版”中,我们将深入探讨如何利用Struts1.2框架来实现这一功能。 首先,导出Excel表的核心技术是Apache POI库,这是一个用于读写Microsoft Office格式档案的Java库。在Struts1.2...
在这个项目中,“struts2_spring_ibatis根据模板文件导出Excel”是利用这三大框架实现了一个功能,即根据预设的模板文件生成并导出Excel电子表格。 首先,Struts2是基于Model-View-Controller(MVC)架构的Web应用...
Struts2是一个流行的Java web框架,它为开发者提供了一种结构化的方式来构建应用程序,而JXL则是一个Java库,用于读取、写入和修改Excel电子表格文件。这篇博客文章结合了这两个技术,展示了如何在Struts2应用中生成...