在实际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>
分享到:
相关推荐
毕业论文- 深蓝健身房瑜伽馆行业小程序V4.15.0 前端+后端-整站商业源码.zip
36氪:2019中国开放式创新观察.pdf
毕业论文-化妆品商城-整站商业源码.zip
毕业论文-MNews2.4-整站商业源码.zip
X-AnyLabeling自动标注模型
【鼎软天下】科技赋能物流,数字驱动变革.pdf
实训商业源码-王中王掌上游戏机网页源码,怀旧小游戏-毕业设计.zip
内容概要:本文提出了一种基于强化学习(RL)的前向纠错(FEC)调整方法——R-FEC,旨在优化WebRTC视频会议中的用户体验质量(QoE)。传统方法在确定适当的FEC比例时面临挑战,因为过高的FEC会增加延迟并降低视频质量,而过低则无法有效应对丢包。R-FEC通过RL算法动态调整视频和FEC比特率,在不同的网络条件下最大化QoE,同时最小化网络拥塞。实验表明,R-FEC相比现有最佳解决方案可提高视频速率达27%,并改善视频质量6dB。 适合人群:对视频会议系统优化、网络通信协议、机器学习特别是强化学习有兴趣的研究人员和技术人员。 使用场景及目标:①需要在视频会议中实现实时通信的应用开发者;②希望提升视频通话质量、减少延迟的技术团队;③研究如何在动态网络环境中优化数据传输的研究机构。 其他说明:R-FEC不仅解决了现有方法中FEC设置不合理的问题,还展示了在实际网络环境下显著优于其他方法的表现。此外,作者指出未来工作将扩展到多方通话场景,并考虑更多复杂的网络条件。该研究得到了Cisco Systems和韩国国家研究基金会的支持。
内容概要:本文介绍了流量整形(Traffic Shaping)与增强传输选择(Enhanced Transmission Selection, ETS)技术在多虚拟函数(VFs)共享单个物理网络接口控制器(NIC)端口情况下的应用。流量整形通过对数据发送速率进行限制来管理网络流量,确保节点不会超过设定的最大带宽,同时保证最小带宽。ETS是IEEE 802.1Qaz标准的一部分,旨在数据中心桥接环境中为不同类型的流量分配带宽。文章详细描述了在多VF组中实现每类流量带宽保证的技术挑战和解决方案,包括使用令牌桶算法、加权循环调度(DWRR)、多队列优先级(MQPRIO)以及信任模式(Trust Mode)进行流量分类。此外,还探讨了如何通过扩展devlink-rate工具指定每个流量类别的带宽比例。 适合人群:网络工程师、系统管理员、云服务提供商以及对网络流量管理和优化感兴趣的IT专业人员。 使用场景及目标:①理解流量整形的基本概念及其在网络通信中的作用;②掌握如何配置虚拟功能(VF)以实现对特定流量类别的带宽控制;③学习如何利用ETS机制确保关键业务获得足够的网络资源;④了解最新的devlink-rate扩展功能及其在实际部署中的应用。 其他说明:本文基于Netdev 0x19会议上的演讲整理而成,提供了从背景介绍到具体实施步骤的全面讲解,并附有详细的参考资料链接供进一步研究。
实训商业源码-自适应极简多引擎搜索源码-毕业设计.zip
该源码库为LilyGo T_QT开发板量身定制,专注于物联网通信功能,包含1792个文件,涵盖512个头文件、448个C语言源文件、213个Arduino脚本文件、151个Python脚本、139个Markdown文档、63个PNG图片文件、55个reStructuredText文件、38个Vera Lite Widget文件、18个文本文件、18个C++源文件。语言多样,支持C、C++、Python、C++、Shell、HTML、CSS和Ruby。库内容丰富,是进行物联网通信开发不可或缺的资源。
学生心理健康服务平台是一个集心理咨询、心理测评、资源共享和社区互动于一体的综合服务平台,包含Web/移动端应用和管理后台两部分。该项目旨在为高校学生提供便捷、专业的心理健康服务,帮助学生缓解心理压力,促进心理健康发展。
毕业论文-二次元应用下载页源码 带弹幕-整站商业源码.zip
实训商业源码-影视资源站源码 电脑+手机模板-毕业设计.zip
Baidunetdisk_AndroidPhone_1023843j (6).apk
《Creo Simulation Live》数据表.pdf
实训商业源码-源授权V1.5-毕业设计.zip
实训商业源码-微信淘宝客5.99.78 加密-毕业设计.zip
毕业论文-红包拓客生意宝 2.0.2-整站商业源码.zip
ABB制造执行系统-MES,助力中国智能制造2025.pdf