1、学习案例:通过在downloadfile.jsp页面点击“下载文件”,查看文件是不是可以成功下载。
2、案例分析:struts2文件下载只需简单配置便可。
a)先在下载页面(downloadfile.jsp)创建下载文件的链接
<a href="downloadFile">下载文件</a>
b)创建action(DownloadFileAction.java)
只需创建1个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中定义的方法的名称。必须1致,不然struts2不知道你是要求的那个方法。
6、Action中人return的文件名称是服务器中的资源名称。而contentDisposition中filename的名称是在下载文件时,保存到客户真个名称。
3、经验之谈:
a)网上的1些查看文档都是由源码生成的,大家有兴趣可以自己制作。而我们学习中1般要参考文档和源码配合看。参考文档只是为了方便。大家自行选择。
b)大家1定要学会给自己出问题,然后自己再想法解决。有人会说,我这不是自找难看吗,其实不是这样的,当我们想法出困难时,其实也是在加深我们对知识点的记忆。这类方式还是提倡的。比如:《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,配置默许文件上传组件。而在它下方第3行有:struts.multipart.maxSize=2097152这样1个配置。下面怎样弄,大家应当会吧。
好了,今天就讲这么多,说多了大家就该无聊了。
4、参考项目:http://download.csdn.net/detail/u011638419/8222629
5、逐日1乐:
甲:“经人介绍,我连续相亲10次,终究相到1个有缘的人。”
乙:“有缘?怎样说?”
甲:“他就是我第1次相亲的对象。”
终究解释权归爱尚合伙人(www.23hhr.com)所有,转载请注明出处。