📚 目录
- 什么是 SpringMVC?
- SpringMVC 核心组件与处理流程
- 请求接收与分发机制(DispatcherServlet)
- 控制器(Controller)与请求映射(@RequestMapping)
- 数据绑定与参数获取机制
- 前后端数据交互方式(JSON、表单、路径、Header)
- 响应数据返回机制(ModelAndView、@ResponseBody)
- 异常处理与拦截器机制
- 与前端框架(Vue、AJAX)的整合技巧
- 小结与实战建议
1. 什么是 SpringMVC?
SpringMVC 是 Spring Framework 的一部分,是一个基于 Model-View-Controller 模式的 轻量级 Web 框架,主要用于处理 Web 请求与响应。
目标是将业务逻辑、页面渲染和用户交互分离,提高系统可维护性和开发效率。
2. SpringMVC 核心组件与处理流程
SpringMVC 的核心组件包括:
组件名 | 作用 |
---|---|
DispatcherServlet | 请求分发器,统一接收与转发 HTTP 请求 |
HandlerMapping | 根据请求路径找到处理器(Controller) |
Controller | 控制器,编写业务逻辑和数据处理 |
HandlerAdapter | 调用控制器方法并注入参数 |
ModelAndView | 封装返回的视图名与数据模型 |
ViewResolver | 将视图名解析为实际视图(如 JSP、HTML) |
View | 视图渲染器,输出页面或 JSON |
3. 请求接收与分发机制(DispatcherServlet)
SpringMVC 的核心入口是 DispatcherServlet
,它的工作流程如下:
- 用户发出 HTTP 请求 → DispatcherServlet
- 查找
HandlerMapping
→ 找到对应的 Controller 方法 - 通过
HandlerAdapter
反射调用目标方法 - 返回
ModelAndView
→ 交给ViewResolver
解析 - 返回 HTML 页面、JSON 或重定向响应
4. 控制器(@Controller)与请求映射(@RequestMapping)
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/info")
public String userInfo(Model model) {
model.addAttribute("name", "Tom");
return "user_info"; // 转发到 user_info.jsp 或 HTML
}
@PostMapping("/add")
@ResponseBody
public String addUser(@RequestBody User user) {
// 处理新增逻辑
return "添加成功";
}
}
- 支持 RESTful 风格(@GetMapping、@PostMapping 等)
- 支持路径参数、请求参数、请求体等多种传参方式
5. 数据绑定与参数获取机制
SpringMVC 自动将 HTTP 请求参数绑定到方法参数:
常见注解
注解 | 用法说明 |
---|---|
@RequestParam | 获取 GET/POST 的单个请求参数 |
@PathVariable | 获取 URL 中的路径变量 |
@RequestBody | 获取请求体中的 JSON 数据并反序列化 |
@ModelAttribute | 用于封装表单参数到对象中(表单提交) |
示例:
@GetMapping("/user/{id}")
public User getUser(@PathVariable Integer id) {...}
@PostMapping("/save")
public String saveUser(@ModelAttribute User user) {...}
6. 前后端数据交互方式详解
交互方式 | 常见场景 | SpringMVC 中的处理方式 |
---|---|---|
表单提交 | 注册、登录表单 | @ModelAttribute |
URL参数 | 查询、搜索 | @RequestParam |
路径参数 | RESTful API,如 /user/1 | @PathVariable |
JSON请求体 | 前端框架 AJAX/Vue 发送 JSON | @RequestBody + 实体类接收 |
JSON响应体 | 前后端分离返回数据 | @ResponseBody 或 RestController |
请求头参数 | token、设备号等 | @RequestHeader |
7. 响应数据返回机制
1. 返回视图页面(传统方式):
return "user_info"; // 页面跳转
2. 返回数据对象(前后端分离):
@ResponseBody
public Result getData() {
return new Result(200, "OK", data);
}
或使用:
@RestController // 等于 @Controller + @ResponseBody
public class ApiController {}
8. 异常处理与拦截器机制
异常处理方式
- 使用
@ExceptionHandler
单控制器异常处理 - 使用
@ControllerAdvice
统一异常处理
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public String handle(Exception e) {
return "系统错误:" + e.getMessage();
}
}
拦截器(Interceptor)
- 登录拦截、权限验证、日志记录等用途
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(...) {
// 拦截处理逻辑
}
}
注册方式:
@Configuration
public class WebConfig implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");
}
}
9. 与前端框架整合(Vue / AJAX / Axios)
AJAX 发送请求示例(jQuery):
$.post('/user/add', {name: 'Tom', age: 20}, function(res){
console.log(res);
});
Axios 请求示例(Vue):
axios.post('/api/user', {
name: 'Lucy',
age: 22
}).then(response => {
console.log(response.data);
});
SpringMVC 后端接收方式:
@PostMapping("/api/user")
@ResponseBody
public Result save(@RequestBody User user) {
return Result.success(userService.save(user));
}
🔚 10. 小结与实战建议
重点组件 | 熟练掌握 |
---|---|
DispatcherServlet | 整体分发入口,了解流程图 |
Controller | 熟悉注解方式、请求映射 |
参数注入 | @RequestParam 、@RequestBody 等区分用法 |
JSON处理 | 使用 @RestController 简化响应结构 |
异常 & 拦截器 | 提高系统健壮性与安全性 |
🔗 参考资料
- SpringMVC 官方文档
- 《Spring 实战》第5版(Spring In Action)
- 开源实战项目:SpringBoot + Vue 实现前后端分离框架
发表回复