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

JavaWeb 分層架構演進史:從 Model 1/2 到 MVC 與三層架構的本質區別

     編輯:Java 綜合教學

JavaWeb 分層架構演進史:從 Model 1/2 到 MVC 與三層架構的本質區別

JavaWeb 架構經歷了 **JSP 巨石 → Model 1 → Model 2 (MVC) → 三層架構 → 微服務** 的演進。本文通過對比 **Model 1、Model 2、MVC、三層架構** 的核心差異、職責劃分、代碼組織形式,幫你建立清晰的架構認知地圖。

一、遠古時代:JSP 巨石應用 (Model 0)

<%-- login.jsp --%>
<%
    // 1. 獲取參數
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    // 2. 直連數據庫 (JDBC 代碼內嵌)
    Connection conn = DriverManager.getConnection(url, user, pwd);
    PreparedStatement ps = conn.prepareStatement("SELECT * FROM user WHERE username=? AND password=?");
    ps.setString(1, username); ps.setString(2, password);
    ResultSet rs = ps.executeQuery();
    // 3. 邏輯判斷 & 頁面跳轉
    if (rs.next()) {
        session.setAttribute("user", username);
        response.sendRedirect("index.jsp");
    } else {
        out.println("登入失敗");
    }
%>

四大痛點: HTML/Java 強耦合、邏輯與視圖混淆、難以單元測試、前後端協作地獄。

二、Sun 官方規範:Model 1 與 Model 2

維度Model 1 (Page-Centric)Model 2 (Servlet-Centric)
核心差異**JSP 同時充當 Controller 和 View****Servlet 做 Controller,JSP 專職 View**
流程控制JSP 內嵌 <% ... %> 控制跳轉Servlet 處理請求、調用 Model、選擇 JSP
數據傳遞JSP 直接調用 JavaBeanServlet 創建 Bean 放入 request/session,JSP 取出渲染
優點簡單、開發快、適合極小項目職責分離、可測試、支撐大型應用
缺點JSP 依然臃腫、邏輯分散Servlet 編寫繁瑣 (後由 Struts/Spring MVC 解決)

Model 2 典型流程

  1. 瀏覽器發起 HTTP 請求。
  2. DispatcherServlet (前端控制器) 攔截。
  3. 根據 URL 映射找到對應 Controller (Action)。
  4. Controller 調用 Service 處理業務,獲取 Model 數據。
  5. Controller 選擇 View (JSP/Thymeleaf),將 Model 暴露給 View。
  6. View 渲染輸出 HTML 返回瀏覽器。

三、MVC 模式:Model 2 的標準化實現

MVC = Model + View + Controller,是 Model 2 的規範化稱呼。

角色職責典型技術
Model (模型)業務數據 + 業務規則封裝。JavaBean、Entity、DTO、Service 返回值。POJO、JPA Entity、MyBatis ResultMap
View (視圖)數據展示、用戶交互。模板引擎渲染動態數據。JSP、Thymeleaf、FreeMarker、Velocity、React/Vue (前後端分離)
Controller (控制器)請求分發、參數校驗、調用 Service、選擇 View、異常處理。Servlet、Struts Action、Spring MVC @Controller/@RestController

現代框架本質:

  • Struts 1 / Spring MVC:單一 DispatcherServlet 做前端控制器。
  • Struts 2:Filter (StrutsPrepareAndExecuteFilter) 做前端控制器。
  • Model 統一為 POJO,業務邏輯下沉到 Service 層。

四、三層架構:物理/邏輯分層的工程化落地

三層 ≠ MVC**。MVC 是 **Web 表現層內部** 的設計模式;三層架構是 **整個應用系統** 的宏觀邏輯分層。

層次別名核心職責包含內容
表現層UI Layer / Web Layer接收請求、參數綁定、調用業務、視圖渲染/JSON 序列化Controller、View、Filter、Interceptor、DTO/VO
業務邏輯層BLL / Service Layer核心業務規則、事務控制、跨 DAO 協調、權限校驗Service、Domain Service、@Transactional
數據訪問層DAL / DAO LayerCRUD、SQL 構建、連接池、緩存一致性Mapper、Repository、JdbcTemplate、RedisTemplate

三層架構核心原則

  1. 高內聚: 層內類職責單一、關聯緊密。
  2. 低耦合: 層間**單向依賴** (表現 → 業務 → 數據)、**面向接口編程** (Service 依賴 DAO 接口)。
  3. 依賴倒置: 高層不依賴低層實現,雙方依賴抽象。

五、MVC 與三層的映射關係

┌─────────────────────────────────────┐
│           表現層 (UI Layer)          │  ←→  MVC 整體運行在這一層
│  ┌───────────────────────────────┐  │
│  │   Controller (Servlet/Action)  │  │
│  │   View (JSP/Thymeleaf)         │  │
│  │   Model (DTO/VO/Form Bean)     │  │
│  └───────────────────────────────┘  │
├─────────────────────────────────────┤
│           業務邏輯層 (BLL)           │
│  Service, Domain Model, Transaction │
├─────────────────────────────────────┤
│           數據訪問層 (DAL)           │
│  DAO/Mapper, Repository, ORM        │
└─────────────────────────────────────┘

關鍵認知:

  • MVC 的 **Model** 只是表現層需要的**數據載體** (DTO/VO),**不包含** Service/DAO。
  • Service 屬於 **業務層**,DAO 屬於 **數據層**,它們在 MVC 圖中**不直接出現**。
  • Controller 調用 Service,Service 調用 DAO — 這是**層間調用**,非 MVC 內部協作。

六、總結:架構演進的本質

Model 1:JSP 包辦一切 → 耦合度極高。
Model 2 / MVC:引入 Controller 分離流程控制 → Web 表現層內部分工。
三層架構:將業務邏輯、數據訪問從表現層**物理剝離** → 整體系統邏輯解耦。
微服務 / DDD:按業務域劃分獨立服務 → 組織級解耦。

每一次演進都是為了**將變化點隔離、將穩定點復用**。理解每一層的「職責邊界」與「依賴方向」,比背誦定義更能指導實戰架構決策。

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