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

Struts 框架核心架構解析:基於 MVC 模式的 J2EE Web 開發指南

     編輯:Java 相關知識

前言:從 MVC 到 Struts 的演進

MVC(Model-View-Controller)設計模式將應用程式拆分為「模型(資料與業務邏輯)」、「視圖(使用者介面)」、「控制器(請求調度)」三大職責,降低耦合、利於分工協作。Sun J2EE 藍圖推薦的 Model 2 架構即是 MVC 在 Web 層的具體落地:JSP 負責視圖、Servlet 擔任控制器、JavaBean/EJB 封裝模型。Struts 作為 Apache 旗下開源專案,將 Model 2 模式框架化、標準化,提供豐富的標籤庫、驗證機制、國際化支援與擴展點,成為早期 J2EE Web 開發的事實標準。

核心技術棧回顧

Servlet:控制層基石

  • 核心類別:HttpServlet、HttpServletRequest、HttpServletResponse、HttpSession、ServletContext
  • 流程:容器接收請求 → 建立 Request/Response → 呼叫 service() → 分派 doGet/doPost() → 回應客戶端

JSP:視圖層主力

  • 本質:編譯為 Servlet 執行
  • 生命週期:翻譯 → 編譯 → 載入 → 實例化 → jspInit() → _jspService() → jspDestroy()
  • 優勢:靜態模板與動態邏輯混合,適合頁面渲染

JavaBean:模型層輕量載體

  • 符合命名慣例的 POJO,封裝屬性與存取方法
  • JSP 標準動作 <jsp:useBean>、<jsp:setProperty>、<jsp:getProperty> 支援四大範圍

自訂標籤與 JSTL

  • Struts 提供 Bean、HTML、Logic、Nested、Tiles 五大標籤庫
  • JSTL 統一核心邏輯標籤,EL 簡化資料存取

EJB:分散式商業邏輯(可選)

  • Session Bean(無狀態/有狀態)、Entity Bean(CMP/BMP)、Message-Driven Bean
  • 容器提供交易、安全、持久化、並發等系統級服務

Struts 核心架構詳細解析

1. 視圖層

  • JSP 頁面:不含業務邏輯,透過 Struts 標籤庫(html:form、bean:write、logic:iterate 等)渲染動態內容。
  • ActionForm:視為視圖延伸,封裝表單資料、提供驗證(validate())、作為視圖與控制器間的資料傳輸物件(DTO)。

2. 模型層

  • Struts 不強制模型實作方式,開發者可選用:
    — JavaBean(簡單應用)
    — EJB(分散式交易場景)
    — Spring 管理的 POJO Service + Hibernate/iBATIS(後期主流)
  • 模型狀態包含:請求參數、Session 屬性、Application 屬性、持久化資料庫資料

3. 控制器層

  • ActionServlet:核心前端控制器,繼承 HttpServlet,啟動時讀取 struts-config.xml,所有請求統一入口。
  • RequestProcessor:處理請求核心流程(尋找 Mapping → 建立/取得 ActionForm → 驗證 → 實例化 Action → 呼叫 execute() → 依 ActionForward 轉向)。
  • Action:開發者擴充點,execute() 呼叫模型業務邏輯,回傳 ActionForward 決定下一個視圖。

4. 組態檔:struts-config.xml

控制器與視圖的「膠水」,定義:

  • <form-beans>:ActionForm 類別對應邏輯名稱
  • <action-mappings>:路徑、Action 類別、ActionForm 參考、轉向定義
  • <forwards>、<data-sources>、<plug-ins>(如 Validator、Tiles)

Struts 處理流程圖解

  1. 用戶提交請求 *.do
  2. ActionServlet 接收,委派 RequestProcessor
  3. 依 struts-config.xml 找到 ActionMapping
  4. 建立/取得對應 ActionForm,自動填充請求參數
  5. 呼叫 ActionForm.validate(),失敗則返回 input 頁面
  6. 實例化 Action,呼叫 execute()
  7. Action 呼叫模型層業務邏輯
  8. 回傳 ActionForward(如 success、failure)
  9. RequestProcessor 依 ActionForward 轉向 JSP 或另一 Action
  10. JSP 以 Struts 標籤呈現模型資料

優勢與局限

優勢局限
標準化 MVC 實作,降低架構決策成本ActionForm 綁定請求參數機制較死板(後來 Spring MVC 以命令物件改進)
豐富標籤庫加速頁面開發單一 ActionServlet 為核心,擴展性受限於繼承體系
聲明式驗證、國際化、例外處理配置檔隨專案增大變得龐雜(後來採用模組化、註解改善)
Tiles 支援版面復用與佈局管理與 Spring、Hibernate 整合需額外配置(Struts 2 / Spring MVC 原生整合更好)
成熟社群、大量實戰案例學習曲線陡峭,XML 配置繁瑣

實戰建議:從需求分析到部署

  1. 領域建模:識別核心實體、關聯、業務規則
  2. 用例驅動設計 Action:每個用例對應一個或一組 Action
  3. 定義 ActionForm:對應表單欄位,宣告驗證規則(或使用 Validator 定義 XML)
  4. 配置 struts-config.xml:模組化拆分、善用 <forward> 復用轉向
  5. 開發 JSP 視圖:盡量使用 Struts/JSTL/EL,避免 Scriptlet
  6. 整合模型層:引入 Spring 管理 Service/Dao,Struts Action 僅做薄轉接
  7. 單元測試:Mock Request/Response 測試 Action 邏輯;模型層獨立測試

結語

Struts 以 MVC 為核心,將 Servlet/JSP/JavaBean 等 J2EE 基礎技術整合為連貫的開發框架,極大提升了團隊協作效率與專案可維護性。雖然後來 Spring MVC、Struts 2、JSF 等新框架陸續登場,但 Struts 確立的「前端控制器 + 請求處理器 + Action + ActionForm + 聲明式配置」架構範式,深刻影響了後續所有 Java Web 框架的設計。理解 Struts 核心機制,仍是掌握 Java Web 開發精髓的重要基石。

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