在实际web应用中,大部分文件下载都是通过url文件链接直接下载的,同样在Struts中也可以这样实现。但是考虑到盗链,跨服务器访问等因素,直接文件流下载也是必要的。那么,在Struts2.0中如何实现数据流下载呢?
Struts2.0默认支持多种格式的result type,stream即是其中的一种。如果我这里要实现一个Generate Report的功能,将Report存放在一个InputStream里面,Action的示例代码内容如下:
package com.test;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class ReportsAction extends ActionSupport {
// 定义HTML类型的Report
private static final int HTML_TYPE = 0;
// 定义EXCEL类型的Report
private static final int EXCEL_TYPE = 1;
// Report类型
private int reportType;
// Report输出流
public InputStream reportStream;
// 输出流Content Type
public String contentType;
// 输出流的生成的文件名
public String fileName;
public ReportsAction() {
}
public String getContentType() {
return contentType;
}
public String getFileName() {
return fileName;
}
public InputStream getReportStream() {
return reportStream;
}
public int getReportType() {
return reportType;
}
public void setReportType(int reportType) {
this.reportType = reportType;
}
public String generateReport() {
switch (reportType) {
case HTML_TYPE:
// 获取HTML流
reportStream = service.getHtmlStream();
// contentType为MIME定义的,详细的内容可参考下面的这个网站:http://www.w3schools.com/media/media_mimeref.asp
contentType = "text/html";
// inline表示文件直接输出到网页上,不出现保存打开对话框
fileName = "inline; filename=\"Report.htm\"";
break;
case EXCEL_TYPE:
// 获取EXCEL流
reportStream = service.getExcelStream();
// contentType设定
contentType = "application/vnd.ms-excel";
// attachment表示网页会出现保存、打开对话框
fileName = "attachment; filename=\"Report.xls\"";
break;
default:
;
}
return SUCCESS;
}
}
当然,Struts的配置也是非常重要的,如下:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="root" namespace="/">
<action name="generateReport" method="generateReport"
class="com.test.ReportsAction">
<result name="success" type="stream">
<!-- 对应ReportsAction中的属性contentType -->
<param name="contentType">${contentType}</param>
<!-- ReportsAction中对应的InputStream的属性名 -->
<param name="inputName">reportStream</param>
<!-- 对应ReportsAction中的属性fileName,定义流输出格式 -->
<param name="contentDisposition">${fileName}</param>
<!-- 定义bufferSize,可选 -->
<param name="bufferSize">1024</param>
</result>
...
</action>
</package>
</struts>
页面部分我就不详细写了,比如,可以在一个form的提交中绑定这个action,普通的网页调用代码如下:
<form id="generateReportForm" action="generateReport.action" method="POST">
</form>
当然,你也可以用一个Struts中的标签来实现,示例代码如下:
<s:form theme="simple" validate="true">
<s:submit cssStyle="width:160px" action="generateReport" value="Generate HTML Report" />
<s:url id="generateUrl" action="generateReport"></s:url>
<s:a href="%{generateUrl}"><s:textfield name="tail.button.generatexls" /></s:a>
</s:form>
分享到:
相关推荐
最流行技术Struts2.1 +Spring 2.5.1+ibatis2.3整合开发而成,这与我以前发布的版本中最大特色是整合了Spring2.5.1中的注解功能和半自动化工具ibatis技术,这是本示例的两大特色,简化了配置文件的烦锁,希望能给更多喜欢...
Struts2.0 Web Service和SOA架构 统一建模语言UML、JUDE 设计工具、Class 类图、类之间关系设计、CMMI 标准过程管理、CMMI 标准过程管理、CVS版本控制工具 Junit测试框架介绍 JavaME相关技术手机游戏开发 建模语言...
12.2.1 下载Struts 2.0开发包 216 12.2.2 创建Struts 2.0项目 216 12.2.3 配置Struts 2.0项目 217 12.2.4 创建Struts 2.0的Action类 218 12.2.5 Struts 2.0中的国际化编程 221 12.2.6 创建基于POJO的Action 223 12.3...
这是我在写毕业论文期间写的一个系统,不是太大,是基于市场是比较流行的SSH框架,Struts采用的是Struts2.0,这是我的劳动成果,希望大家尊重我的劳动,如果你用不到的话,那就不要浪费你的积分了啊,呵呵,对了,...
2,系统支持国际化,采用UTF-8编码,资源文件里可以设置多国语言,形成多国语言界面。 3,系统采用Struts标签制,避免Jsp页面出java代码。 3,完全生成前台静态页面,大大提高网民浏览前台页面的速度,降低服务器的资源...
本书不仅是一本J2EE 入门图书,还详尽而细致地介绍了JSP 各个方面,包括JSP 2.0 的规范、Struts 的各种用法、Hibernate 的详细用法,以及Spring 的基本用法。书中所介绍的轻量级J2EE 应用,是目前 最流行、最规范的...
本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的...
本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的...
本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的...
本书不仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP2.0的规范、 Struts的各种用法、 Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的J2EE...
本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的J2EE...
本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的J2EE...
本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的J2EE...
本书不仅是一本J2EE 入门图书,还详尽而细致地介绍了JSP 各个方面,包括JSP 2.0 的规范、Struts 的各种用法、Hibernate 的详细用法,以及Spring 的基本用法。书中所介绍的轻量级J2EE 应用,是目前 最流行...
本书不仅是一本J2EE 入门图书,还详尽而细致地介绍了JSP 各个方面,包括JSP 2.0 的规范、Struts 的各种用法、Hibernate 的详细用法,以及Spring 的基本用法。书中所介绍的轻量级J2EE 应用,是目前 最流行...
本书不仅是一本J2EE 入门图书,还详尽而细致地介绍了JSP 各个方面,包括JSP 2.0 的规范、Struts 的各种用法、Hibernate 的详细用法,以及Spring 的基本用法。书中所介绍的轻量级J2EE 应用,是目前 最流行...
国内知名的高端IT技术作家,已出版《Spring2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts2权威指南》、《RubyOnRails敏捷开发最佳实践》等著作。 目录 第1章JavaEE应用和开发环境 ...
国内知名的高端IT技术作家,已出版《Spring2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts2权威指南》、《RubyOnRails敏捷开发最佳实践》等著作。 目录 第1章JavaEE应用和开发环境 ...
本书不仅是一本J2EE 入门图书,还详尽而细致地介绍了JSP 各个方面,包括JSP 2.0 的规范、Struts 的各种用法、Hibernate 的详细用法,以及Spring 的基本用法。书中所介绍的轻量级J2EE 应用,是目前 最流行...