spring MVC 介绍
Spring MVC 是 Spring 框架中用于构建 Web 应用的核心模块,基于 MVC 设计模式(Model-View-Controller)实现。以下是其核心概念的整理:
1. MVC 设计模式
• Model(模型):封装业务数据和业务逻辑(如 POJO 对象、Service 层)。
• View(视图):负责数据展示(如 JSP、Thymeleaf、HTML)。
• Controller(控制器):接收请求,调用业务逻辑,返回模型和视图。
2. 核心组件
(1) DispatcherServlet(前端控制器)
• 作用:Spring MVC 的入口,统一处理所有请求,协调各组件工作。
• 配置:在 web.xml
中定义,或通过 Spring Boot 自动配置。
• 流程:
- 接收 HTTP 请求。
- 调用
HandlerMapping
找到对应的控制器(Controller)。 - 调用
HandlerAdapter
执行控制器逻辑。 - 处理结果通过
ViewResolver
解析为视图。
(2) HandlerMapping
• 作用:根据请求 URL 找到对应的 Controller 和方法。
• 默认实现:RequestMappingHandlerMapping
(基于 @RequestMapping
注解)。
(3) Controller
• 作用:处理具体业务逻辑,返回数据或视图。
• 核心注解:
• @Controller
:标记为控制器。
• @RestController
:专用于 REST API(等价于 @Controller + @ResponseBody
)。
• @RequestMapping
:定义请求映射路径(类或方法级别)。
• @GetMapping
、@PostMapping
等:简化特定 HTTP 方法的映射。
(4) ViewResolver(视图解析器)
• 作用:将逻辑视图名(如 "home"
)解析为实际视图(如 home.jsp
)。
• 常用实现:
• InternalResourceViewResolver
:解析 JSP。
• ThymeleafViewResolver
:解析 Thymeleaf 模板。
(5) Model
• 作用:向视图传递数据的容器。
• 使用方式:
• 通过 Model
对象(方法参数)添加数据。
• 使用 @ModelAttribute
绑定请求参数到对象。
3. 请求处理流程
- 用户发起请求 → DispatcherServlet 接收请求。
- 查询 HandlerMapping → 找到对应的 Controller 方法。
- 调用 HandlerAdapter → 执行控制器方法。
- 处理业务逻辑 → 返回
ModelAndView
(或直接返回数据)。 - 解析视图 → ViewResolver 将逻辑视图名解析为实际视图。
- 渲染视图 → 结合 Model 数据生成 HTML/JSON 响应。
4. 关键注解
(1) 请求映射
• @RequestMapping
:定义 URL 路径和 HTTP 方法。
@RequestMapping(value = "/user", method = RequestMethod.GET)
• @GetMapping
、@PostMapping
等:简化版映射注解。
(2) 参数绑定
• @RequestParam
:绑定请求参数到方法参数。
public String getUser(@RequestParam("id") Long id) { ... }
• @PathVariable
:绑定 URL 路径变量。
@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) { ... }
• @RequestBody
:将请求体(JSON/XML)绑定到对象。
@PostMapping("/user")
public User createUser(@RequestBody User user) { ... }
(3) 数据传递
• Model
:通过方法参数传递数据到视图。
@GetMapping("/users")
public String listUsers(Model model) {
model.addAttribute("users", userService.findAll());
return "user/list";
}
• @ModelAttribute
:绑定表单数据到对象。
@PostMapping("/user")
public String saveUser(@ModelAttribute User user) { ... }
(4) 数据验证
• @Valid
:触发 JSR-303 验证(需配合 hibernate-validator
)。
@PostMapping("/user")
public String saveUser(@Valid @ModelAttribute User user, BindingResult result) {
if (result.hasErrors()) { ... }
}
5. 视图技术
• JSP:传统 Java 视图技术,需配置 ViewResolver
。
• Thymeleaf:现代模板引擎,与 Spring Boot 集成简单。
• JSON 响应:使用 @ResponseBody
或 @RestController
返回 JSON 数据。
6. RESTful 支持
• HTTP 方法语义化:
• GET
查询,POST
新增,PUT
更新,DELETE
删除。
• 状态码与响应:
• 使用 ResponseEntity
控制状态码和响应头。
@GetMapping("/user/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return ResponseEntity.ok(user); // 200 OK
}
7. 高级特性
(1) 拦截器(Interceptor)
• 作用:在请求处理前后插入逻辑(如日志、权限校验)。
• 实现:实现 HandlerInterceptor
接口,配置到 InterceptorRegistry
。
(2) 异常处理
• @ExceptionHandler
:在 Controller 内处理特定异常。
• @ControllerAdvice
:全局异常处理(所有 Controller 共享)。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity.status(500).body(e.getMessage());
}
}
(3) 文件上传
• 使用 MultipartFile
接收上传文件。
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) { ... }
8. 与其他技术集成
• 数据库:整合 Spring Data JPA、MyBatis。
• 安全:通过 Spring Security 实现权限控制。
• 测试:使用 MockMvc
模拟 HTTP 请求测试 Controller。
总结
Spring MVC 的核心是 DispatcherServlet 驱动的请求处理流程,通过注解简化配置,结合组件化设计实现灵活扩展。掌握以下关键点即可快速上手:
- 请求映射(
@RequestMapping
系列注解)。 - 参数绑定与数据验证。
- 视图解析与数据传递。
- RESTful API 设计。
- 拦截器与全局异常处理。
结合 Spring Boot 可进一步简化配置,快速构建 Web 应用。建议通过实际项目(如用户管理系统)练习核心功能。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/596449.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!