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

Struts 使用手冊中譯 (一):MVC 架構起源與核心元件解析

     編輯:Java 相關知識

前言

本文翻譯自 Struts 官方使用手冊第一章,梳理 Java Web 開發從 Servlet/JSP 到 Model 2/MVC 架構演進脈絡,闡述 Struts 1.x 核心組件(ActionServlet、ActionMapping、ActionForm、自定義標籤庫)職責與協作流程。

一、歷史回顧:從 Servlet 到 Struts

  1. Servlet 時代:out.println() 輸出 HTML,維護困難、易錯。
  2. JSP 時代 (Model 1):Java 碼嵌入 HTML,分離度不足,流程控制散落各頁。
  3. Model 2 (JSP + Servlet):Servlet 處理控制/流程,JSP 專注呈現,符合 MVC 模式。
  4. Struts 1.0 (2001/07):Craig R. McClanahan 發起,提供標準化 MVC 框架,確立 Model 2 最佳實踐。

二、MVC 設計模式在 Struts 中的具體化

2.1 Model:系統狀態與業務邏輯

  • 以 JavaBeans 封裝狀態(屬性)與行為(方法)。
  • 大型系統:Bean 透過 JDBC/EJB/LDAP/搜尋引擎持久化;業務操作封裝為 Session EJB 或 Service 類別。
  • 小型系統:邏輯可內嵌於 Action 類別(Struts 控制層一部分)。
  • 建議:嚴格分離「業務邏輯如何做」與「Action 角色做什麼」。

2.2 View:JSP 與表現元件

  • 核心技術:JSP + Struts 自定義標籤庫(html:、bean:、logic:、tiles: 等)。
  • 標籤庫功能:國際化訊息、表單欄位綁定 ActionForm、邏輯控制流、版面佈局。
  • 亦可整合 Velocity、XSLT、JSTL 等替代視圖技術。

2.3 Controller:ActionServlet 與 ActionMapping

  • ActionServlet:唯一核心 Servlet,啟動時讀取 struts-config.xml 建立配置物件。
  • ActionMapping:將請求 URI 映射至具體 Action 類別,可攜帶額外屬性(如角色權限、轉向邏輯名稱)。
  • Action:org.apache.struts.action.Action 子類,execute() 方法封裝業務調用、結果解析、轉向視圖。
  • 邏輯名稱:Action 以邏輯名稱(如 "mainMenu")轉向視圖,解耦具體 JSP 路徑。

三、Struts 請求處理流程

  1. 啟動時:ActionServlet 載入 struts-config.xml → 建立 ActionMapping 集合。
  2. 請求到達:ActionServlet 查詢映射 → 實例化/重用 Action → 呼叫 execute()。
  3. Action 可存取 HttpServletRequest/Response/Session/Application 共享上下文。
  4. 典型流程:建立/更新 JavaBean → 放入 Session/Request → ActionForward 轉向 JSP。
  5. JSP 使用 Struts 標籤讀取 Bean 屬性、顯示錯誤訊息、產生國際化文字。

四、ActionForm:表單資料封裝與驗證

  • 繼承 org.apache.struts.action.ActionForm 定義表單欄位屬性。
  • 生命週期:
    1. Controller 取得/建立 Form Bean 實例
    2. 自動填入請求參數 (setter)
    3. validate() 方法執行伺服器端驗證
    4. 驗證失敗:返回輸入頁面,<html:errors/> 顯示錯誤
    5. 驗證通過:execute() 取得 Form Bean 繼續處理
  • struts-config.xml 宣告 <form-bean> 對應名稱與類別,Controller 依名稱查找實例化。

五、Struts 標籤庫與國際化優勢

  • 自動填充表單欄位:<html:text property="username"/> 自動綁定 Form Bean 屬性。
  • 錯誤訊息統一管理:ApplicationResources.properties 訊息資源,支援多語系切換。
  • 標籤輸出自動適應 Locale,維護單一訊息來源。

六、業務邏輯分層建議

「Action 僅負責流程控制與錯誤處理,具體業務邏輯委託獨立 JavaBean/EJB,不直接依賴 Web 物件,確保邏輯可移植性。」

// 典型資料庫應用分層
Action → 呼叫 Business Bean (POJO/EJB)
Business Bean → JDBC/EJB 查詢資料庫 → 回傳領域物件/DTO
Action → 將結果放入 Form Bean / Request 屬性
JSP → 讀取屬性渲染 HTML

七、總結

Struts 以標準化 MVC 實作、豐富標籤庫、聲明式配置、國際化支援,確立了 Java Web 框架早期標準。雖然 Struts 1.x 已進入維護模式(Struts 2 / Spring MVC 為主流),但其前端控制器、命令模式 Action、表單 Bean、聲明式映射等核心設計思想,深刻影響後續框架架構,理解其本質對掌握現代 MVC 框架極有助益。

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