一、Spring MVC
1.1 概述
Spring MVC 是 Spring 框架的一部分,是一個基于 MVC 設計模式的輕量級 Web 框架。它提供了靈活的配置和強大的擴展能力,適合構建復雜的 Web 應用程序。
1.2 特點
- 輕量級:與 Spring 框架無縫集成,依賴注入和面向切面編程(AOP)支持良好。
- 靈活性:支持多種視圖技術(JSP、Thymeleaf、Freemarker 等)。
- 注解驅動:通過注解(如 @Controller、@RequestMapping)簡化配置。
- REST 支持:原生支持 RESTful 風格的 Web 服務。
- 測試友好:易于單元測試和集成測試。
1.3 核心組件
- DispatcherServlet:前端控制器,負責接收所有請求并將其分發給相應的處理器。
- HandlerMapping:映射請求 URL 到具體的處理器(Controller)。
- Controller:處理請求并返回模型和視圖。
- ModelAndView:封裝模型數據和視圖信息。
- ViewResolver:解析視圖名稱并返回具體的視圖對象(如 JSP、Thymeleaf 等)。
1.4 工作流程
- 客戶端發送請求到 DispatcherServlet。
- DispatcherServlet 通過 HandlerMapping 找到對應的 Controller。
- Controller 處理請求并返回 ModelAndView。
- DispatcherServlet 通過 ViewResolver 解析視圖。
- 視圖渲染并返回響應給客戶端。
1.5 示例代碼
@Controller
public class HelloController {@RequestMapping("/hello")public ModelAndView hello() {ModelAndView modelAndView = new ModelAndView("hello");modelAndView.addObject("message", "Hello, Spring MVC!");return modelAndView;}
}
二、Struts2
2.1 概述
Struts2 是 Apache Struts 項目的第二代框架,是一個基于 MVC 設計模式的 Web 框架。它繼承了 Struts1 的優點,并引入了 WebWork 的設計理念,提供了更強大的功能和更靈活的配置。
2.2 特點
- 強大的攔截器機制:通過攔截器實現 AOP 功能(如日志、權限檢查等)。
- 配置文件驅動:通過 XML 文件配置 Action 和攔截器。
- OGNL 表達式:支持強大的數據綁定和表達式語言。
- 插件機制:通過插件擴展框架功能。
- 社區支持:擁有活躍的社區和豐富的插件。
2.3 核心組件
- FilterDispatcher:前端控制器,負責接收所有請求并將其分發給相應的 Action。
- Action:處理請求并返回結果(如 SUCCESS、ERROR 等)。
- Interceptor:攔截器,用于在 Action 執行前后進行處理(如日志、權限檢查等)。
- Result:根據 Action 的返回結果選擇相應的視圖(如 JSP、Freemarker 等)。
- ValueStack:用于在視圖和 Action 之間傳遞數據。
2.4 工作流程
- 客戶端發送請求到 FilterDispatcher。
- FilterDispatcher 通過配置文件找到對應的 Action。
- Interceptor 在 Action 執行前后進行處理。
- Action 處理請求并返回結果。
- Result 根據結果選擇視圖并渲染響應。
2.5 示例代碼
(1)Action 類
public class HelloAction extends ActionSupport {private String message;public String execute() {message = "Hello, Struts2!";return SUCCESS;}public String getMessage() {return message;}
}
(2)配置文件(struts.xml)
<struts><package name="default" extends="struts-default"><action name="hello" class="com.example.HelloAction"><result name="success">/hello.jsp</result></action></package>
</struts>
三、Spring MVC 與 Struts2 的對比
特性 | Spring MVC | Struts2 |
---|---|---|
設計理念 | 輕量級,與 Spring 框架無縫集成 | 基于攔截器的 MVC 框架 |
配置方式 | 注解驅動,支持 XML 配置 | 配置文件驅動(struts.xml) |
攔截器機制 | 通過 AOP 實現 | 內置強大的攔截器機制 |
數據綁定 | 支持多種數據綁定方式 | 使用 OGNL 表達式進行數據綁定 |
視圖技術 | 支持多種視圖技術(JSP、Thymeleaf 等) | 支持多種視圖技術(JSP、Freemarker 等) |
REST 支持 | 原生支持 RESTful 風格 | 需要插件支持 RESTful 風格 |
測試友好性 | 易于單元測試和集成測試 | 測試相對復雜 |
社區支持 | 社區活躍,文檔豐富 | 社區活躍,但逐漸被 Spring MVC 取代 |