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

Spring MVC 與 Struts 2 核心架構差異:Servlet 與 Filter 的入口機制解析

     編輯:程式設計綜合問答

核心差異一覽

維度Spring MVCStruts 2
核心入口DispatcherServlet (Servlet)StrutsPrepareAndExecuteFilter (Filter)
攔截時機Service() 方法執行時請求進入容器後、Servlet 前
URL 模式通常配置 *.do 或 /通常配置 /*
請求處理流程Servlet → Controller → ViewFilter → Interceptor → Action → Result

Spring MVC:DispatcherServlet 機制

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

流程:

  1. 用戶發起請求 https://host/app/user/list
  2. DispatcherServlet 接收請求
  3. 尋找 HandlerMapping 確定 Controller
  4. 執行 Controller 邏輯返回 ModelAndView
  5. ViewResolver 解析視圖
  6. 渲染視圖返回響應

Struts 2:Filter 機制

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

流程:

  1. 請求通過 Filter 鏈
  2. StrutsPrepareAndExecuteFilter 攔截
  3. ActionMapping 確定 Action
  4. 攔截器鏈執行 (pre → action → post)
  5. Action 執行業務邏輯
  6. Result 類型決定響應方式 (JSP、FreeMarker、JSON 等)

深度對比:為何選擇不同機制?

Servlet (Spring MVC) 優勢

  • 符合 Java EE 標準,生命週期由容器管理
  • 可獲取 ServletContext、HttpSession 等原生對象
  • 支援 async 非同步處理 (Servlet 3.0+)
  • 與 Spring 容器無縫整合

Filter (Struts 2) 優勢

  • 更早攔截請求,可進行編碼設定、靜態資源過濾
  • 不依賴 Servlet API,理論上可移植至非 Servlet 容器
  • 攔截器機制靈活,支援橫切關注點 (權限、日誌、事務)
  • Action 為 POJO,易於測試

實際開發中的選擇建議

選擇 Spring MVC 當:

  • 專案已使用 Spring 生態
  • 需要 RESTful API 設計
  • 團隊熟悉註解式開發
  • 追求效能與非同步支援

選擇 Struts 2 當:

  • 維護舊專案
  • 需要強大的表單驗證與類型轉換
  • 偏好配置驅動而非註解
  • 需要豐富的 Result 類型支援

總結

「入口是 Servlet 還是 Filter」本質上反映了兩個框架架構哲學的差異:Spring MVC 選擇擁抱 Servlet 標準,深度整合 Spring 生態;Struts 2 選擇 Filter 提供更靈活的攔截機制與 Action 解耦。現代開發中 Spring MVC 佔據主流,但理解兩者機制有助於遷移與維護舊系統。

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