之前介紹servlet3.0新特性的時(shí)候有提到過(guò)servlet API提供了一個(gè)part類來(lái)實(shí)現(xiàn)對(duì)文件的上傳和保存,Struts其實(shí)是在其基礎(chǔ)上做了進(jìn)一步的封裝,更加簡(jiǎn)單易用。至于文件下載,Struts貫徹AOP 思想,在下載之前提供對(duì)用戶權(quán)限控制的API。下面我們將詳細(xì)介紹上傳和下載的相關(guān)內(nèi)容。
一、Struts文件上傳機(jī)制
想要實(shí)現(xiàn)文件上傳功能,頁(yè)面的表單的method屬性必須被指定為post,還有enctype屬性必須為multipart/form-data,該值表示上傳的內(nèi)容將會(huì)以二進(jìn)制的形式被上傳到服務(wù)器,至于該屬性的其他值的作用及他們之間的區(qū)別,請(qǐng)查看之前文章:servlet3.0新特性。下面給出表現(xiàn)層頁(yè)面代碼:
<body> <s:form method="post" enctype="multipart/form-data" action="/upload"> <s:file name="ufile" label="瀏覽"/> <s:submit value="上傳"/> </s:form> </body>
實(shí)際上在Struts的文件上傳中,它使用三個(gè)Action屬性來(lái)描述被上傳的文件。commons-fileupload-1.3.2.jar和commons-io-2.2.jar這兩個(gè)包就是用于輔助表單上傳的內(nèi)容賦值到action屬性中,所以在使用Struts的文件上傳之前應(yīng)當(dāng)先包含著兩個(gè)包到項(xiàng)目中。下面給出upload對(duì)應(yīng)的action:
public class UploadFile extends ActionSupport { //封裝的上傳文件的文件內(nèi)容 private File ufile; //封裝的上傳文件的文件名 private String ufileFi