模型-視圖-控制器 (MVC) 是 80 年代 Smalltalk-80 出現的軟體設計模式,現已廣泛使用。

MVC 不僅實現功能模組與顯示模組分離,還提高系統可維護性、可擴展性、可移植性與組件可復用性。
早期程式若不重視功能與顯示解耦,常導致複雜難維護。VB、Delphi 等 RAD 工具常有此問題。甚至 C#、Java 有時也會出現業務邏輯寫在顯示模組現象。
雖 MVC 早提出,但在 Web 專案引入卻步履維艱。主因:(1) 早期 Web 開發中程式語言與 HTML 分離難實現。CGI 以字串輸出生成 HTML;後來腳本語言出現又倒過來將程式嵌入 HTML。兩者同樣無法分離程式與 HTML。(2) 腳本語言功能較弱,缺乏支援 MVC 必要技術基礎。直到 J2EE 的 JSP Model 2 問世才改觀:用 JSP 實現視圖、Servlet 實現控制器、JavaBean 實現模型。
Sun 在 JSP 早期制定兩種規範 Model 1/2。Model 2 某程度實現 MVC 但應用不盡如人意。

JSP Model 1

JSP Model 2:易產生多個 Controller,頁面導航處理較複雜。
有人覺得 Model 2 仍不夠好,Craig R. McClanahan 2000 年 5 月 提交 Web framework 給 Java Community,後來成為 Struts。2001 年 7 月 Struts 1.0 正式發布,成為 Apache Jakarta 子專案。
Struts 本質上就是在 Model 2 基礎上實現的一個 MVC 架構:單一中心控制器、採用 XML 定制轉向 URL、用 Action 處理邏輯。