初學 Struts 時常有疑惑:既然 Servlet 也能實現 MVC,Struts 只是多了一個 ActionServlet,代碼量沒減少,還引入複雜配置,究竟好在哪?深入實踐後發現,Struts 最大價值不在「減碼」,而在「規範」。
| 層次 | 原生 Servlet | Struts |
|---|---|---|
| 視圖 | JSP | JSP(相同) |
| 控制器 | 自定義 Servlet | Action + ActionServlet |
| 模型 | JavaBean/EJB | JavaBean/EJB(相同) |
乍看之下,Struts 只是將控制器邏輯從 Servlet 移至 Action,並增加了統一入口 ActionServlet。
ActionServlet 攔截請求,注入 ActionForm 和 ActionMapping,後者是關鍵:
struts-config.xml 配置,無需動 Java 代碼,熱生效。軟件工程鐵律:直接面向用戶的視圖層變化最頻繁。外部化轉發配置,精準隔離變化點。
雖然 Servlet 也能寫出 MVC 代碼,但現實中:
Struts 通過強制結構(ActionForm、Action、Forward 配置、標籤庫),在框架層面物理隔離關注點,讓開發者「不得不」遵循 MVC。這才是框架的根本目的:約束行為,使優秀架構成為唯一自然選擇。
Struts 可能不減少代碼行數,甚至引入配置開銷,但它以強制性結構換取了架構的長期穩定性。對於團隊協作、長期演進的項目,這筆「規範成本」極其划算。