Spring MVC 详细介绍
Spring MVC 是一种基于 Spring 框架实现的轻量级 Web 框架,采用了 MVC(Model-View-Controller)设计模式。它通过将 Web 层进行职责解耦,简化了日常开发,并提供了强大的功能,如文件上传、数据转换等12。
Spring MVC 的核心组件
- DispatcherServlet:前端控制器,接收所有请求并将其分发给相应的处理器。
- Handler Mapping:请求处理映射器,用于找到具体的处理器。
- Handler Adapter:处理适配器,调用具体的处理器。
- View Resolver:视图解析器,负责将逻辑视图名解析为具体的视图。
- Controller:控制器,处理具体的请求逻辑13。
常用注解
- @Controller:标记一个类为控制器。
- @RequestMapping:映射请求路径到具体的方法。
- @RequestParam:绑定请求参数到方法参数。
- @PathVariable:将 URL 中的模板变量映射到方法参数。
- @ResponseBody:将方法返回值直接写入 HTTP 响应体。
- @ModelAttribute:在调用控制器方法前执行,用于预处理数据。
- @SessionAttributes:将值存储到 session 作用域中12。
工作流程
- 客户端发送请求到 DispatcherServlet。
- DispatcherServlet 通过 Handler Mapping 找到对应的处理器。
- 处理器通过 Handler Adapter 被调用,返回 ModelAndView 对象。
- DispatcherServlet 将 ModelAndView 传递给 View Resolver。
- View Resolver 解析视图并返回给客户端13。
与 Struts2 的区别
- 核心组件:Struts2 基于 Filter,而 Spring MVC 基于 Servlet。
- 开发模式:Struts2 基于类开发,Spring MVC 基于方法开发。
- 数据存储:Struts2 使用值栈存储数据,Spring MVC 使用请求参数绑定12。
示例代码
以下是一个简单的 Spring MVC 控制器示例:
@Controller
public class TestController {
@RequestMapping(value="/user/{userId}/roles/{roleId}", method=RequestMethod.GET)
public String getLogin(@PathVariable("userId") String userId, @PathVariable("roleId") String roleId) {
System.out.println("User Id: " + userId);
System.out.println("Role Id: " + roleId);
return "hello";
}
}
重要性
Spring MVC 是大多数 Java 项目的基础,尤其是在 Spring 和 Spring Boot 项目中。它提供了灵活性、可配置性和可扩展性,帮助开发者构建高性能的 Web 应用程序23。