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

MVC 框架本質探討:從 JSP/Servlet 到 Struts/Spring 的演進邏輯

     編輯:Java 相關知識

現象:為什麼大家都在學框架?

面試問「為什麼用 Struts/Spring/Hibernate?」,許多開發者答不上來。實則是「為了學而學、為了工作而學」,忽略了框架誕生要解決的核心問題。

Web 開發演進史:以登入功能為例

階段一:Model 1 —— JSP 包辦一切

<% 
String name = request.getParameter("name");
UserHandler handler = new UserHandler();
if (handler.authenticate(name, pwd)) { %>
    <p>登入成功</p>
<% } else { %>
    <p>登入失敗</p>
<% } %>

痛點:Java/HTML 混雜、可讀性差、邏輯複用難、變更風險大、事務/日誌無統一支援。

階段二:Model 2 —— Servlet 做 Controller,JSP 做 View


// LoginServlet.java
protected void doPost(req, resp) {
    String name = req.getParameter("name");
    UserHandler handler = new UserHandler();
    String msg = handler.authenticate(name, pwd) ? "成功" : "失敗";
    req.setAttribute("msg", msg);
    req.getRequestDispatcher("/result.jsp").forward(req, resp);
}
<!-- web.xml -->
<servlet><servlet-name>Login</servlet-name>
    <servlet-class>com.demo.LoginServlet</servlet-class></servlet>
<servlet-mapping><servlet-name>Login</servlet-name>
    <url-pattern>/Login</url-pattern></servlet-mapping>

代價:每個 Servlet 需在 web.xml 註冊 URL 映射,配置膨脹,開發效率未根本提升。

階段三:Struts 1.x —— 封裝 MVC 基礎設施

  • ActionServlet 統一入口,struts-config.xml 映射 URL→Action。
  • ActionForm 自動封裝表單資料、驗證。
  • Action 處理業務,返回 ActionForward 控制跳轉。

解決了「職責分離」,但開發者仍困惑:框架到底幫我做了什麼?我到底需要它做什麼?

剝離表象,直擊本質:MVC 三要素

MVC 角色核心職責歷代實現形式
Model 資料與業務邏輯 JavaBean → EJB → Spring Bean / JPA Entity
View 資料呈現 JSP → Velocity/FreeMarker → Thymeleaf/React/Vue
Controller 請求分發、流程控制 Servlet → Struts Action → Spring MVC @Controller

MVC 圖景下的四大隱性挑戰

  1. 資料綁定:HTTP 扁平字串 → 豐富 Java 物件(類型轉換、集合綁定)。
  2. 資料驗證:格式、業務規則驗證,錯誤訊息回顯。
  3. 視圖渲染:Java 物件 → 多樣化呈現(HTML/JSON/PDF/Excel)。
  4. URL 路由:HTTP 請求 → Controller 方法映射(RESTful、參數綁定、攔截器鏈)。

Controller 內部還需處理:異常統一處理、結果封裝(JSON/View/Redirect)、國際化、權限攔截等。

框架的本質:問題的標準化解決方案

框架不是學習目標,而是解決上述問題的工具箱。不同框架針對不同痛點、以不同優雅度解決。學框架應帶著問題去:

  • 這個框架如何做資料綁定?
  • 如何整合驗證框架(Bean Validation)?
  • 如何支援 RESTful API 與傳統頁面雙模式?
  • 異常處理機制是否符合團隊規範?

正確學習路徑

  1. 手寫 Servlet/JSP 實現登入,體會原始痛點。
  2. 閱讀 web.xml、struts-config.xml、spring-mvc.xml,理解配置本質。
  3. 深入源碼:DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver。
  4. 對比 Struts 1/2、Spring MVC、WebFlux 設計差異。

總結

MVC 概念是王道,框架只是 Jar 包。為了解決問題而學框架,而非為了學框架而學框架,這才是程式設計師的正確進階之道。

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