- 浏览: 1035888 次
文章分类
最新评论
-
cjh_android:
我想你是对的,至少对于现实是对的,不过对于技术岗位竞争越来越激 ...
程序员的思考--终于确定了自己的技术发展方向 -
dongbiying:
现在情况如何 。。
创业,不能兼职 -
jackyrong:
ie 9 下时,老显示关闭窗口提示,有办法去掉么,就是关闭掉那 ...
jquery右下角弹窗效果 -
lmaxjj:
加点班如果都称得上是累,只能说明还没体会到真正的生活。。
IT男的进化论 -
馨雨轩:
IT男要进化需要先穿越
IT男的进化论
技术要点
本节代码详细说明文件下载功能的开发流程,介绍知识点如下:
= 上传成功页面重修改后支持文件下载代码内容。
= DownloadAction 文件下载功能开发。
= struts.xml 中 DownloadAction 配置,以及支持文件名为中文字符的文件下载。
= 下载文件流程展示。
演示代码
上传成功页面,这里笔者让其在每个上传文件后提供“下载”链接。
<!------------------------------------------- 文件名:result.jsp-------------------------------->
<%@taglib prefix="s" uri="/struts-tags"%>
<body>
上传文件:
<table>
<!-- 循环显示上传成功文件名 -->
<s:iterator value="fileFileName" status="fn">
<tr>
<td>
<!-- 上传成功文件名 -->
<s:property />
</td>
<td>
<!-- 下载文件链接内容为定义的下载Action -->
<!-- 下载文件名作为链接参数fileName 值,用OGNL 表达式表达 -->
<a href="<s:url value='download.action'>
<s:param name='fileName'
value='fileFileName[#fn.getIndex()]'/>
</s:url>"> 下载</a>
</td>
</tr>
</s:iterator>
</table>
</body>
DownLoadAction 类代码
<!------------------------------------------- 文件名: DownLoadAction .java -------------------------------->
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownLoadAction extends ActionSupport {
// 下载文件原始存放路径
private final static String DOWNLOADFILEPATH ="/upload/";
// 文件名参数变量
private String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
// 从下载文件原始存放路径读取得到文件输出流
public InputStream getDownloadFile() {
return
ServletActionContext.getServletContext ().getResourceAsStream(DOWNLOADFILEPATH +fileName);
}
// 如果下载文件名为中文,进行字符编码转换
public String getDownloadChineseFileName() {
String downloadChineseFileName = fileName;
try {
downloadChineseFileName = new String(downloadChineseFileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return downloadChineseFileName;
}
public String execute() {
return SUCCESS ;
}
}
struts.xml 配置文件中有关文件下载的配置:
<!------------------------------------------- 文件名: struts.xml-------------------------------->
<struts>
<!-- 下载文件的 Action 定义 -->
<action name="download" class="action.DownLoadAction">
<!-- 设置文件名参数,由页面上传入 -->
<param name="fileName"></param>
<result name="success" type="stream">
<!-- 下载文件类型定义 -->
<param name="contentType">text/plain</param>
<!-- 下载文件处理方法 -->
<param name="contentDisposition">
attachment;filename="${downloadChineseFileName}"
</param>
<!-- 下载文件输出流定义 -->
<param name="inputName">downloadFile</param>
</result>
</action>
</struts>
( 1 ):文件开始下载页面如图 4.12 所示。
图 4.12 文件下载
( 2 ):单击“下载”链接,比如点“下载文件 1.txt ”文件右边“下载”链接,出现对话框如图 4.13 所示。
图 4.13 下载文件处理方式
( 3 ):单击“保存”按钮后选择下载文件存放路径,如图 4.14 所示。
图 4.14 下载文件选择存放路径
代码解释
( 1 )在 result.jsp 中通过 iterator 标签和 url 标签定义了“ fileFileName ”的循环显示以及链接。其中有关“ status ”和 OGNL 表达式笔者会在之后章节里具体介绍,这里只是让读者知道是如何使用标签显示图 4.12 显示的内容。特别指出 <param> 标签为 downloadAction 定义了一个参数,该参数名为“ fileName ”,因为在 4.4.1 小节中笔者定义的“ fileFileName ”是个 List 类型的数据集合,因此利用 OGNL 表达式将文件名作为“ fileName ”参数值传入 downloadAction 中。
( 2 ) DownLoadAction 文件中先定义了常量 DOWNLOADFILEPATH ,它是下载文件在服务器存放的路径名,也就是 4.4.1 小节中上传文件在服务器存放的路径名。
定义好 DOWNLOADFILEPATH 后,在定义 DownLoadAction 的属性变量。因为在 result.jsp 中定义了参数“ fileName ”,则它作为 DownLoadAction 的属性变量,需要定义相应的 getter 、 setter 方法。
然后定义了 getDownloadFile 方法,它返回的是一个文件流,表明将被下载文件转换为输出流,方便下载。利用 Struts2 自带的“ ServletActionContext ”类的 API 把下载文件存放路径作为方法参数,读取下载文件,将其转换为文件流。
还有一个 getDownloadChineseFileName 方法,该方法主要作用是将文件名为中文字符的文件进行文件名的字符编码集合转换。因为在 Web 系统中由 JSP 等视图页面传入的变量值,特别是中文字符的变量。缺省的字符编码集合都是“ ISO8859-1” ,因此利用 Java 的字符串类的 API ,将字符编码转成开发需要的字符编码集。防止中文字符乱码问题发生。
( 3 ) struts.xml 中定义了名为“ download ”的 Action 。其中它自己的参数“ fileName ”因为在这里它的值会从 JSP 页面上传入,所以这里只是定义,没有具体给它赋任何值
在 <result> 标签中定义了 type 属性,值为“ stream ”。如果是下载文件功能开发, DownLoadAction 一定要设置 type 属性,而且值为“ stream ”。这是因为在 Struts2 自带的 xml 配置文件为 struts-default.xml 中有关于“ stream ”的 result 返回类型的定义,代码如下:
<!------------------------------------------- 文件名: struts-default.xml-------------------------------->
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
这里 Struts2 定义了 result 返回类型为“ stream ”,这个 result 类型主要是处理文件的输入和输出流时候需要使用的。因为下载文件就是把文件转换成输入输出流,将其从一个文件路径放到另外一个文件路径中去。所以肯定要设置这个 result 类型的。
“ contentType ”、“ contentDisposition ”、“ inputName ”都是这个 result 的属性。“ contentType ”就是文件类型。这里因为下载的文件是文本文件,因此设定的值为文本文件类型,具体各个文件类型如何定义, 4.4.1 小节已经介绍过,这里不再做说明。“ contentDisposition ”是指定下载文件处理方式,如图 4.13 就是处理方式的效果。特别指出如果“ contentDisposition ”定义的值把前面的“ attachment ”去掉,则下载方式不是以附件方式下载,如果单击“下载”链接,则会把下载文件的内容显示在浏览器中。读者可以去试验一下。这里有个“ ${downloadChineseFileName} ”,这就是在 DownLoadAction 中定义 getDownloadChineseFileName 方法的目的, ${downloadChineseFileName} 是 OGNL 的表达式,它显示了“ downloadChineseFileName ”变量的具体值,因为在 DownLoadAction 中定义 getDownloadChineseFileName 方法,则把已经转换成符合需要字符编码集的下载文件名作为下载文件方式对话框中显示的名称,不会造成任何乱码问题。“ inputName ”是最关键的一个属性,也是一定要定义的属性,“ inputName ”参数中定义的值“ downloadFile ”就是 DownLoadAction 中 getDownloadFile 方法返回的文件流名字。在 Struts2 中 Acion 用前缀名为 get 的方法得到各种属性的值,这些属性有些是在 Action 中定义,有些就像本示例在配置文件中利用 OGNL 表达式或直接定义。
( 4 )开始进行文件下载功能展示,按照如上记述的步骤执行即可。笔者将两个文本文件上传上去,然后在上传成功页面对具体的文件进行下载。在图 4.13 中单击“保存”按钮就显示图 4.14 ,选择在本机上存放下载文件的路径即可完成下载文件功能。
更多信息请查看 java进阶网 http://www.javady.com/index.php/category/thread
发表评论
-
Struts之拦截器
2012-05-16 17:16 1525今天看了看拦截器,不由得想对拦截器做个描述,在我们进 ... -
struts第一篇:struts诞生记
2012-04-23 22:29 1120Struts是一个开源框架,学Struts有一段时间 ... -
Struts2教程 - 5.4.4 debug标签使用介绍
2012-04-16 21:23 1046技术要点 本节代码具体介绍 debug 数据 标签的使 ... -
Struts2教程 - 5.4.3 date标签使用介绍
2012-04-16 21:23 1160技术要点 本节代码具体介绍 date 数据 标签的使用 ... -
Struts2教程 - 5.2 OGNL表达式语言介绍
2012-04-14 21:15 2133在进行 Struts2 的标签库介绍之前,有必要着重对 ... -
Struts2教程 - 4.1 拦截器在Struts2中的缺省应用
2012-04-09 10:11 1125通过前几章介绍,读者应该明白在 Web 项目中,客户先在视图界 ... -
Struts2教程 - 使用Action类控制导航业务数据
2012-04-09 10:10 1258Struts2 中 Action 充当着一个关键的角色。它解决 ... -
Struts2教程 - 3.4 使用ActionSupport进行校验
2012-04-08 09:04 1566如果 From 数据操作有误,比如输入不是我们需要的数据, ... -
Struts2教程 - 3.3使用Action类控制导航业务数据
2012-04-08 09:04 1156Struts2 中 Action 充当着一个关键的角色。 ... -
Struts2教程 - 5.4.8--10 url标签使用介绍
2012-04-16 21:24 10435.4.8 url 标签使用介绍 ... -
Struts2教程 - 5.4.6-7push、set标签使用介绍
2012-04-16 21:23 1195技术要点 本节代码具体介绍 push ... -
Struts2教程 - 5.4.5 include标签使用介绍
2012-04-16 21:23 1228技术要点 本节代码具体介绍 inclu ... -
Struts2教程 - 5.4.4 debug标签使用介绍
2012-04-17 23:46 1035技术要点 本节代码具体介绍 debug ... -
Struts2教程 - 5.4.3 date标签使用介绍
2012-04-17 23:46 1125技术要点 本节代码具体介绍 date ... -
Struts2教程 - 5.4.2 bean标签使用介绍
2012-04-15 22:57 862技术要点 本节代码具体介绍 bean ... -
Struts2教程 - 5.4.1 action标签使用介绍
2012-04-15 22:57 1152技术要点 本节代码具体介绍 actio ... -
Struts2教程 - 5.3.7 subset标签使用介绍
2012-04-15 22:57 11855.3.7 subset 标签使用介绍 ... -
Struts2教程 - 5.3.5-6 merge、sort标签使用介绍
2012-04-15 22:57 10695.3.5 merge 标签使用介绍 ... -
Struts2教程 - 5.3.4 iterator标签使用介绍
2012-04-14 21:14 1102技术要点 本节代码具体介绍 itera ... -
Struts2教程 - 5.3.3 if、else、elseif标签使用介绍
2012-04-14 21:14 1322技术要点 本节代码具体介绍 if 、 ...
相关推荐
- 从官方网站下载Struts开发包及相关文档。 - **2.8.3 Tomcat下载及安装** - 下载并安装Tomcat服务器,用于部署和运行Web应用程序。 - **2.8.4 Struts与IDE的集成** - 使用Eclipse、IntelliJ IDEA等IDE进行开发,...
4.4.2 Struts2文件下载功能开发 68 第5章 Struts2标签库 73 5.1 Struts2标签使用原理解疑 73 5.2 OGNL表达式语言介绍 75 5.3 Struts2控制标签简介 79 5.3.1 append标签使用介绍 79 5.3.2 generator标签使用介绍 80 ...
第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 为什么使用框架 8 1.3 Struts 2框架...
- **2.8.2 Struts开发包下载及在线文档**:下载Struts开发包,并查看官方提供的在线文档以便更好地理解和使用框架。 - **2.8.3 Tomcat下载及安装**:Tomcat是Java Web应用的服务器,用于部署和运行Web应用。 - **...
11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 使用Hibernate快速实现持久层处理 12.1 ...
11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 使用Hibernate快速实现持久层处理 12.1 ...
11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 使用Hibernate快速实现持久层处理 12.1 ...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...
- **2.8.2 Struts开发包下载及在线文档** - 下载Struts框架的相关包,并获取最新的在线文档。 - **2.8.3 Tomcat下载及安装** - Apache Tomcat是一款免费开源的Web服务器,用于部署和运行Java Web应用。 - **2.8.4 ...
4.4.2 读者信息添加功能实现 40 4.4.3 读者信息管理功能实现 44 4.5 图书借阅管理模块的实现 45 4.5.1 图书借阅功能实现 45 4.5.2 图书续借功能实现 49 4.5.3 图书归还功能实现 52 4.6 系统管理模块的实现 54 4.6.1 ...
4.4.2 读者信息添加功能实现 40 4.4.3 读者信息管理功能实现 44 4.5 图书借阅管理模块的实现 45 4.5.1 图书借阅功能实现 45 4.5.2 图书续借功能实现 49 4.5.3 图书归还功能实现 52 4.6 系统管理模块的实现 54 4.6.1 ...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...
全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...
- **4.4.2 开始顺序** - 讨论了在使用Struts和DWR时需要注意的顺序问题。 - **4.5 DWR与Weblogic或PageFlow** - 指导如何在Weblogic服务器或PageFlow环境中部署DWR。 - **4.6 DWR与Hibernate** - **4.6.1 让DWR和...
- **J2EE (Java 2 Platform, Enterprise Edition)** 是一种利用 Java 作为服务器端应用的框架,主要用来开发企业级应用。 - J2EE 的主要优势在于它的平台无关性和可移植性,能够支持多种操作系统环境。 **1.2 J2EE ...
### DWR(Direct Web Remote)中文文档知识点梳理 #### 一、DWR简介与入门 **1.1 DWR概述** - **定义**: DWR (Direct Web Remote) 是一款允许客户端 JavaScript 脚本直接调用 Java 方法的开源工具。通过这种机制,...