一般下载可以有两种形式:
- 提供超链接
- 通过流写出到客户端
我们一般会使用第二种,使用第一种的话,如果下载的是txt、word等文件,某些浏览器会直接为我们打开,这不是我们想要的,我们想要通过弹框的方式来进行下载,所以使用第二种
使用struts2文件下载的步骤:
- 定义一个Action命名为DownloadAction
- 在该Action中定义好属性filename,并提供setter&getter方法
- 提供一个获得输入流的方法
- execute中返回SUCCESS,其他也可以,关键是在struts.xml中有对应的result
- 在struts.xml中配置好对应的Action,在name为success的result上设置type为stream,并为该result配置param元素,分别涉及到inputName、contentDisposition
具体配置如下图所示:
Download.png上述例子文件名字是被写死了,但是完全可以利用成员变量filename来实现动态下载
对于下载提示框中文乱码的问题,通过对字符串进行解码,在进行ISO8859-1编码即可解决
注解介绍:
- @ParentPackage 用于指定继承的父包,可以不写
- @Action 指定Action
- @Result 指定result
- @InterceptorRef 用于指定拦截器,拦截器的定义没有提供注解,需要在struts.xml中进行声明
- @InterceptorRefs 拦截器数组
- ExceptionMappings 用于指定异常,需要配置在@Action中才有效
注解的优先级高于xml,也就是说两处都配置同一个Action,注解的会生效,这个了解下就行
网友评论