一、学习案例:通过在downloadfile.jsp页面点击“下载文件”,查看文件是否可以成功下载。
二、案例分析:struts2文件下载只需简单配置即可。
a)先在下载页面(downloadfile.jsp)创建下载文件的链接
<a href="downloadFile">下载文件</a>
b)创建action(DownloadFileAction.java)
只需创建一个InputStream类型类型的get方法。
注意:此处方法名规则为:get+自定义名称。自定义名称会在struts.xml中用到。
c)配置struts.xml
文件下载默认使用的返回结果名称为success。
<result type="stream">
<param name="contentDisposition">attachment;filename="filecuijun.txt"</param>
<param name="inputName">downloadFile</param>
</result>
通过之前的学习,我们了解到type="stream"用于文件下载,我们可以在struts-default.xml文件中查看,同时,我们找到其对应的类:org.apache.struts2.dispatcher.StreamResult。有兴趣的朋友自行研究。
d)通过以上步骤即可完成简单的文件下载。
e)注意:
1、struts.xml中配置的返回结果,必须是stream类型。
2、返回结果必须传递contentDisposition和inputName
3、contentDisposition中的参数格式必须为:attachment;filename="文件名"
4、contentDisposition中attachment;表示无论什么类型的文件都得提示保存或打开,不能直接在浏览器显示。大家可以自行测试。
5、inputName指定的名称既是我们在action中定义的方法的名称。必须一致,不然struts2不知道你是请求的那个方法。
6、Action中人return的文件名称是服务器中的资源名称。而contentDisposition中filename的名称是在下载文件时,保存到客户端的名称。
三、经验之谈:
a)网上的一些查看文档都是由源码生成的,大家有兴趣可以自己制作。而我们学习中一般要参考文档和源码配合看。参考文档只是为了方便。大家自行选择。
b)大家一定要学会给自己出问题,然后自己再想法解决。有人会说,我这不是自找难看吗,并不是这样的,当我们想法出难题时,其实也是在加深我们对知识点的记忆。这种方式还是提倡的。比如:《Struts2之struts2文件上传详解》这章,那个朋友测试出:org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException这个异常了。有的话,你们想到解决方法了吗。
the request was rejected because its size (31974169) exceeds the configured maximum (2097152)通过这段话,我们可以知道我们上传的文件大小超出了默认上传问价的大小。而怎么修改呢。我之前说过struts大部分功能都是通过拦截器实现的。而在struts-default.xml中我们可以找到fileUpload这个拦截器,它在defaultStack中有存在,说明我们上传文件的功能是由它实现的。通过其对应的实现类,我们可以发现有个maximumSize成员变量,而它恰好也有set方法,这是你又会想到什么呢?,我之前又说过,拦截器传值怎么传。所以我们在对应的action中配置拦截器。当然这样是不行的。我只是给大家讲用已有的知识分析问题的思路。这种方法行不通,我们再想想还有什么办法,我之前在《Struts2之default.properties详解》中有讲过struts.multipart.parser=jakarta,配置默认文件上传组件。而在它下方第三行有:struts.multipart.maxSize=2097152这样一个配置。下面怎么搞,大家应该会吧。
好了,今天就讲这么多,说多了大家就该无聊了。
四、参考项目:
五、每日一乐:
甲:“经人介绍,我连续相亲十次,终于相到一个有缘的人。”
乙:“有缘?怎么说?”
甲:“他就是我第一次相亲的对象。”
最终解释权归爱尚合伙人(www.23hhr.com)所有,转载请注明出处。
原文地址:http://blog.csdn.net/u011638419/article/details/41719287