struts.xml文件配置:css
- <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
-
- <struts>
- <constant name="struts.enable.DynamicMethodInvocation" value="false" />
- <constant name="struts.devMode" value="true" />
-
- <package name="app14a" extends="struts-default">
- <action name="Menu">
- <result>/jsp/Menu.jsp</result>
- </action>
- <action name="ViewCss" class="app14a.FileDownloadAction">
- <result name="success" type="stream">
- <param name="inputName">inputStream</param>
- <param name="contentType">text/css</param>
- <param name="contentDisposition">filename="main11.css"</param>
- <param name="bufferSize">2048</param>
- </result>
- </action>
- <action name="DownloadCss" class="app14a.FileDownloadAction">
- <result name="success" type="stream">
- <param name="inputName">inputStream</param>
- <param name="contentType">application/octet-stream</param>
- <param name="contentDisposition">filename="main111222.css"</param>
- <param name="bufferSize">2048</param>
- </result>
- </action>
- </package>
- </struts></span>
action特殊的地方在於result的類型是一個流(stream),配置stream類型的結果時,由於無需指定實際的顯示的物理資源,因此無需指定location屬性,只須要指定inputName屬性,該屬性指向被下載文件的來源,對應着Action類中的某個屬性,類型爲InputStream,,struts2會尋找一個返回類型爲InputStream的方法getInputStream()(方法名最好爲getInputStream,有人說此方法名能夠爲別的可能須要與struts.xml中的inputName保存一致下面有解釋,不過我實驗的結果不是這樣,須爲getInputStream,多是org.apache.struts2.dispatcher.ResultStream類限制形成,感興趣的能夠看看此類的源碼,就會明白的),獲得InputStream。html
另外一種理解:action中定義一個返回InputStream的方法,該方法做爲被下載文件的入口,且須要配置stream類型結果時指定inputName參數,inputName參數的值就是方法去掉get前綴、首字母小寫的字符串。web
下面則列出了和下載有關的一些參數列表: apache
參數
說明
contentType
內容類型,和互聯網MIME標準中的規定類型一致,例如text/plain表明純文本,text/xml表示XML,image/gif表明GIF圖片,image/jpeg表明JPG圖片
inputName
下載文件的來源流,對應着action類中某個類型爲Inputstream的屬性名,例如取值爲inputStream的屬性須要編寫getInputStream()方法
contentDisposition
文件下載的處理方式,包括內聯(inline)和附件(attachment)兩種方式,而附件方式會彈出文件保存對話框,不然瀏覽器會嘗試直接顯示文件。取值爲:
attachment;filename="struts2.txt",表示文件下載的時候保存的名字應爲struts2.txt。若是直接寫filename="struts2.txt",那麼默認狀況是表明inline,瀏覽器會嘗試自動打開它,等價於這樣的寫法:inline; filename="struts2.txt"
bufferSize
下載緩衝區的大小