struts2文件下载的编写步骤(文件导出)和输入流转换的方法
strut2文件下载三部曲:一个流、两个头信息
说明:
①一个流,在Action中需要一个getInputStream()的方法来获取下载的内容,其中inputStream是默认的,他会指示StreamResult获得inputStream属性的getter方法。
②两个头,一个为ContentType:默认rext/plain文件形式。主要作用是根据下载的文件类型进行文件设置,需要的任何MIME可以在tomcat里面的配置文件中找到
另一个头是ContentDisposition:默认inline,直接在网页上打开,我们一般把他设置为attachment,弹出窗口查看下载信息和选择下载路径
以下用导出excel数据表格为例:
一、首先在查询出所需要的数据时,进数据放到session域中
servletActionContext.getRequest().getSession().setAttribute("list",list);
二、在页面设置一个按钮
<a href="${pageContext.request.contextPath}/user_exportXls">导出</a>
三、配置struts.xml文件
<action name="user_*" method="{1}" class="Action的全类名">
<result name="exportXlsSUCCESS" type="stream">
<param name="contentType">application/vnd.ms-excel</param> <!--excel文件类型-->
<param name="contentDisposition">attachment;filename=用户数据.xls</param> <!--下载弹窗和下载文件名-->
</result>
</action>
四、Action类 实现getInputStream方法
public String exportXls()
{
return "exportXlsSUCCESS";
}
public InputStream getInputStram() throws IOException
{
// 将 userData缓存缓存在Session中的数据 ,生成Excel
List<User> userData = (User) ServletActionContext.getRequest().getSession().getAttribute("User");
// 根据内存的数据生成Excel // 工作薄
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
// 生成一张表sheet (表名为:用户数据)
HSSFSheet sheet = hssfWorkbook.createSheet("用户数据");
// 先写标题行
HSSFRow headRow = sheet.createRow(0);
// 第一行 (标题行,也叫表头)
headRow.createCell(0).setCellValue("编号");
headRow.createCell(1).setCellValue("用户名");
headRow.createCell(2).setCellValue("性别");
headRow.createCell(3).setCellValue("爱好");
headRow.createCell(4).setCellValue("电话号码");
headRow.createCell(5).setCellValue("住址信息");
..................................等
// 向excel写数据
for (User user: userData)
{
// 每个分区一行
HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); // 获取已经存在的最后一行的行数,在这行下再创建新的行
dataRow.createCell(0).setCellValue(user.getId());
dataRow.createCell(1).setCellValue(user.getUsername());
dataRow.createCell(2).setCellValue(user.getGender());
dataRow.createCell(3).setCellValue(user.getHobby());
dataRow.createCell(4).setCellValue(user.getTelephone());
dataRow.createCell(5).setCellValue(user.getAddr());
.....等
}
// 将数据缓存到字节数组 (知识点)
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
hssfWorkbook.write(arrayOutputStream);
arrayOutputStream.close();
byte[] data = arrayOutputStream.toByteArray();
// 再通过字节数组输入流读取数据
return new ByteArrayInputStream(data);
}
五、知识点,如何将缓存中的数据转换为输入流?
//实例化一个字节数组输出流
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
// 将工作簿的数据写入到字节数组输出流中
hssfWorkbook.write(arrayOutputStream);
//将字节数组输出流关闭
arrayOutputStream.close();
//将字节数组输出流转换为字节流
byte[] data = arrayOutputStream.toByteArray();
// 再通过字节数组输入流读取数据
InputStream inputStream = new ByteArrayInputStream(data);
struts2文件下载的编写步骤(文件导出)和输入流转换的方法的更多相关文章
- Oracle数据库文件导出为CSV格式的方法
1 安装PLSQL Developer,并连接Oracle数据库. 2 执行sql语句,将要导出的表格显示出来. select * from table名; 3 如下点击导出查询结果,选择数据格式,即 ...
- IO 流读取文件时候出现乱码 文件编码格式问题 怎么转换解决方法
在使用下面这个写法时候UTF-8文件编码 在读取时候出现乱码问题. File myFile=new File("文件路径"); BufferedReader in = new Bu ...
- FileUtils 文件下载 文件导出
public class FileUtils { /// <summary> /// 文件下载 /// </summary> /// <param name=" ...
- loadrunner实现excel文件导出操作
项目中需要对“商品信息”进行查询及导出,但是loadrunner并不能录制到“保存”这一操作. 项目介绍:flex+Http协议: 不能录制的原因: 在我们点击了“导出”按钮后,服务端已经生成一份我们 ...
- struts2结合poi-3.7实现数据导出为excel
我们在处理数据的时候,有可能要将数据导出到excel文件中,那么java中是怎么实现的呢?apache开发的poi就可以帮我们实现啦,它也是开源的代码,导入相应的jar包,就可以轻松实现,下面让我们来 ...
- Jmeter_实现Excel文件导出到本地
一般而言,对于页面的“导出”操作,主要经历如下两个操作:①根据数据库的内容,将文件导出到应用服务器上:②将服务器上的文件下载到本地电脑: Jmeter同LoadRunner类似,只能记录服务端与客户端 ...
- C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图
C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图 +BIT祝威+悄悄在此留下版了个权的信息说: 最近需要用OpenGL绘制文字,这是个很费时费力的事.一般的思路就是 ...
- Struts2文件下载浅析
Struts2极大的简化了文件上传和下载,本文将主要介绍一下Struts2文件下载的实现1.功能主要是,在下载页面点击下载后,则下载相应的文件 2.代码部分jsp页面downloadPage:< ...
- Struts2(二)——配置文件struts2.xml的编写
接上一篇博客,这篇博客讲述一下2——9小标题的内容,这些问题都可以在struts2配置文件中设置(当然有的也可以在Struts.properties属性文件,web.xml中进行设置),而且常规开发中 ...
随机推荐
- Linux内核3.11的socket busy poll机制避免睡眠切换
Linux的网络协议栈很独立,上下通过两个接口分别和用户态以及设备相连.也能够看作是北向和南向接口...北向通过socket接口,南向通过qdisc接口(你能够觉得是上层的netdev queue,对 ...
- js 获取地址栏的值乱码问题
传过去的参数是:(01) 0 6936841 40029 4. 接收的参数的:'(01)%200%206936841%2040029%204'. 因为包含空格,或者中文,就会乱码.要想不乱码,接收的使 ...
- MYSQL查询一周内的数据(最近7天的)
select * from wap_content where week(created_at) = week(now) 如果你要严格要求是某一年的,那可以这样 查询一天: select * from ...
- wubi.exe的工作原理
wubi.exe的工作原理 Wubi没有修改系统分区,在一个Windows分区中安装了一个完整的Ubuntu系统.初看起来,这简直是不可能完成的任务.但是Wubi的确做到了.而我们要关心的是Wubi是 ...
- 标头“Vary:Accept-Encoding”指定方法[转]
现在的新浏览器都支持压缩了,因此如果网站启用了GZip,可以无需再指定“Vary: Accept-Encoding”标头,不过指定“Vary: Accept-Encoding”标头会有更高的保险,而它 ...
- Windows下面安装和配置Solr 4.9(一)
1.Solr下载 下载地址 :http://lucene.apache.org/solr/ 2.解压,测试 在example文件夹中找到start.jar文件,用命令提示符运行这个文件:ja ...
- JFinal常见问题和知识点笔记
1.当主键Id命名不是“id”时,应该显式地将自定义的id指出来 例如: Db.deleteById("post_user","user_id", 5); 2. ...
- 方法$.data()和$.('#test').on()的使用
1.on() 方法的使用 在选择元素上绑定一个或多个事件的事件处理函数. on()方法绑定事件处理程序到当前选定的jQuery对象中的元素.在jQuery 1.7中,.on()方法 提供绑定事件处理程 ...
- Javascript-js实现多线程
原文地址:https://www.cnblogs.com/haodawang/articles/5850822.html 在讲之前,大家都知道js是基于单线程的,而这个线程就是浏览器的js引擎.首先来 ...
- tomcat多域名配置(转)
TOMCAT的域名配置 现在很多的公司的网站都是用tomcat作为应用服务区的,可是对于初学者,8080端口号是如何去掉的,这些网站是如何和域名绑定到一起的呢?一个 tomcat是如何绑定多域名?并且 ...