当前位置: 首页 > 图文教程 > Java技术 > Web框架 > Struts中DownloadAction的使用

Web框架
Struts开发过程中的异常处理机制
ServletContext与ServletConfig分析
使用Ajax的挑战
Web程序从Struts向Stripes框架的移植
Shale不是Struts
Web框架:基于Ajax的应用程序架构汇总
Web框架:使用Ajax技术开发Web应用程序
Web框架:简单理解Hibernate三种状态的概念及互相转化
Web框架:浅谈Struts2中拦截器应用
Web框架:Struts2中的Action
Web框架:Struts2高级文件上传
Web框架:小编谈嵌入XFire服务介绍及实现
Web框架:DWR中signatures标签的使用
WEB框架:小编总结Struts2的经典输入校验
WEB框架:小编祥谈Struts2的数据标签中Action与Bean标签的使用
Web框架:小议struts2类型转换
Web框架:小编浅谈Struts2的pub-sub事件模型
Web框架:小编简述JSF
Web框架:Hibernate事务管理
Web框架:Struts高级特性(StrutsAdvancedFeature)验证

Web框架 中的 Struts中DownloadAction的使用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 303 ::
收藏到网摘: n/a

1.自从Struts 1.2.6版本,就出现了DownloadAction类,主要就是用于处理web应用的下载。
使用DownloadAction也是很简单的。


2.自定义的Action继承DownloadAction。

然后实现:getStreamInfo()方法,该方法用于返回文件或者流的信息。

protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)

可以覆盖:getBufferSize方法,用于自定义向servlet的output stream传输数据的缓冲区大小(bytes字节数)。

DownloadAction中有一个内部的接口StreamInfo代表着不同流的抽象信息,定义了两个方法,

public static interface StreamInfo {
       public abstract String getContentType();//得到下载文件的MIME类型
       public abstract InputStream getInputStream() throws IOException;
}

其中DownloadAction提供了两个StreamInfo的默认实现:

FileStreamInfo 代表从磁盘下载一个文件

ResourceStreamInfo 代表下载一个web应用中的一个资源

当然,我们自己还可以实现自己特定的类,比如从数据库中取得流的类,或者从FTP取得文件的流的类。


下面写一个简单的覆盖getStreamInfo的方法,实现下载Web应用的/images/bbg.gif图片:
 

public StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response){

        response.setHeader("Content-disposition", "attachment; filename=" + "bbg2.gif");//设置文件名称
        StreamInfo si = new ResourceStreamInfo("image/gif",this.servlet.getServletContext(),"/images/bbg.gif");
        return si;
}

使用非常方便,而且能够保持程序一致的结构。原来我开发的系统中下载都是统一使用Servlet的,由于项目中整合了Spring,所以对于Servlet还需要单独的方法来获取相应的服务层的Bean,使用DownloadAction之后,所有的Action都是由Spring进行管理的,非常方便。


from:http://blog.csdn.net/myjava_024/archive/2008/11/28/3402151.aspx