在实际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.0可以在多种应用服务器上运行,如Tomcat、JBoss、GlassFish等,只需要将Struts2.0的库文件添加到项目的lib目录下,并在web.xml中配置Filter,即可启动应用。示例中的web.xml文件就展示了如何...
这个压缩包包含了Struts2.0的核心jar文件以及可能的源代码,使得开发者可以直接查看和理解框架内部的工作原理。 在Java开发中,jar(Java Archive)文件是一种归档格式,它集合了多个类文件和其他资源,便于分发和...
下面我们将深入探讨如何在Struts2.0中实现文件上传和下载。 ### 文件上传 1. **依赖库**:首先,你需要在项目中引入Apache Commons FileUpload和Commons IO库。这两个库提供了处理文件上传的基本工具和功能。 2. ...
4. **Commons FileUpload处理**:在Action类的`execute`方法中,你需要使用`FileItemIterator`和`FileItemStream`接口来处理上传的文件流。这些接口可以帮助你读取、存储或处理上传的文件。 5. **临时文件存储**:...
这个压缩包包含的是Struts2.0的核心库和其他必要的JAR文件,这些文件对于创建一个基于Struts2.0的项目至关重要。以下是对这些JAR包及其在Struts2.0框架中的作用的详细说明: 1. **struts2-core.jar**:这是Struts2...
Struts2.0是Java Web开发中非常流行的一个MVC框架,它基于Model-View-Controller(模型-视图-控制器)设计模式,为开发者提供了强大的功能和灵活的架构。这个压缩包包含了Struts2.0框架运行所需的所有jar包,使得...
这个上传的压缩包包含了Struts2.0运行所需的全部JAR文件,这些文件是开发基于Struts2.0的应用程序所必需的。 在Java开发中,JAR(Java Archive)文件是一种归档格式,用于收集多个类文件和其他资源,以便在Java...
2. **环境搭建**:指导如何配置开发环境,包括JDK、Apache Tomcat服务器、IDE集成、Struts2.0框架的下载和安装,以及相关的Maven或Gradle依赖配置。 3. **第一个Struts2.0应用**:通过创建一个简单的Hello World...
视图层通常使用JSP或FreeMarker模板,Struts2.0提供了多种结果类型,如dispatcher(默认的HTTP重定向)和stream(用于文件下载)。此外,Struts2标签库大大简化了在JSP页面中处理模型数据的工作。 Struts2.0还集成...
本篇文章将全面解析Struts2.0中的文件上传和下载流程。 ### 文件上传 文件上传的核心在于`multipart/form-data`编码类型,这是HTML表单用于上传文件的必需属性。在示例中,我们看到一个简单的Struts2表单,其中...
本教程旨在帮助初学者逐步掌握Struts2.0的核心概念和技术,让你能够熟练运用这个框架构建功能丰富的Web应用程序。 首先,Struts2.0作为MVC框架,它的核心是Action类,它是业务逻辑处理的中心。每个Action对应一个...
Struts2.0是一款强大的Java Web开发框架,它基于MVC(Model-View-Controller)设计模式,旨在简化企业级应用程序的开发流程。本教程将详细介绍如何使用Struts2.0搭建一个基本的登录系统。 首先,理解Struts2的核心...
这个“Struts2.0所用必须的架文件”压缩包包含了Struts2.0框架运行所需的核心组件和依赖库,使得开发者能够快速搭建起基于Struts2.0的项目环境。下面我们将详细探讨Struts2.0框架的关键知识点及其在实际开发中的应用...
Struts2.0 文件上传下载是Java Web开发中常见的功能,它涉及到客户端与服务器的数据交互。Struts2作为一款强大的MVC框架,提供了方便的文件上传和下载支持。本篇文章将深入探讨Struts2实现文件上传下载的核心概念、...
本教程将深入探讨Struts2.0如何实现文件的上传与下载,并通过具体的实例进行解析。 ### 文件上传 在Struts2中,文件上传主要依赖于`Commons FileUpload`库。以下是一些关键知识点: 1. **表单设计**:首先,我们...
Struts2.0标签的实现主要依赖于TLD(Tag Library Descriptor)文件,这些文件定义了标签的行为和属性。当JSP解析器遇到一个Struts2标签时,会根据TLD找到对应的标签处理类(TagHandler)并实例化,执行其doStartTag...
Struts2.0和Spring2.0是两个非常流行的开源Java框架,它们分别在MVC(Model-View-Controller)架构和依赖注入(Dependency Injection,DI)方面有着出色的表现。Struts2.0是一个用于构建企业级Web应用程序的强大的...
Struts2.0 API 是一个重要的开发者资源,它包含了Struts2框架的所有核心类和接口的详细信息。这个API文档是开发基于Struts2的应用程序时不可或缺的参考工具,尤其对于初学者而言,通过查阅API可以更好地理解和使用...
Struts2.0 是一个流行的 Java Web 开发框架,它极大地简化了MVC(模型-视图-控制器)架构的实现。本篇笔记将详细介绍如何在MyEclipse环境中配置Struts2.0,并逐步演示从创建运行环境到实现简单的验证和自定义类型...