許多初學者盲目背誦 Struts2、Spring、Hibernate(SSH)API,卻不知其所以然。本文以最簡單的「用戶登錄」為例,串聯 Web 開發演進史:從 Model 1(JSP 混寫 Java)→ Model 2(Servlet 分離)→ Struts 1/2(MVC 框架)→ Spring MVC(註解驅動),揭示框架本質是為了解決特定問題而誕生的「半成品」,而 MVC 設計模式才是貫穿始終的核心架構思想。
<%
String name = request.getParameter("name");
String password = request.getParameter("password");
UserHandler handler = new UserHandler();
if (handler.authenticate(name, password)) { %>
<p>登錄成功</p>
<% } else { %>
<p>登錄失敗</p>
<% } %>
痛點:邏輯與視圖耦合、代碼不可復用、維護困難、事務/日志無統一支持。
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
String name = req.getParameter("name");
String pwd = req.getParameter("password");
UserHandler handler = new UserHandler();
String msg = handler.authenticate(name, pwd) ? "成功" : "失敗";
req.setAttribute("message", msg);
req.getRequestDispatcher("/result.jsp").forward(req, resp);
}
}
痛點:每個 Servlet 需在 web.xml 配置映射,配置爆炸;邏輯仍分散在各 Servlet 中。
Struts 通過 struts-config.xml/struts.xml 集中管理 URL 到 Action 的映射,實現請求分發、數據封裝、類型轉換、驗證、國際化等通用功能,極大減輕樣板代碼。
無論技術如何演進,Web 應用永遠離不開三個核心要素:
| MVC 角色 | 職責 | 登錄案例體現 |
|---|---|---|
| Model (模型) | 數據邏輯、業務規則、持久化 | User 實體、UserHandler/Service、DAO |
| View (視圖) | 數據展示、用戶交互界面 | login.jsp、result.jsp、HTML/CSS/JS |
| Controller (控制器) | 接收請求、協調 Model/View、流程控制 | LoginServlet、Struts Action、Spring MVC @Controller |
經典 MVC 圖忽略了數據流動中的具體難題,框架正是針對這些難題提供標準化方案:
「框架不重要,概念是王道。只要深刻理解 MVC 概念,框架對你來說只是一個 jar 包而已。」
技術棧會過時(Struts2 已淡出,Spring Boot/Cloud 成主流),但MVC 分層思想、IoC 容器原理、AOP 切面編程、ORM 映射機制等核心概念永不過時。程序員的競爭力在於「透過現象看本質」的架構思維,而非 API 調用熟練度。
