`

struts2 支持的下载以及如何动态生成excel表格文件

阅读更多
struts2支持的下载 , 以及下载方法的实现方式

先说struts的实现

配置struts.xml
<action name="generateExcel" class="generateExcelAction">
			<result name="success" type="stream">
				<param name="contentType">application/vnd.ms-excel</param>
				<param name="contentDisposition">attachment;afilename="AllUsers.xls"</param>
				<param name="inputName">downloadFile</param>
			</result>
</action>



import java.io.InputStream;

import com.opensymphony.xwork2.ActionSupport;
import com.test.service.UserService;

public class GenerateExcelAction extends ActionSupport
{
	private UserService service;  //服务层的接口

	public UserService getService()
	{
		return service;
	}

	public void setService(UserService service)
	{
		this.service = service;
	}
	
	public InputStream getDownloadFile()
	{
		return this.service.getInputStream();
	}
	
	@Override
	public String execute() throws Exception
	{
		return SUCCESS;
	}
}



jsp页面
 <s:a href="generateExcel.action">生成excel</s:a>



jsp点击提交到generateExcel,
generateExcel返回“success”视图 ,由struts.xml的配置可以看出success视图有三个参数
<param name="contentType">application/vnd.ms-excel</param>
//文件的类型
<param name="contentDisposition">attachment;afilename="AllUsers.xls"</param>
//attachment的解释 ,此参数默认值为inline ,如果是inline 会在浏览器中打开该
//文件,如ppt,txt会直接在浏览器上显示,但有些文件是不能再浏览器中打开的 ,如
//果选择attachment 	,则不管是什么格式都会弹出一个下载框供用户选择 			
<param name="inputName">downloadFile</param>
//说明提交到action的downloadFile执行



public InputStream getDownloadFile()
	{
		return this.service.getInputStream();
	}


package com.test.service.impl;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.test.bean.User;
import com.test.dao.UserDAO;
import com.test.service.UserService;

public class UserServiceImpl implements UserService
{
	private UserDAO userDao;

	public UserDAO getUserDao()
	{
		return userDao;
	}

	public void setUserDao(UserDAO userDao)
	{
		this.userDao = userDao;
	}

	public void delete(User user)
	{
		this.userDao.removeUser(user);
	}

	public List<User> findAll()
	{
		return this.userDao.findAllUsers();
	}

	public User findById(Integer id)
	{
		return this.userDao.findUserById(id);
	}

	public void save(User user)
	{
		this.userDao.saveUser(user);
	}

	public void update(User user)
	{
		this.userDao.updateUser(user);
	}

	public InputStream getInputStream()
	{
		//spring对execle格式下载提供了支持 对应spring中的poi.jar包
		HSSFWorkbook wb = new HSSFWorkbook();  //new 一个HSSFWorkbook实例 
		//创建一个sheet脚本
		HSSFSheet sheet = wb.createSheet("sheet1");
       //创建一行 ,第一行是标题如 姓名 性别 年龄
		HSSFRow row = sheet.createRow(0);
        //往第一行上插入单元格 
		HSSFCell cell = row.createCell((short) 0);
		cell.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue("序号");

		cell = row.createCell((short) 1);
		cell.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue("姓");

		cell = row.createCell((short) 2);
		cell.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue("名");

		cell = row.createCell((short) 3);
		cell.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue("年龄");
      //获取要生成表的数据
		List<User> list = this.findAll();
       //以行的形式出入表格中
		for (int i = 0; i < list.size(); ++i)
		{
			User user = list.get(i);

			row = sheet.createRow(i + 1);

			cell = row.createCell((short) 0);
			cell.setEncoding(HSSFCell.ENCODING_UTF_16); //设置字符的类型
			cell.setCellValue(i + 1);

			cell = row.createCell((short) 1);
			cell.setEncoding(HSSFCell.ENCODING_UTF_16);
			cell.setCellValue(user.getFirstname());

			cell = row.createCell((short) 2);
			cell.setEncoding(HSSFCell.ENCODING_UTF_16);
			cell.setCellValue(user.getLastname());

			cell = row.createCell((short) 3);
			cell.setEncoding(HSSFCell.ENCODING_UTF_16);
			cell.setCellValue(user.getAge());
		}
		
		//问题:上序代码在内存中创建了一个execle表格 ,如何下载到本地
		//解决方案一:在本地new一个临时file ,把内存中的数据写道本地file中 ,再用inputstream供用户下载
		//解决方案二:在内存中直接下载到本地(性能好)
		//以下对这两种方式都做了实现
		
		
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		
		try
		{
			wb.write(os);
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		
		byte[] content = os.toByteArray();
		
		InputStream is = new ByteArrayInputStream(content);
		
		return is;
		
		
//       以下是以临时文件的形式实现的		
//		byte[] content = wb.getBytes();
//		InputStream is = new ByteArrayInputStream(content);
//		
//		return is;
		
 //以下两种方式取得文件名(任选其一)其中CharacterUtils是自定义的一个工具类
//		// String fileName = CharacterUtils.getRandomString(10);
//RandomStringUtils是源包下的一个工具类
//		String fileName = RandomStringUtils.randomAlphanumeric(10);
//
//		fileName = new StringBuffer(fileName).append(".xls").toString();
//
//		final File file = new File(fileName);
//
//		try
//		{
//			OutputStream os = new FileOutputStream(file);
//			wb.write(os);
//			os.close();
//		}
//		catch (Exception e)
//		{
//			e.printStackTrace();
//		}
//
//		InputStream is = null;
//		try
//		{
//			is = new FileInputStream(file);
//		}
//		catch (FileNotFoundException e)
//		{
//			e.printStackTrace();
//		}
//
//		new Thread(new Runnable()
//		{
//			public void run()
//			{
//				try
//				{
//					Thread.sleep(15000);
//				}
//				catch (InterruptedException e)
//				{
//					e.printStackTrace();
//				}
//				
//				file.delete();//删除临时文件 
//			}
//		}).start();
//
//		return is;

	}

}



事例如下



点击生成excle表
下载后以.xsl格式打开




如果需要完整的代码请下载后运行
相关的jar包请点击http://wuzhaohuixy-qq-com.iteye.com/blog/711892下载三个zip包 ,解压后加入项目的lib下
  • 大小: 26.5 KB
  • 大小: 85.1 KB
  • OASystem.zip (40.5 KB)
  • 描述: 完整代码且集成了ssh2
  • 下载次数: 178
4
0
分享到:
评论
2 楼 笑我痴狂 2010-07-17  
fileName 已经加上了注释说明.....

注释的代码只是附加在上面而已

   
1 楼 苦海有为 2010-07-16  
fileName 

相关推荐

    struts2生成Excel文件上传下载

    项目:Struts2UpAndDownLoadFile 1.实现文件的上传和下载 项目:Struts2HandleExcelFile 1.实现文件的上传和下载 2.利用apache的poi-3.5-FINAL-20090928.jar组件实现创建Excel表格。

    struts2 excel下载DEMO和jquery生成二维码DEMO

    使用struts2框架,根据数据生成excel表格,以及利用jquery生成二维码技术。

    (简单)struts2下使用pageoffice实现文件在线编辑

    调用PageOffice还可以实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...

    SSH整合(Struts2 Hibernate3 Spring2)

    这是一个Struts2 Hibernate3 Spring2整合的小例子,里面包含了整合所需的jar文件,实现了增删改查,并且实现了根据表格导出excel文件的功能!

    java编写根据模板导出excel

    根据excel模板动态导出数据库数据 package text; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet....

    使用freemarker生成word文档,源代码+jar包+说明文档及注意事项

    使用freemarker生成word ,并集成struts2 同时生成及下载文档 资料附有Java源代码和自己总结的使用说明及注意事项 大至预览如下: 1、用word编辑好模板 普通字符串替换为 ${string} 表格循环用标签 姓名:${...

    Struts2+Hibernate3.2+Spring2.0 SSH整合小实例(经典)

    本程序是一个完整的ssh框架整合的项目,实现了基本的增、删、查、改功能,还是现了xls(excel)表格的生成和输入输出支持下载。还是用了简单的表单验证。详情代码中有详细的注释。开发环境(MyEclipse6.5 +SQLServer...

    Excel的导入导出(员工考勤的复杂处理)

    公司正在使用的员工考勤系统,对打卡机生成的原始数据进行了一系列复杂的处理后生成标准...使用了Struts2,框架。对Excel的时间函数进行处理。虽然资源分高了点,但绝对超值,设计公司人员机密,请勿在公共场合讨论。

    poi导出excel所用jar包,可添加至maven仓库,也可以自己配置,适合各种浏览器

    // 生成Excel文件 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); HSSFSheet sheet = hssfWorkbook.createSheet("测试数据"); // 表头 HSSFRow headRow = sheet.createRow(0); headRow.createCell(0)....

    web开发常用jar

    Apache Commons包中的一个,java.io.*的扩展,输入输出,支持文件上传 commons-fileupload.jar Apache Commons包中的一个,是一个通过Http接收上传的文件并处理结果文件的库 dom4j-1.4.jar 和 jaxen-1.1.1.jar ...

    java开发常用jar包

    Apache Commons包中的一个,java.io.*的扩展,输入输出,支持文件上传 commons-fileupload.jar Apache Commons包中的一个,是一个通过Http接收上传的文件并处理结果文件的库 dom4j-1.4.jar 和 jaxen-1.1.1.jar 是一...

    Eclipse, JDK1.7, Tomcat7,MySQL,Svn,Maven

    开发环境:Eclipse, JDK1.7, Tomcat7,MySQL,Svn,Maven 软件架构:Struts2+ SpringMVC 项目描述: 通过导入excel表格,生成各种图表 技术描述:1.easyui 制作主页面,2.fusioncharts图表

    Spring中文帮助文档

    2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. ...

    Spring API

    2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. ...

    spring chm文档

    2.6.1. 动态语言支持 2.6.2. JMX 2.6.3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. 控制反转容器 3.1. 简介 ...

Global site tag (gtag.js) - Google Analytics