MVC 起源於 Smalltalk-80,將用戶界面交互分解為三類對象:
Model 維護 View 列表,狀態變更發布 notify(),View 訂閱並 update() 刷新。實現:多視圖同步、模型無視圖依賴、動態增減視圖。
CompositeView 繼承 View,內部聚合子 View。客戶端統一視圖介面,遞歸渲染。實現:按鈕面板、調試器界面、任意粒度 UI 復用。
View 持有 Controller 引用,運行時替換 Controller 實例即可改變響應策略(如鍵盤命令→彈出菜單、啟用/禁用狀態)。實現:算法族封裝、動態切換、視圖與控制邏輯分離。
| MVC 角色 | Struts 實現 | 說明 |
|---|---|---|
| Model | JavaBean / EJB / POJO + Service | 業務邏輯與持久化,框架不限定 |
| View | JSP + Taglib (html:, logic:, bean:) | 表現層,通過標簽庫訪問模型數據 |
| Controller | ActionServlet (前端控制器) + Action (請求處理器) | 集中請求分發、表單驗證、類型轉換、視圖轉發 |
Struts 1.x 採用 ActionForm 封裝表單數據,struts-config.xml 映射請求路徑到 Action,體現了「配置勝過代碼」思想。
MVC 不僅是分層,更是三大經典設計模式的綜合應用:Observer 解耦數據與視圖,Composite 構建可嵌套 UI,Strategy 封裝可變交互邏輯。Struts 將其映射到 Web 請求-響應週期,奠定了 Java Web 框架架構基因。