轉自:http://blog.csdn.net/wnczwl369/article/details/7483290
轉自:http://hi.baidu.com/c2_sun/item/934a542518c6ecc5a5275aad
struts.xml文件配置:
1 <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 8 <constant name="struts.devMode" value="true" /> 9 10 <package name="app14a" extends="struts-default"> 11 <action name="Menu"> 12 <result>/jsp/Menu.jsp</result> 13 </action> 14 <action name="ViewCss" class="app14a.FileDownloadAction"> 15 <result name="success" type="stream"> 16 <param name="inputName">inputStream</param> 17 <param name="contentType">text/css</param> 18 <param name="contentDisposition">filename="main11.css"</param> 19 <param name="bufferSize">2048</param> 20 </result> 21 </action> 22 <action name="DownloadCss" class="app14a.FileDownloadAction"> 23 <result name="success" type="stream"> 24 <param name="inputName">inputStream</param> 25 <param name="contentType">application/octet-stream</param> 26 <param name="contentDisposition">filename="main111222.css"</param> 27 <param name="bufferSize">2048</param> 28 </result> 29 </action> 30 </package> 31 </struts></span>
action特殊的地方在於result的類型是一個流(stream),配置stream類型的結果時,因為無需指定實際的顯示的物理資源,所以無需指定location屬性,只需要指定inputName屬性,該屬性指向被下載文件的來源,對應着Action類中的某個屬性,類型為InputStream,,struts2會尋找一個返回類型為InputStream的方法getInputStream()(方法名最好為getInputStream,有人說此方法名可以為別的可能需要與struts.xml中的inputName保存一致下面有解釋,不過我實驗的結果不是這樣,須為getInputStream,可能是org.apache.struts2.dispatcher.ResultStream類限制造成,感興趣的可以看看此類的源碼,就會明白的),得到InputStream。
另一種理解:action中定義一個返回InputStream的方法,該方法作為被下載文件的入口,且需要配置stream類型結果時指定inputName參數,inputName參數的值就是方法去掉get前綴、首字母小寫的字符串。
下面則列出了和下載有關的一些參數列表:
配置文件詳解:
1、type 為 stream 應用 StreamResult 處理
2、contentType
內容類型,和互聯網MIME標准中的規定類型一致,例如text/plain代表純文本,text/xml表示XML,image/gif代表GIF圖片,image/jpeg代表JPG圖片
3、inputName
下載文件的來源流,對應着action類中某個類型為Inputstream的屬性名,例如取值為inputStream的屬性需要編寫getInputStream()方法
4、contentDisposition
文件下載的處理方式,包括內聯(inline)和附件(attachment)兩種方式,而附件方式會彈出文件保存對話框,否則瀏覽器會嘗試直接顯示文件。取值為:
attachment;filename="struts2.txt",表示文件下載的時候保存的名字應為struts2.txt。如果直接寫filename="struts2.txt",那么默認情況是代表inline,瀏覽器會嘗試自動打開它,等價於這樣的寫法:inline;filename="struts2.txt"
5、bufferSize
下載緩沖區的大小
