首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Struts 2 文件上傳實戰:View 頁面實現與最佳實踐

     編輯:Java 程式設計入門

在 Struts 2 框架中實現文件上傳功能,View 層頁面設計至關重要。本文以培訓計劃附件上傳為例,展示完整的 JSP 頁面代碼,並解析關鍵標籤庫用法、表單編碼設置、後端屬性綁定等核心要點。

完整 View 頁面代碼:viewtrainplan.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>


    檢視培訓計劃


<%
    // 從請求屬性獲取 Action 傳遞的領域模型
    Trainplan trainP = (Trainplan) request.getAttribute("trainPlain");
%>
已經創建了計劃:<%= trainP.getP_title() %>
附件資訊:<%= trainP.getP_accessory() %>

關鍵技術點解析

1. Struts 標籤庫宣告

雖然本頁面為純顯示頁未使用表單標籤,但專案慣例仍引入三大核心標籤庫:

  • struts-bean:資料存取標籤(bean:write、bean:message)
  • struts-html:表單標籤(html:form、html:file)
  • struts-logic:邏輯控制標籤(logic:iterate、logic:present)

2. 字元編碼設置

<%@ page contentType="text/html; charset=UTF-8" %>

強制頁面輸出 UTF-8,防止中文亂碼。對應 web.xml 需配置 CharacterEncodingFilter 確保請求解碼一致。

3. 領域模型與請求屬性綁定

<%
    Trainplan trainP = (Trainplan) request.getAttribute("trainPlain");
%>

Action 執行成功後,將領域物件放入請求屬性 trainPlain(注意:此處拼寫為 Plain 非 Plan),View 透過 Scriptlet 取出並調用 getter 顯示。

改進建議:使用 Struts 標籤替代 Scriptlet,更符合 MVC 分離:


文件上傳完整鏈路回顧

本頁為上傳成功後的檢視頁,完整上傳流程包含:

  1. 上傳表單頁:html:form enctype="multipart/form-data" + html:file property="uploadFile"
  2. ActionForm:包含 FormFile uploadFile 屬性及 getter/setter
  3. Action:處理 form.getUploadFile().getInputStream(),儲存檔案,記錄路徑到 Trainplan.p_accessory
  4. struts-config.xml:配置 multipartClass、maxFileSize、forward 到本頁
  5. 本頁:顯示上傳結果

常見問題與解決方案

問題原因解決
上傳檔案為 null表單缺少 enctype、ActionForm 屬性型別錯誤檢查 enctype="multipart/form-data"、FormFile 型別
中文檔名亂碼瀏覽器編碼與伺服器解碼不一致Tomcat 配置 URIEncoding="UTF-8"、使用 Apache Commons FileUpload 解析
大檔案上傳失敗超過 maxFileSize 或 maxRequestSize調整 struts-config.xml 與容器限制
顯示頁面屬性為空Action 轉發時未放入請求屬性、屬性名拼寫錯誤確認 request.setAttribute("trainPlain", trainplan)、拼寫一致

現代化遷移建議

Struts 1 已停止維護,新專案建議採用:

  • Spring MVC:@Controller + MultipartFile + Thymeleaf/FreeMarker
  • Spring Boot:自動配置 MultipartResolver、內建 Tomcat 調優
  • 前後端分離:REST API 接收 multipart/form-data,前端 Vue/React 使用 FormData 上傳

總結

本文展示 Struts 1 時代的文件上傳檢視頁實現,雖然技術棧老舊,但「表單編碼、屬性綁定、標籤庫使用、請求轉發」等核心概念在現代框架中依然通用。理解歷史實現有助於遷移重構時保持業務邏輯連續性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved