当前位置: 首页 > news >正文

SpringMVC 执行流程

前言:

在前后端分离的情况下,SpringMVC 的执行流程主要集中在处理 RESTful 请求和返回 JSON 数据。这里的 Controller 会直接返回数据,而不是视图。我们通常会使用 @RestController@RequestMapping 来处理请求,@ResponseBody 会让返回的数据自动转换成 JSON 格式。下面是简化后的流程:

一、SpringMVC 执行流程概述

  1. 请求到达 DispatcherServlet:客户端发起请求,由 DispatcherServlet 拦截并处理。
  2. 请求映射(Handler Mapping)DispatcherServlet 根据请求 URL 和 HTTP 方法查找对应的处理方法。
  3. 调用 Controller 方法DispatcherServlet 将请求交给对应的 Controller 方法处理,通常是业务逻辑处理。
  4. 返回 JSON 数据:Controller 处理完请求后,将结果以 JSON 格式返回,通常不使用 ModelAndView
  5. 响应返回客户端:SpringMVC 会将 Controller 返回的 JSON 数据作为 HTTP 响应发送到客户端。

二、详细解析 SpringMVC 执行流程

1. 请求到达 DispatcherServlet

在前后端分离的架构中,请求还是由 DispatcherServlet 进行拦截和处理。不同的是,DispatcherServlet 会选择合适的 HandlerMapping 来找到对应的 RESTful 控制器。

2. 请求映射(Handler Mapping)

SpringMVC 中的 HandlerMapping 会根据 URL 和 HTTP 方法(如 GET、POST)来找到对应的 Controller 方法。

例如,使用 @RestController@RequestMapping 注解时:

@RestController
public class UserController {@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)public User getUser(@PathVariable("id") Long id) {return userService.findUserById(id);  // 返回一个 User 对象}
}

在这个例子中,当客户端发送一个 GET 请求到 /user/{id} 时,DispatcherServlet 会找到 getUser 方法来处理该请求。

3. 调用 Controller 方法

Controller 方法接收到请求后,通常会执行业务逻辑,处理请求参数,并返回一个对象(通常是 POJO 或 DTO)。这个对象会自动转换成 JSON 格式并作为 HTTP 响应返回给客户端。

如果 Controller 方法返回一个对象,Spring 会通过 Jackson 或其他 JSON 处理库自动将该对象转化为 JSON 格式。

4. 返回 JSON 数据

在前后端分离的架构中,@RestController 使得 Controller 的返回值自动转换为 JSON 格式。你不需要手动创建 ModelAndView 对象,只需要返回业务逻辑处理后的对象,Spring 会自动将它转换成 JSON 响应。

例如:

@RestController
public class UserController {@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)public User getUser(@PathVariable("id") Long id) {User user = userService.findUserById(id);return user;  // 直接返回一个 POJO 对象,Spring 会自动转换为 JSON}
}

这里,User 对象会被自动转换成 JSON 格式,如:

{"id": 1,"name": "John Doe","age": 30
}

5. 响应返回客户端

SpringMVC 会将 Controller 返回的 JSON 数据作为 HTTP 响应的内容,发送给客户端,通常是前端应用(如 React、Vue.js)或移动应用(如 Android、iOS)进行处理和展示。

客户端接收到 JSON 数据后,可以通过 JavaScript 或其他技术解析数据并展示给用户。

三、简化的前后端分离流程

客户端请求 --> DispatcherServlet--> Handler Mapping --> Controller--> 执行业务逻辑 --> 返回 POJO 对象--> Spring 自动将 POJO 转换为 JSON--> 响应返回客户端

总结

在前后端分离的架构中,SpringMVC 的执行流程简化了很多,关键的变化是:

  • 不再需要 ModelAndView:Controller 直接返回对象,Spring 自动将其转换为 JSON 格式。
  • 无视图解析:因为不再涉及 JSP 或其他视图技术,Spring 不需要渲染视图。
  • 数据返回:主要关注数据的处理和返回,响应体中通常是 JSON 数据。

相关文章:

  • FreeRTOS入门与工程实践-基于STM32F103(二)(互斥量,事件组,任务通知,软件定时器,中断管理,资源管理,调试与优化)
  • 第二十一讲 XGBoost 回归建模 + SHAP 可解释性分析(利用R语言内置数据集)
  • 系统环境变量有什么实际作用,为什么要配置它
  • 深入剖析 C/S 与 B/S 架构及网络通信基础
  • Android Jni(二)加载调用第三方 so 库
  • portainer.io篇
  • 【Qt】信号和槽
  • Zookeeper三台服务器三节点集群部署(docker-compose方式)
  • Zookeeper单机三节点集群部署(docker-compose方式)
  • Java EE(8)——线程安全总结(翻新版)——定时器(Timer)线程池(ThreadPoolExecutor)
  • LeetCode算法题(Go语言实现)_48
  • 智能做题:拍照解题API使用指南
  • AI对百度搜索与抖音社区的影响差异?
  • 【Python语言基础】20、模块与包
  • 用 Vue 3 + OpenAI API 实现一个智能对话助手(支持上下文、多角色)
  • fastjson2 使用bug
  • 每日算法-链表(2.两数相加、24.两两交换链表中的节点、143.重排链表)
  • 怎么通过OPPO手机进行图片编辑?图片编辑攻略,打造专业级照片
  • vscode格式化为什么失效?自动保存和格式化(Prettier - Code formatter,vue-format)
  • MySQL入门:数据表的创建
  • 上海市市管干部任职前公示:赵亮拟为地区区长人选
  • 孟泽:我们简化了历史,因此也简化了人性
  • 持续更新丨伊朗官员:港口爆炸已致5人死亡超700人受伤
  • 当代视角全新演绎,《风雪夜归人》重归首都剧场
  • 美联储官员:货币政策不会立即改变,金融市场波动或致美国经济增长承压
  • 双拥主题歌曲MV:爱我人民,爱我军