Struts2控制文件_第1頁
Struts2控制文件_第2頁
Struts2控制文件_第3頁
Struts2控制文件_第4頁
Struts2控制文件_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Struts 2控制文件下載 文件下載相對于文件上傳要簡單得多,最簡單的方式就是直接在頁面上給出一個下載文件的鏈接,使用Struts 2框架來控制文件的下載,關(guān)鍵是需要配置一個stream類型的結(jié)果,需要指定下面4個屬性。 contentType屬性:指定被下載文件的文件類型。 inputName屬性:指定被下載文件的入口輸入流。 contentDisposition屬性:指定下文件的文件名稱。 bufferSize屬性:指定下載文件時的緩沖區(qū)大小。配置上面4個屬性,既可以在配置文件中配置,也可以在Action中設(shè)置該屬性來完成配置。11.3.1 在配置文件中指定下載資源 下面給出在配置文件中

2、指定下載資源的示例,如代碼11.9所示。代碼11.9 文件下載業(yè)務(wù)控制器package ch11;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.Action;public class FileDownloadAction implements Action . private String inputPath; public void setInputPath(String value) . inputPath = value; /

3、返回一個InputStream類型值 public InputStream getInputStream() throws Exception . return ServletActionContext.getServletContext().getResourceAsStream (inputPath); public String execute() throws Exception . return SUCCESS; 該Action非常簡單,并沒有其他特殊之處,關(guān)鍵在于配置文件中關(guān)于該Action的配置,其內(nèi)容如下所示:<!-配置文件定義文件下載-> <action n

4、ame="download" class="ch11.FileDownloadAction"> <!-指定下載資源位置-> <param name="inputPath">/upload/struts-power.gif</param> <!-指定success邏輯視圖為一個stream類型,即流視圖-> <result name="success" type="stream"> <!-下載文件的類型-> <pa

5、ram name="contentType">image/gif</param> <!-下載文件位置-> <param name="inputName">inputStream</param> <param name="contentDisposition"> filename="struts.gif" </param> <!-緩沖區(qū)大小-> <param name="bufferSize">4

6、096</param> </result></action> 讀者可以看到,該Action指定了一個success返回邏輯視圖,該視圖類型為stream,即一個流類型,即需要下載的資源流。本示例中,在該success邏輯視圖中增加了4個參數(shù),參數(shù)contentType指定了下載資源的類型;inputName參數(shù)和contentDisposition參數(shù)指定了下載資源的位置;bufferSize參數(shù)指定了下載資源的緩沖區(qū)大小。在Action配置中,初始化了一個inputPath參數(shù),即指定了下載資源的Web相對位置。讀者可以運(yùn)行該示例,在瀏覽器中輸入http:

7、/localhost:8080/bookcode/ch11/download.action,結(jié)果如圖11.11所示。圖11.11 Struts 2控制文件下載界面11.3.2 在Action中指定下載資源 前面的示例在配置文件中指定了下載資源的相關(guān)信息,但是這樣指定資源是靜態(tài)的,一般的應(yīng)用要求系統(tǒng)根據(jù)用戶不同的需要來動態(tài)下載資源。Struts 2框架還允許在Action中動態(tài)設(shè)置相關(guān)的資源下載配置信息,如代碼11.10所示。代碼11.10 動態(tài)指定下載資源的業(yè)務(wù)控制器package ch11;import java.io.InputStream;import org.apache.struts

8、2.ServletActionContext;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionSupport;public class Filedownload extends ActionSupport . private String inputPath; private String contentType; private String filename; /返回一個InputStream類型值 public InputStream getInputStream() throws Ex

9、ception . return ServletActionContext.getServletContext().getResourceAsStream( inputPath); /execute方法 public String execute() throws Exception . /調(diào)用相關(guān)業(yè)務(wù)邏輯方法,動態(tài)設(shè)置相關(guān)下載信息 inputPath = "/upload/struts-power.gif" filename = "test.gif" contentType = "image/gif" return SUCCESS;

10、 public String getContentType() . return contentType; public void setContentType(String contentType) . this.contentType = contentType; public String getFilename() . return filename; public void setFilename(String filename) . this.filename = filename; 讀者可以看到,該Action可以根據(jù)用戶的不同請求,動態(tài)指定不同的下載資源信息,下面的代碼是對應(yīng)的

11、配置文件內(nèi)容:<action name="filedownload" class="ch11.Filedownload"> <result name="success" type="stream"> <!- 定義相關(guān)參數(shù)值-> <param name="contentType">$contentType</param> <param name="inputName">inputStream</par

12、am> <param name="bufferSize">4096</param> <param name="contentDisposition"> filename="$filename" </param> </result></action> 讀者可以同前面的示例相比較,在瀏覽器中輸入http:/localhost:8080/bookcode/ch11/ filedownload.action,返回界面如圖11.11所示,同前面示例的結(jié)果完全一致。11

13、.3.3 文件下載的權(quán)限控制 讀者明白了Struts 2框架文件下載的原理后,就很容易實(shí)現(xiàn)文件下載的權(quán)限控制,可以在Action的execute方法中加入用戶合法身份的驗(yàn)證,如果不合法,則返回一個input邏輯視圖,即返回給用戶一個登錄界面;如果是一個合法用戶,則可以返回success邏輯視圖,即返回用戶想要下載的資源。(1)增加了權(quán)限控制的Action如代碼11.11所示。代碼11.11 增加權(quán)限檢查的業(yè)務(wù)控制器package ch11;import java.io.InputStream;import org.apache.struts2.ServletActionContext;impo

14、rt com.opensymphony.xwork2.Action;public class FileDownloadAction implements Action . private String username; private String password; private String inputPath; public void setInputPath(String value) . inputPath = value; public InputStream getInputStream() throws Exception . return ServletActionCon

15、text.getServletContext().getResourceAsStream (inputPath); public String execute() throws Exception . /權(quán)限檢查 if(username.equals("pla")&&password.equals("mypassword"). return SUCCESS; else. return INPUT; /屬性的getter和setter方法 public String getUsername() . return username; publ

16、ic void setUsername(String username) . this.username = username; public String getPassword() . return password; public void setPassword(String password) . this.password = password; (2)同時修改配置文件,增加一個input邏輯視圖,修改后的配置文件內(nèi)容如下所示:<!-配置文件定義文件下載-> <action name="download" class="ch11.Fi

17、leDownloadAction"> <!-指定下載資源位置-> <param name="inputPath">/upload/struts-power.gif</param> <!-指定success邏輯視圖為一個stream類型,即流視圖-> <result name="success" type="stream"> <!-下載文件的類型-> <param name="contentType">image/gi

18、f</param> <!-下載文件位置-> <param name="inputName">inputStream</param> <param name="contentDisposition"> filename="struts.gif" </param> <!-緩沖區(qū)大小-> <param name="bufferSize">4096</param> </result> <result

19、 name="input">/ch11/login.jsp</result></action> (3)重新運(yùn)行該示例,在瀏覽器中輸入http:/localhost:8080/bookcode/ch11/download. action,返回界面如圖11.12所示。(4)由于加入了文件下載權(quán)限控制功能,用戶直接下載文件就會轉(zhuǎn)到用戶登錄界面,在該界面中用戶可以輸入“pla”和“mypassword”,單擊“登錄”按鈕,返回界面如圖11.11所示,即通過了權(quán)限驗(yàn)證,可以正常下載文件。圖11.12 控制文件下載登錄界面使用Struts 2框架的文件下載

20、,會給開發(fā)者帶來很多便利: 可以文件下載的用戶權(quán)限進(jìn)行驗(yàn)證; 支持中文文件名稱的下載(例如:/圖片.gif); 加強(qiáng)了文件下載的安全性,使用Struts 2的文件現(xiàn)在,在如圖11.11所示的界面中,右鍵單擊圖片文件,單擊“屬性”菜單,會發(fā)現(xiàn)顯示的不是常規(guī)的圖片地址,而是指向了action,這樣防止了用戶獲得服務(wù)器相關(guān)路徑的信息,如圖11.13所示。圖11.13 使用Struts 2文件下載的圖片地址本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:參數(shù)說明 contentType 內(nèi)容類型,和互聯(lián)網(wǎng)MIME標(biāo)準(zhǔn)中的規(guī)定類型一致,例如text/plain代表純文本,te

21、xt/xml表示XML,image/gif代表GIF圖片,image/jpeg代表JPG圖片 inputName 下載文件的來源流,對應(yīng)著action類中某個類型為Inputstream的屬性名,例如取值為inputStream的屬性需要編寫getInputStream()方法 contentDisposition 文件下載的處理方式,包括內(nèi)聯(lián)(inline)和附件(attachment)兩種方式,而附件方式會彈出文件保存對話框,否則瀏覽器會嘗試直接顯示文件。取值為: attachment;filename="struts2.txt",表示文件下載的時候保存的名字應(yīng)為str

22、uts2.txt。如果直接寫filename="struts2.txt",那么默認(rèn)情況是代表inline,瀏覽器會嘗試自動打開它,等價于這樣的寫法:inline; filename="struts2.txt" bufferSize 下載緩沖區(qū)的大小 在這里面,contentType屬性和contentDisposition分別對應(yīng)著HTTP響應(yīng)中的頭Content-Type和Content-disposition頭。struts.xm示例: <?xml version="1.0" encoding="UTF-8&quo

23、t; ?><!DOCTYPE struts PUBLIC"-/Apache Software Foundation/DTD Struts Configuration 2.0/EN""/dtds/struts-2.0.dtd"><struts><package name="default" extends="struts-default" ><!- 在這里添加Action定義 -><!- 簡單文件下載 ->

24、<action name="download" class="example.FileDownloadAction"><result name="success" type="stream"><param name="contentType">text/plain</param><param name="inputName">inputStream</param><param name="

25、contentDisposition">attachment;filename="struts2中文.txt"</param><param name="bufferSize">4096</param></result></action><!- 文件下載,支持中文附件名 -><action name="download2" class="example.FileDownloadAction2"><!- 初始文件名

26、 -><param name="fileName">Struts中文附件.txt</param><result name="success" type="stream"><param name="contentType">text/plain</param><param name="inputName">inputStream</param><!- 使用經(jīng)過轉(zhuǎn)碼的文件名作為下載文件名,download

27、FileName屬性 對應(yīng)action類中的方法 getDownloadFileName() -><param name="contentDisposition">attachment;filename="$downloadFileName"</param><param name="bufferSize">4096</param></result></action><!- 下載現(xiàn)有文件 -><action name="download

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論