| 維度 | Spring MVC | Struts 2 |
|---|---|---|
| 核心入口 | DispatcherServlet (Servlet) | StrutsPrepareAndExecuteFilter (Filter) |
| 攔截時機 | Service() 方法執行時 | 請求進入容器後、Servlet 前 |
| URL 模式 | 通常配置 *.do 或 / | 通常配置 /* |
| 請求處理流程 | Servlet → Controller → View | Filter → Interceptor → Action → Result |
<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>
流程:
https://host/app/user/listDispatcherServlet 接收請求HandlerMapping 確定 ControllerModelAndViewViewResolver 解析視圖<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>
流程:
StrutsPrepareAndExecuteFilter 攔截ActionMapping 確定 ActionResult 類型決定響應方式 (JSP、FreeMarker、JSON 等)ServletContext、HttpSession 等原生對象async 非同步處理 (Servlet 3.0+)「入口是 Servlet 還是 Filter」本質上反映了兩個框架架構哲學的差異:Spring MVC 選擇擁抱 Servlet 標準,深度整合 Spring 生態;Struts 2 選擇 Filter 提供更靈活的攔截機制與 Action 解耦。現代開發中 Spring MVC 佔據主流,但理解兩者機制有助於遷移與維護舊系統。