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

J2EE MVC 架構演進:從 Model 1/2 到 Spring Boot 的最佳實踐路線圖

     編輯:Java 相關知識

前言:MVC 在 Java Web 的演變史

MVC (Model-View-Controller) 由 Trygve Reenskaug 於 1979 年 Smalltalk-80 提出,Sun 於 J2EE 藍圖確立為核心模式。本文梳理 Java Web 從 JSP Model 1/2、Struts 1/2、Spring MVC 到 Spring Boot 的架構演進,剖析各階段核心痛點與解決方案。

第一階段:JSP Model 1 —— 「大雜燴」反模式

<%-- list.jsp --%>
<% 
    Connection conn = DriverManager.getConnection(...);
    ResultSet rs = stmt.executeQuery("SELECT * FROM user");
    while(rs.next()) { %>
        <tr><td><%= rs.getString("name") %></td></tr>
    <% } %>
  • 缺陷:JSP 混雜 Java 代碼、SQL、HTML、JS,職責不清,難測試、難維護、前後端強耦合。
  • 定位:極簡原型、極小專案、臨時腳本。

第二階段:JSP Model 2 —— Servlet 做 Controller 的雛形

角色技術實現職責
ModelJavaBean / EJB業務邏輯、資料存取、狀態封裝
ViewJSP (僅 JSTL/EL)頁面渲染,無 Java 腳本片
ControllerServlet (單入口或多 Servlet)請求分發、參數綁定、視圖轉向

web.xml 配置 Servlet 映射:

<servlet>
    <servlet-name>UserController</servlet-name>
    <servlet-class>com.example.UserController</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>UserController</servlet-name>
    <url-pattern>/user/*</url-pattern>
</servlet-mapping>
  • 優勢:分層清晰、可復用、可測試。
  • 痛點:手寫 Servlet 繁瑣、參數手動綁定/校驗、視圖轉向硬編碼、缺乏統一異常處理、國際化、檔案上傳等通用支援。

第三階段:Struts 1/2 —— 成熟 MVC 框架標準化

Struts 1 (ActionForm + Action)

  • 單例 Action 執行緒安全問題、ActionForm 強制繼承、綁定僅支援簡單型別、配置 XML 膨脹。

Struts 2 (攔截器 + OGNL + POJO Action)

  • POJO Action 易測試、攔截器鏈實現橫切關注點、OGNL 表達式強大但安全漏洞頻出、效能較弱、學習曲線陡峭。

共同局限:侵入性強 (繼承基類/實作介面)、配置繁重、視圖技術綁定 JSP、難以單元測試 Controller 邏輯。

第四階段:Spring MVC —— 非侵入式、註解驅動、生態整合

核心優勢

  • POJO Controller:@Controller + @RequestMapping,無需繼承/實作,易測試 (直接 new Controller().method())。
  • 靈活參數綁定:@RequestParam, @PathVariable, @RequestBody, @ModelAttribute,支援驗證 (JSR-303)。
  • 強大視圖解析:JSP, Thymeleaf, FreeMarker, JSON (MappingJackson2View), Excel, PDF 即插即用。
  • 攔截器/切面整合:Spring AOP 無縫支援事務、權限、日誌、快取。
  • RESTful 原生支援:@RestController、ResponseEntity、HTTP 狀態碼語義化。

第五階段:持久層演進 —— JDBC → Hibernate → MyBatis → Spring Data JPA

階段代表技術核心特點適用場景
手寫 JDBCDataSource + Template完全控制、效能最高、樣板碼極多極簡專案、批量導入、存儲過程
全自動 ORMHibernate / JPA物件關係映射、一級/二級快取、HQL/JPQL、延遲載入領域模型豐富、複雜關聯、團隊有 ORM 經驗
半自動 SQL 映射MyBatis / MyBatis-PlusSQL 手寫可控、動態 SQL 強、映射靈活、無快取驚喜報表查詢、複雜 SQL、DBA 管控嚴格、團隊偏好 SQL
Repository 抽象Spring Data JPA接口宣告即實現、方法名解析查詢、Spec/QueryDSL 複雜查詢標準 CRUD 佔 80%+、快速開發、規範化團隊

第六階段:Spring Boot —— 約定大於配置,微服務就緒

解決傳統 Spring 痛點

  • 自動配置:spring-boot-starter-web 一鍵引入 Tomcat + Spring MVC + Jackson + Validation。
  • 內嵌容器:Jar 包獨立運行 java -jar app.jar,無需 WAR 部署 Tomcat。
  • 生產級監控:Actuator + Micrometer + Prometheus/Grafana。
  • 配置外部化:YAML/Properties + 環境變數 + Config Server。

現代 Java Web 架構選型建議 (2024+)

專案類型推薦棧理由
企業級單體/模塊化單體Spring Boot 3 + Spring MVC + MyBatis-Plus + Thymeleaf/Vue/React成熟穩定、生態豐富、團隊易招聘、長期維護低風險
微服務/雲原生Spring Boot 3 + Spring Cloud 2023 + Gateway + Nacos + Sentinel + OpenFeign服務治理完備、K8s 原生、GraalVM 原生映像支援
高併發 API / 即時系統Spring WebFlux (Reactive) + R2DBC + Netty 或 Vert.x / Go非阻塞、背壓、少執行緒高吞吐
輕量級 / Serverless / GraalVM NativeMicronaut / Quarkus / Helidon啟動極快、記憶體極小、編譯期 DI/AOP、無反射
Kotlin 技術棧Spring Boot 3 + Kotlin + Coroutines + Exposed/Ktorm語法簡潔、空安全、協程非阻塞、與 Spring 無縫互操作

架構師心法:MVC 只是分層指導原則,非具體框架。Spring MVC 是實現 MVC 的最佳 Java 實踐,Spring Boot 讓它開箱即用。不要為了「純粹」拒絕成熟框架,也不要為了「方便」濫用自動配置掩蓋架構腐化。定期進行架構評審,保持 Controller 薄、Service 富、Repository 專、Domain 核心。

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