更新時(shí)間:2022-02-10 08:25:45 來源:動力節(jié)點(diǎn) 瀏覽910次
開發(fā)人員可以按照以下五個(gè)步驟創(chuàng)建 Struts 2 文件上傳應(yīng)用程序:
將所需的 commons-fileupload 和 commons-io 依賴項(xiàng)添加到Java Web 項(xiàng)目;
創(chuàng)建一個(gè)使用 Apache Struts 表單和文件自定義標(biāo)簽的 JSP;
使用映射到文件名的設(shè)置器編寫一個(gè) Struts 動作類,如表單的指定 s:file 標(biāo)記;
在Struts動作類的execute方法中,使用標(biāo)準(zhǔn)Java IO包保存上傳的文件;和
創(chuàng)建一個(gè)成功的 JSP,通知用戶文件已成功上載。
包含創(chuàng)建HTML表單元素的特殊 Struts 標(biāo)記的 JSP是 Apache 框架文件上傳功能的關(guān)鍵。一個(gè)典型的 Struts 上傳表單如下所示:
<%@ taglib prefix ="s" uri ="/struts-tags"%>
<%@ page contentType ="text/html; charset =UTF-8"%>
<html>
<正文>
<s:form
action =" fileupload "
method ="post"
enctype ="multipart/form-data">
<s:file name=" uploadFile " label ="File" />
<s:submit />
</s:form>
</body>
</html>
從一個(gè) Struts 文件上傳表單到下一個(gè),post 類型的方法和 mutlipart/form-data 的 enctype 將保持不變。action 屬性必須映射到處理服務(wù)器上的請求的 Struts 操作類的映射名稱,并且文件名必須映射到該操作類中聲明的屬性。
屬性正確映射后,下一步就是編寫相應(yīng)的動作類。
上面 Struts上傳表單中的文件名是uploadFile 。因此,支持這種形式的動作類必須有一個(gè)名為 setUploadedFile 的 setter 方法,它接受一個(gè) java.io.File 對象作為參數(shù),并且它還必須有一個(gè)名為 setUploadedFileFileName 的 setter 方法,它接受一個(gè) String作為參數(shù)。Struts 框架會將上傳的文件及其名稱傳遞給這些方法,但開發(fā)人員應(yīng)注意在動作中聲明的屬性不必精確映射到設(shè)置器名稱這一事實(shí)。
包 com.mcnz.struts;
導(dǎo)入java.io.*;
導(dǎo)入 java.util.*;
導(dǎo)入 java.util.stream.*;
導(dǎo)入 org.apache.commons.io.*;
導(dǎo)入 org.apache.struts2.convention.annotation.*;
導(dǎo)入 com.opensymphony.xwork2.ActionSupport;
@Action ("/fileupload")
@Result (name = "success", location = "/results.jsp")
公共類 FileUploadAction 擴(kuò)展 ActionSupport {
私有文件上傳文件;
私有字符串上傳文件名;
私有字符串 localDirectory = "C:\\temp";
公共無效setUploadedFile(文件文件){
上傳文件 = 文件;
}
公共無效 setUploadedFileFileName(字符串名稱){
上傳文件名 = 名稱;
}
公共字符串執(zhí)行()拋出異常{
文件本地文件=新文件(本地目錄,上傳文件名);
FileUtils.copyFile(uploadedFile, localFile);
返回成功;
}
/* 用于獲取 JSP 顯示的文件列表。*/
public Set<String> getFileList() {
return Stream.of(new File(localDirectory).listFiles())
.filter(file -> !file.isDirectory())
.map(File::getName)
.collect(Collectors.設(shè)置());
}
}
在上述動作類中,execute 方法獲取上傳的文件并將其保存到 C:\temp 文件夾。
不需要名為 getFileList() 的輔助方法,但我添加了它以允許結(jié)果頁面列出當(dāng)前駐留在上傳文件夾中的所有文件。
操作成功調(diào)用的目標(biāo)是 results.jsp。開發(fā)人員不需要使這個(gè)頁面過于復(fù)雜。在調(diào)用此頁面進(jìn)行渲染時(shí),文件將已成功上傳。這是一個(gè)滿足當(dāng)前用例的簡單 results.jsp:
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<正文>
<p> <s:property value="uploadedFileName"/> 上傳成功。</p>
</正文>
</html>
除了標(biāo)準(zhǔn)的 Struts 庫之外,文件上傳實(shí)用程序還需要 commons-io 和 commons-fileupload 工具。開發(fā)人員需要將以下Maven依賴項(xiàng)添加到您的應(yīng)用程序中,以使 Struts 2 文件上傳工具正常工作:
<依賴>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<版本>1.2.1</版本>
</依賴>
<依賴>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<版本>1.3.2</版本>
</依賴>
開發(fā)人員將這些依賴項(xiàng)添加到項(xiàng)目后,他們可以運(yùn)行 Struts 2 文件上傳應(yīng)用程序,并觀察每次用戶單擊文件上傳按鈕時(shí)臨時(shí)目錄填充資源的情況。如果大家想了解更多相關(guān)知識,不妨來關(guān)注一下動力節(jié)點(diǎn)的Struts2視頻教程,里面的課程內(nèi)容由淺到深,通俗易懂,即使沒有基礎(chǔ)也可以聽懂,希望對大家的學(xué)習(xí)能夠有所幫助。
初級 202925
初級 203221
初級 202629
初級 203743