`
xpp02
  • 浏览: 1035805 次
社区版块
存档分类
最新评论

Struts2教程 - 4.4.2 Struts2文件下载功能开发

阅读更多

技术要点

本节代码详细说明文件下载功能的开发流程,介绍知识点如下:

=    上传成功页面重修改后支持文件下载代码内容。

=    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

  • 大小: 4.8 KB
  • 大小: 9.2 KB
  • 大小: 12.4 KB
分享到:
评论

相关推荐

    J2EE电子商务系统开发从入门到精通--基于Struts和Hibernate技术实现

    - 从官方网站下载Struts开发包及相关文档。 - **2.8.3 Tomcat下载及安装** - 下载并安装Tomcat服务器,用于部署和运行Web应用程序。 - **2.8.4 Struts与IDE的集成** - 使用Eclipse、IntelliJ IDEA等IDE进行开发,...

    struts2讲义_吴峻申

    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 ...

    Struts2 in action中文版

    第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框架...

    J2EE电子商务系统开发从入门到精通基于Struts和Hibernate技术实现

    - **2.8.2 Struts开发包下载及在线文档**:下载Struts开发包,并查看官方提供的在线文档以便更好地理解和使用框架。 - **2.8.3 Tomcat下载及安装**:Tomcat是Java Web应用的服务器,用于部署和运行Web应用。 - **...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    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 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (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 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    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技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...

    J2EE电子商务系统开发从入门到精通

    - **2.8.2 Struts开发包下载及在线文档** - 下载Struts框架的相关包,并获取最新的在线文档。 - **2.8.3 Tomcat下载及安装** - Apache Tomcat是一款免费开源的Web服务器,用于部署和运行Java Web应用。 - **2.8.4 ...

    基于Struts技术的图书管理系统

    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 ...

    基于Struts技术的图书管理系统 源码 mysql

    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开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    DWR中文文档v0.9

    - **4.4.2 开始顺序** - 讨论了在使用Struts和DWR时需要注意的顺序问题。 - **4.5 DWR与Weblogic或PageFlow** - 指导如何在Weblogic服务器或PageFlow环境中部署DWR。 - **4.6 DWR与Hibernate** - **4.6.1 让DWR和...

    J2EEWEB开发教材

    - **J2EE (Java 2 Platform, Enterprise Edition)** 是一种利用 Java 作为服务器端应用的框架,主要用来开发企业级应用。 - J2EE 的主要优势在于它的平台无关性和可移植性,能够支持多种操作系统环境。 **1.2 J2EE ...

    DWR(Direct Web Remote)中文文档

    ### DWR(Direct Web Remote)中文文档知识点梳理 #### 一、DWR简介与入门 **1.1 DWR概述** - **定义**: DWR (Direct Web Remote) 是一款允许客户端 JavaScript 脚本直接调用 Java 方法的开源工具。通过这种机制,...

Global site tag (gtag.js) - Google Analytics