- 浏览: 368759 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
DanceM:
谢谢
Jquery的blockUI使用 -
ideayl:
谢谢,问题解决了
Struts2 数据标签(一)在JSP页面中访问action类中数据 -
springmvc-freemarker:
如何在java Web项目中开发WebService接口 ht ...
Java 创建简单的WebService -
Fs_sky:
感谢
Unrecognized xbean element mapping: beans in namespace http://xfire.codehaus.org -
hh792000:
留个言,感谢一下,顺便mark一下,谢谢
Unrecognized xbean element mapping: beans in namespace http://xfire.codehaus.org
1.对CSV的操作使用的是开源的JavaCSV,使用的Jar包是javacsv.jar,在文章的最后有此架包的下载;对Excel的操作使用的是开源的Java Excel,使用的Jar包是jxl.jar,在文章最后也有此架包的下载。
2.CSV与Excel文件的上传和下载是基于Struts2实现的
首先看一下Web.xml的配置文件对Struts2的配置信息:
3.后台bean的配置文件信息
4.对应的后台Action的代码如下:
5.前台的Jsp文件如下:
操作成功后的跳转页面:
6.Struts.xml的配置信息:
参考资料:
http://www.cnitblog.com/rd416/archive/2010/07/08/47248.html
http://solodu.iteye.com/blog/483588
2.CSV与Excel文件的上传和下载是基于Struts2实现的
首先看一下Web.xml的配置文件对Struts2的配置信息:
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3.后台bean的配置文件信息
public class uploadBean { private String username; private String password; private String town; private int zip; public int getZip() { return zip; } public void setZip(int zip) { this.zip = zip; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getTown() { return town; } public void setTown(String town) { this.town = town; } }
4.对应的后台Action的代码如下:
public class uploadAction extends ActionSupport { //获取上传的文件 private File file; //获取上传文件的名字 private String fileFileName; //获取上传文件的类型 private String fileContentType; //获取上传文件的主题 private String title; //统计上传CSV文件的列数 private int columnCount = 0; //用于存放CSV文件的List private ArrayList<String[]> csvList; //用于存放Excel文件的List List<uploadBean> uploadList=new ArrayList<uploadBean>(); //用于导出文件的流 ByteArrayOutputStream baos = null; public int getColumnCount() { return columnCount; } public void setColumnCount(int columnCount) { this.columnCount = columnCount; } public ArrayList<String[]> getCsvList() { return csvList; } public void setCsvList(ArrayList<String[]> csvList) { this.csvList = csvList; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFileFileName() { return fileFileName; } public void setFileFileName(String fileFileName) { this.fileFileName = fileFileName; } public String getFileContentType() { return fileContentType; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } public List<uploadBean> getUploadList() { return uploadList; } public void setUploadList(List<uploadBean> uploadList) { this.uploadList = uploadList; } @Override public String execute() throws Exception { return SUCCESS; } /** * Fist test read csv * @return */ public String readCsv() { try { ArrayList<String[]> csvList = new ArrayList<String[]>(); String csvFilePath = "D:\\foo.csv"; CsvReader reader = new CsvReader(csvFilePath, ',', Charset .forName("SJIS")); reader.readHeaders(); while (reader.readRecord()) { csvList.add(reader.getValues()); } reader.close(); for (int row = 0; row < csvList.size(); row++) { String cell = csvList.get(row)[0]; System.out.println(cell); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return SUCCESS; } /** * CSVFile Upload and Analyse * * @return */ public String readCSVFile() { InputStream in = null; csvList = new ArrayList<String[]>(); try { in = new FileInputStream(file); CsvReader reader = new CsvReader(in, Charset.forName("SJIS")); try { //读取CSV文件的表头,如果CSV文件没有表头则可以注释 掉 //reader.readHeaders(); while (reader.readRecord()) { columnCount = reader.getColumnCount(); csvList.add(reader.getValues()); } reader.close(); //遍历CSV文件中的信息 for (int row = 0; row < csvList.size(); row++) { for (int i = 0; i < columnCount; i++) { String cell = csvList.get(row)[i]; System.out.println(cell); } } } catch (IOException e1) { e1.printStackTrace(); csvList=null; } } catch (FileNotFoundException e) { e.printStackTrace(); csvList=null; } return SUCCESS; } /** * CSVFile Download * * @return */ public String writeCSVFile() { try { baos = new ByteArrayOutputStream(); CsvWriter cw = new CsvWriter(baos, ',', Charset.forName("SJIS")); String[] contents = { "zhangsan", "123456", "1111", "Shanghai" }; cw.writeRecord(contents, true); cw.close(); } catch (IOException e) { e.printStackTrace(); } return SUCCESS; } /** * get the InputStream * @return */ public InputStream getInputStream() { InputStream is = null; //将OutputStream转为InputStream is = new ByteArrayInputStream(baos.toByteArray()); return is; } /** * Read Excel File and Analyse it * @return */ public String readExcelFile(){ try { //获取上传的Excel文件 Workbook book=Workbook.getWorkbook(file); //获取Excel文件的Sheet的数量 int bookNum=book.getNumberOfSheets(); for(int j=0;j<bookNum;j++){ Sheet sheet=book.getSheet(j); for(int i=0;i<sheet.getRows();i++){ uploadBean uploadB=new uploadBean(); //sheet.getCell(A,B)中的A是第A列,B是第B行 uploadB.setUsername(sheet.getCell(0, i).getContents()); uploadB.setPassword(sheet.getCell(1, i).getContents()); uploadB.setZip(Integer.parseInt(sheet.getCell(2, i).getContents())); uploadB.setTown(sheet.getCell(3, i).getContents()); uploadList.add(uploadB); } } book.close(); //验证上传文件信息是否正确 for(int i=0;i<uploadList.size();i++){ uploadBean upb=(uploadBean)uploadList.get(i); System.out.println("username="+upb.getUsername()+",password="+upb.getPassword()+",Zip="+upb.getZip()+",Town="+upb.getTown()); } } catch (BiffException e) { e.printStackTrace(); uploadList=null; } catch (IOException e) { e.printStackTrace(); uploadList=null; } return SUCCESS; } /** * Write Excel File * @return */ public String WriteExcelFile(){ uploadBean upb=new uploadBean(); upb.setUsername("wanglei"); upb.setPassword("12345"); upb.setZip(1111); upb.setTown("Shanghai"); baos = new ByteArrayOutputStream(); try { //创建一个Excel文件 WritableWorkbook createBook=Workbook.createWorkbook(baos); //创建一个sheet WritableSheet ws=createBook.createSheet("first", 0); try { Label lb1=new Label(0,0,"wanglei"); ws.addCell(lb1); Label lb2=new Label(1,0,"123456"); ws.addCell(lb2); Label lb3=new Label(2,0,"11111"); ws.addCell(lb3); Label lb4=new Label(3,0,"Shanghai"); ws.addCell(lb4); Label lb5=new Label(0,1,"zhangsan"); ws.addCell(lb5); Label lb6=new Label(1,1,"123456"); ws.addCell(lb6); Label lb7=new Label(2,1,"22222"); ws.addCell(lb7); Label lb8=new Label(3,1,"Beijing"); ws.addCell(lb8); //将数据写到Excel文件中 createBook.write(); createBook.close(); } catch (RowsExceededException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } return SUCCESS; }
5.前台的Jsp文件如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <s:form action="upload.action" method="post" enctype="multipart/form-data" theme="simple"> <s:a href="downloadExcel.action">submit WriteExcelFile</s:a><br> <s:a href="downloadCSV.action">submit writeCSVFile</s:a><br> please input the title:<input type="text" name="title" /> <br> please choose the file:<s:file name="file" /><br> <s:submit method="readExcelFile" value="submit readExcelFile" /><br> <s:submit method="readCSVFile" value="submit readCSVFile" /> <br> </s:form> </body> </html>
操作成功后的跳转页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'success.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> Success. <br> <s:iterator value="csvList" status="csvL" id="csvListValue"> <s:property /><br> </s:iterator><br> <s:iterator value="uploadList" status="uplist" id="upId"> index:<s:property value="#uplist.index"/><br> username:<s:property value="username"/><br> password:<s:property value="password"/><br> zip:<s:property value="zip"/><br> town:<s:property value="town"/><br> </s:iterator><br> <s:iterator value="uploadList" status="uplist" id="upId"> username:<s:property value="#upId.username"/><br> password:<s:property value="#upId.password"/><br> zip:<s:property value="#upId.zip"/><br> town:<s:property value="#upId.town"/><br> </s:iterator><br> </body> </html>
6.Struts.xml的配置信息:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="default" extends="struts-default" namespace="/"> <action name="upload" class="com.wl.upload.action.uploadAction"> <param name="savePath">/upload</param> <result name="success">/success.jsp</result> <result name="login">/Error.jsp</result> </action> <action name="downloadCSV" method="writeCSVFile" class="com.wl.upload.action.uploadAction"> <param name="savePath">/upload</param> <result name="success" type="stream"> <param name="contentType">text/plain</param> <param name="inputname">inputStream</param> <param name="contentDisposition">attachment;filename="export.csv"</param> <param name="bufferSize">4096</param> </result> <result name="login">/Error.jsp</result> </action> <action name="downloadExcel" method="WriteExcelFile" class="com.wl.upload.action.uploadAction"> <param name="savePath">/upload</param> <result name="success" type="stream"> <param name="contentType">text/plain</param> <param name="inputname">inputStream</param> <param name="contentDisposition">attachment;filename="export.xls"</param> <param name="bufferSize">4096</param> </result> <result name="login">/Error.jsp</result> </action> </package> </struts>
参考资料:
http://www.cnitblog.com/rd416/archive/2010/07/08/47248.html
http://solodu.iteye.com/blog/483588
- javacsv2.0.zip (134.8 KB)
- 描述: 操作CSV文件的Jar包
- 下载次数: 153
- jxl.jar.zip (553.1 KB)
- 描述: 操作Excel 用到的Jar包
- 下载次数: 82
- jexcelapi_2_6_9_1.4.zip (2.3 MB)
- 描述: 操作Excel的API
- 下载次数: 91
发表评论
-
Struts2 数据标签(五)使用s:date标签输出并格式化日期
2011-01-05 23:51 251821.s:date标签的概述 s:date标签的功能是输出日 ... -
Struts2 数据标签(四)s:param标签的三种赋值方法
2011-01-05 23:37 126101.新建JavaBean的实例: package com.wl ... -
Struts2 数据标签(三)在JSP中实例化一个JavaBean
2011-01-05 23:26 24521.s:bean和s:param标签概述 s:bean标签的功 ... -
Struts2 数据标签(二)输出转义的HTML格式
2011-01-05 23:11 96511.s:property标签概述 s:property标签 ... -
Struts2 数据标签(一)在JSP页面中访问action类中数据
2011-01-04 23:37 43781.s:action标签概述 s:action标签功能为: ... -
Struts2 控制标签(十二)分割字符串
2011-01-03 23:25 49291.s:generator标签概述 属性名是否必须类型说明co ... -
Struts2 控制标签(十一)对集合对象List进行排序
2011-01-03 23:12 31001.新建JavaBean实例 package com.wl.c ... -
Struts2 控制标签(十)按自定义条件取集合中的匹配元素为子集合
2011-01-03 22:50 14411.创建JavaBean实体类 packa ... -
Struts2 控制标签(九)取集合中的部分元素为子集合
2011-01-03 22:33 36501.s:subset标签概述 属性名类型说明countInte ... -
Struts2 控制标签(八)将多个集合对象拼成一个集合对象
2011-01-03 22:13 16871.新建JavaBean实例 package com.wl.c ... -
Struts2 控制标签(七)输出隔行不同颜色效果
2011-01-03 21:31 26951.创建JavaBean package com.wl.con ... -
Struts2 控制标签(六)输出Map中JavaBean类型属性值.
2011-01-03 20:48 29011.创建JavaBean实例 package com.wl.c ... -
Struts2 控制标签(五)输出Map中的String字符串内容.
2011-01-03 20:34 26281.新建Action类 package com.wl.cont ... -
Struts2 控制标签(四)输出 List中JavaBean的属性内容
2011-01-03 17:38 46081.新建JavaBean的实体类 package com.wl ... -
Struts2 控制标签(三) 输出List中String字符串的内容
2011-01-03 17:14 38031.新建Action类 package com.wl.cont ... -
Struts2 控制标签(二) 输出字符串数组的内容
2011-01-03 16:55 52951.iterator标签的概述 属性名是否必须类型注释stat ... -
Struts2 控制标签(一) S:if、S:elseif和S:else标签使用
2011-01-02 22:41 38741.首先搭建Struts2的环境 新建Web工程后,将St ... -
Struts2标签库总结
2010-12-11 11:43 1405<%@ taglib uri="/stru ...
相关推荐
这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件到服务器。在Struts2中,这通常通过表单实现,表单包含一个`<input type="file">`...
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
在这个"struts2上传和下载文件详细源码"中,我们可以深入理解Struts2如何处理文件上传和下载操作。 1. 文件上传: 在Struts2中,文件上传主要依赖于Apache的Commons FileUpload库。首先,需要在struts.xml配置文件...
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...
在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...
通过上述步骤,我们就可以在Struts2框架下实现文件流方式的下载功能,无论是Excel、TXT还是图片,都能有效地直接返回给浏览器,让客户端进行下载。这种方式既节省了服务器资源,也提高了用户体验。在实际项目中,...
项目:Struts2UpAndDownLoadFile 1.实现文件的上传和下载 项目:Struts2HandleExcelFile 1.实现文件的上传和下载 2.利用apache的poi-3.5-FINAL-20090928.jar组件实现创建Excel表格。
综上所述,这个项目展示了如何在Struts2框架下结合Hibernate进行数据管理,以及利用文件上传和Excel导出功能增强应用的功能性。开发者需要对Java Web开发有深入理解,包括MVC模式、HTTP请求处理、文件操作、数据库...
通过以上步骤,你可以实现一个基于Struts2和Hibernate的文件上传与动态下载系统。这个系统能够处理用户上传的文件,将其保存到服务器,同时提供动态下载功能,允许用户根据需要下载文件。在实际开发中,还需要考虑...
在Struts2中,实现文件上传和下载是常见的需求,对于用户交互和数据交换至关重要。这篇博客文章可能详细讨论了如何在Struts2框架中实现这两个功能。 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,这是...
在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户通过表单提交的文件,或者允许用户从服务器下载文件。这些功能极大地增强了Web应用的交互性和实用性。 在Struts2中实现文件上传,主要涉及到以下几...
Struts2是一个非常流行的...以上就是Struts2中文件上传与下载的基本实现,通过这些步骤,你可以实现用户在Web应用中上传和下载文件的功能。在实际项目中,还需要根据具体需求进行调整和优化,如错误处理、进度显示等。
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...
总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。
综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。
总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...
Struts2 和 Apache POI 的结合使用主要集中在创建 Web 应用程序中导出 Excel 文件的功能上。Apache POI 是一个 Java 库,允许开发者创建、修改和显示 Microsoft Office 格式的文件,其中包括 Excel。而 Struts2 是一...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...
3.Struts2进行下载处理,能对上传的所有文件进行下载(多个) 4.文件保存的名称UUID生成,不过显示并下载的名称都是原文件名称 (通过UploadFiles处理) 5.对配置文件中的路径可以进行动态读取(不重启服务器) ...