你知道 SpringMVC的 执行流程 吗?

简介: 你知道 SpringMVC的 执行流程 吗?

SpringMVC的执行流程要分两阶段讲

  • 视图阶段(老旧JSP等)
  • 前后端分离阶段(接口开发,异步)

视图阶段


 假设我们现在有一个请求 http://localhost:8080/user/getById/1 ,请求从浏览器发出,在后台就会有一个 前端控制器DispatcherServlet 来接收请求,它是调度中心,所有的请求都要经过这个DispatcherServlet,它是由Tomcat容器进行初始化的,当这个类被加载的时候,在内部就会加载出其他组件 处理器映射器HandlerMapping、处理器适配器HandlerAdaptor、视图解析器ViewResolver


       DispatcherServlet 会到 处理器映射器中查询handler,处理器映射器内存储的就是路径与handler的对应关系,handler 简单讲就是某个Controller的某个方法,第3步中返回的并不是单纯的handler,而是处理器执行链,因为要考虑到拦截器的存在


        为什么有 处理器Handler 后还要一个 处理器适配器HandlerAdaptor,处理器适配器的作用是处理各式各样的参数和返回值,从而让处理器能够运行,之后返回ModelAndView给前端控制器


       视图解析器将逻辑视图ModelAndView解析为真正的视图,返回 View对象 给前端控制器


整体过程:


用户发送出请求到前端控制器DispatcherServlet

DispatcherServlet收到请求调用HandlerMapping(处理器映射器)

HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet

DispatcherServlet调用HandlerAdapter(处理器适配器)

HandlerAdapter经过适配调用具体的处理器(Handler/Controller)

Controller执行完成返回ModelAndView对象

HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet

DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)

ViewReslover解析后返回具体View(视图)

DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)

DispatcherServlet响应用户      

现如今的开发都是 接口开发,不返回视图,而是json,那么SpringMVC的执行流程又是怎样的?

前后端分离阶段(接口开发,异步请求)

具体细节不再说明

整体的过程如下:

用户发送出请求到前端控制器DispatcherServlet

DispatcherServlet收到请求调用HandlerMapping(处理器映射器)

HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。

DispatcherServlet调用HandlerAdapter(处理器适配器)

HandlerAdapter经过适配调用具体的处理器(Handler/Controller)

方法上添加了@ResponseBody

通过HttpMessageConverter来返回结果转换为JSON并响应

目录
相关文章
|
Oracle Java 关系型数据库
Oracle jdk 的国内下载镜像
Oracle jdk 的国内下载镜像
52475 0
|
11月前
|
网络协议 算法 网络性能优化
|
SQL XML JavaScript
【若依Java】15分钟玩转若依二次开发,新手小白半小时实现前后端分离项目,springboot+vue3+Element Plus+vite实现Java项目和管理后台网站功能
摘要: 本文档详细介绍了如何使用若依框架快速搭建一个基于SpringBoot和Vue3的前后端分离的Java管理后台。教程涵盖了技术点、准备工作、启动项目、自动生成代码、数据库配置、菜单管理、代码下载和导入、自定义主题样式、代码生成、启动Vue3项目、修改代码、以及对代码进行自定义和扩展,例如单表和主子表的代码生成、树形表的实现、商品列表和分类列表的改造等。整个过程详细地指导了如何从下载项目到配置数据库,再到生成Java和Vue3代码,最后实现前后端的运行和功能定制。此外,还提供了关于软件安装、环境变量配置和代码自动生成的注意事项。
23190 68
|
12月前
|
存储 Java
HashMap之链表转红黑树(树化 )-treefyBin方法源码解读(所有涉及到的方法均有详细解读,欢迎指正)
本文详细解析了Java HashMap中链表转红黑树的机制,包括树化条件(链表长度达8且数组长度≥64)及转换流程,确保高效处理大量数据。
499 1
|
12月前
|
关系型数据库 MySQL 网络安全
宝塔面板忘记账号和密码的解决办法
宝塔面板忘记账号和密码的解决办法
|
12月前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
399 0
|
监控 Dubbo Java
超详细的Sentinel入门
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
超详细的Sentinel入门
|
XML Java 数据格式
Spring,SpringMVC,Spring Boot中常见注解(持续更新)
Spring,SpringMVC,Spring Boot中常见注解(持续更新)
264 0
|
关系型数据库 MySQL 数据库
Docker下安装MySQL
Docker下安装MySQL
477 0
|
Java 程序员
在Springboot HandlerInterceptor中获取GET和POST请求参数
上面RequestWrapper的代码我查阅资料的时候在多篇博文中看到了,但是单有RequestWrapper还不足以完成整个请求,而且我看很多网络上的博客都是只在Interceptor中Wapper,但实际这样是不对的,而且也完全不需要,因为必须要替换掉整个请求链路中的Request才行。这里我们只需要在Filter中将普通的Request替换成我们自己的RequestWrapper
875 0