一、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 取代 |