📚 目录

  1. 什么是 SpringMVC?
  2. SpringMVC 核心组件与处理流程
  3. 请求接收与分发机制(DispatcherServlet)
  4. 控制器(Controller)与请求映射(@RequestMapping)
  5. 数据绑定与参数获取机制
  6. 前后端数据交互方式(JSON、表单、路径、Header)
  7. 响应数据返回机制(ModelAndView、@ResponseBody)
  8. 异常处理与拦截器机制
  9. 与前端框架(Vue、AJAX)的整合技巧
  10. 小结与实战建议

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,它的工作流程如下:

  1. 用户发出 HTTP 请求 → DispatcherServlet
  2. 查找 HandlerMapping → 找到对应的 Controller 方法
  3. 通过 HandlerAdapter 反射调用目标方法
  4. 返回 ModelAndView → 交给 ViewResolver 解析
  5. 返回 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 实现前后端分离框架