`

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、Txt、image图片

    在实际项目中,我们经常需要提供文件下载功能,比如导出Excel表格、文本文件或者图片。Struts2提供了文件流的方式来实现这一需求,这种方式避免了在服务器上生成临时文件,提高了效率并减少了服务器存储空间的占用。...

    struts2整合apache的jxl导入导出excel表格

    此方法接受一个包含多种数据类型的列表,并返回一个 `InputStream`,该流可以被 Struts2 动作类用来生成并下载 Excel 文件。 3. **服务层接口实现**: 创建 `ExcelServiceImpl` 类来实现 `IExcelService` 接口。在...

    struts2生成Excel文件上传下载

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

    [转]java struts2+jxl生成并导出Excel

    这篇博客文章结合了这两个技术,展示了如何在Struts2应用中生成Excel文件并将其导出给用户下载。 在Java开发中,导出数据到Excel是常见的需求,特别是在处理大量结构化数据时,如报表或数据分析。JXL库提供了一个...

    java代码生成excel表并下载

    在Java编程领域,生成Excel表格是一项常见的需求,尤其在数据导出、报表生成或数据分析时。本主题聚焦于“java代码生成excel表并下载”,这是一个关键的后端功能,允许用户自定义表格内容并选择下载路径。下面我们将...

    struts2+poi实现excel表格导出

    通过以上讲解,我们可以看到,结合Struts2和Apache POI,我们可以轻松实现动态生成和导出Excel表格的功能,满足企业级Web应用的需求。提供的文档和网页资源应该会进一步细化这一过程,帮助开发者更好地理解和实践。

    struts2+poi实现导出Excel文件

    Struts2 和 Apache POI 的结合使用主要集中在创建 Web 应用程序中导出 Excel 文件的功能上。Apache POI 是一个 Java 库,允许开发者创建、修改和显示 Microsoft Office 格式的文件,其中包括 Excel。而 Struts2 是一...

    struts2导出excel笔记

    通过以上步骤,我们可以实现一个简单的Struts2应用,该应用能够根据用户请求,使用Apache POI库动态生成并导出Excel文件。在实际项目中,可能还需要考虑数据过滤、排序、分页等功能,以及与数据库的交互,这些都可以...

    JSP Struts2 分页 导出Excel

    **JSP Struts2 分页 导出Excel** 在Web开发中,经常需要处理大量数据,这时分页显示和导出功能就显得尤为重要。JSP(JavaServer Pages)和Struts2作为Java Web开发中的常见技术,可以帮助我们构建动态、交互的网页...

    Struts2+Excel导出Demo,测试可用带JAR包

    5. **响应流**: 为了将生成的Excel文件发送到浏览器,你需要将Excel内容转换为字节流,并设置响应头,告知浏览器这是一个Excel文件,例如设置Content-Type为"application/vnd.ms-excel"。 6. **Struts2配置**: 配置...

    struts2+poi实现导出Excel文件.docx

    总结来说,"struts2+poi实现导出Excel文件.docx"的实现方式是利用Struts2的Action和结果类型配置,结合Apache POI库生成Excel文件,并通过HTTP响应返回给客户端,实现数据的导出功能。这一过程涉及了MVC模式、HTTP...

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

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

    Excel 导出 struts2 spring hibernate

    总结起来,本主题涵盖的核心知识点包括Struts2的Action、Spring的依赖注入和事务管理、Hibernate的数据库操作、Apache POI库的使用以及文件上传和下载的处理。通过理解这些内容,开发者能够构建起一个完整的、支持...

    在Struts2中使用JasperReports生成报表

    将Struts2与JasperReports结合使用,可以方便地在Web应用中实现动态报表的生成和展示。 首先,我们需要了解Struts2中整合JasperReports的基本步骤: 1. **环境准备**:确保你已经安装了MyEclipse开发环境,并且在...

    struts2_spring_ibatis根据模板文件导出Excel

    在这个项目中,“struts2_spring_ibatis根据模板文件导出Excel”是利用这三大框架实现了一个功能,即根据预设的模板文件生成并导出Excel电子表格。 首先,Struts2是基于Model-View-Controller(MVC)架构的Web应用...

    POI导出Excel表格

    - 如果使用反射,可以遍历实体类的所有字段,动态生成Excel列头并设置数据。 - 将工作簿写入输出流,如果是Web应用,这通常是一个HTTP响应流。 - 设置响应头,指示这是一个Excel文件,让用户可以选择保存或打开。...

    struts2+poi实现导出Excel文件.pdf

    `contentDisposition`设置使得浏览器将文件作为附件下载,其中`fileName`变量允许动态设置导出文件的名称。 接下来,我们看Action类的实现。Action类通常包含一个或多个方法,这些方法对应于用户的请求。在`panyu....

    Jxls结合Struts2下载

    标题 "Jxls结合Struts2下载" 暗示了一个教程或示例项目,它展示了如何在基于Struts2的Web应用中使用Jxls库来实现动态Excel文件的下载功能。Jxls是一个Java库,它扩展了Apache POI库,使得在Java中处理Excel模板变得...

    Java操作Excel表格

    当我们谈论“Java操作Excel表格”时,通常是指使用Java来读取、写入或处理Microsoft Excel文件,这在数据分析、报表生成或者数据交换等场景中非常常见。本主题将围绕Java如何与Excel交互进行深入探讨。 首先,Java...

Global site tag (gtag.js) - Google Analytics