| 層 | 職責 | Java Web 典型實現 |
|---|---|---|
| Model | 資料與業務邏輯封裝、狀態管理、規則驗證 | JavaBean、Entity、Service、DAO、DTO |
| View | 呈現邏輯、使用者介面渲染 | JSP、Thymeleaf、FreeMarker、Velocity、React/Vue (SPA) |
| Controller | 請求接收、參數綁定、協調 Model/View、回應決定 | Servlet、Struts Action、Spring MVC @Controller、REST Controller |
「View 不能有 Java 程式碼」 — 錯誤。JSP 作為 View 技術,使用 JSTL/EL 表達式存取 Model 資料是標準做法。關鍵在於:View 只負責呈現,不包含業務邏輯、資料庫存取、複雜演算法。
「Struts = MVC 全部」 — 錯誤。Struts 僅是 Presentation 層的 Front Controller。Business Delegate、Service、DAO 屬於 Business/Integration 層,不在 Struts 職責內。
當 JSP/模板需處理格式化、條件渲染、集合轉換等複雜邏輯時,引入 View Helper (TagLib、EL Function、Helper Bean) 封裝呈現邏輯,保持模板乾淨。
+--------------------------+ | Presentation | ← MVC 在這裡 | (Controller + View) | +--------------------------+ | Business | ← Service, Domain Model +--------------------------+ | Integration | ← DAO, Repository, External API +--------------------------+
先做三層架構設計(整合層、業務層介面),再決定 Presentation 如何與 Business 互動,才是專案成功關鍵。
| 場景 | 推薦方案 |
|---|---|
| 傳統伺服端渲染、團隊熟悉 JSP | Spring MVC + Thymeleaf/JSP |
| REST API + 前端框架 | Spring Boot @RestController + React/Vue/Angular |
| 微服務、雲原生、GraalVM Native | Spring Boot 3 / Quarkus / Micronaut |
| 輕量、函數式、無反射 | Helidon MP / Vert.x / Javalin |
MVC 不是框架,是架構模式。理解其核心——關注點分離、單一職責、依賴反轉——比記住某個框架的 XML 配置更有價值。無論技術棧如何演進,這三大原則永遠是優秀 Java Web 架構的基石。