DispatcherServlet 请求处理流程

news/2025/1/4 11:52:10/文章来源:https://www.cnblogs.com/cyrushuang/p/18648635

继承关系

DispatcherServlet > FrameworkServlet > HttpServletBean > HttpServlet > GenericServlet > Servlet

Servlet 容器每次接收到请求时都会调用 service() 方法,子类 HttpServlet 复写了 service() 方法,内部会根据请求的类型(GET、POST 等)调用相应的 doGet()doPost() 等方法...

根据调用链分析,最终会交由 DispatcherServlet.doDispatch() 来处理

前后不分离请求处理流程

  1. 客户端请求:浏览器向服务器发起请求。
  2. DispatcherServlet 接收请求DispatcherServlet 作为前端控制器(Front Controller)接收请求。
  3. HandlerMappingDispatcherServlet 会通过 HandlerMapping 找到合适的处理器,其实返回的是一个处理器执行链(拦截器)。
  4. 找到能执行当前处理器的 HandlerAdapter
  5. HandlerAdapter:通过 HandlerAdapter 调用具体的 Controller 方法进行处理。
  6. 处理请求:Controller 处理请求并返回模型数据和视图信息。
  7. ViewResolverDispatcherServlet 根据 Controller 返回的视图名称,通过 ViewResolver 查找并渲染视图。
  8. 响应客户端:渲染后的视图返回给客户端。
sequenceDiagramparticipant Clientparticipant DispatcherServletparticipant HandlerMappingparticipant Handlerparticipant HandlerAdapterparticipant ViewResolverparticipant ViewClient->>DispatcherServlet: 发起请求DispatcherServlet->>HandlerMapping: 查找处理器HandlerMapping->>DispatcherServlet: 返回 url 对应的处理器(HandlerChain)DispatcherServlet->>HandlerAdapter: 找到能执行该处理器的 HandlerAdapterHandlerAdapter->>Controller: HandlerAdapter 执行 Handler(controller 中的方法)Controller->>DispatcherServlet: 返回 ModelAndViewDispatcherServlet->>ViewResolver: 解析视图ViewResolver->>DispatcherServlet: 返回视图DispatcherServlet->>Client: 返回视图给客户端

前后分离请求处理流程

  1. 客户端请求:浏览器或客户端发起请求。
  2. DispatcherServlet 接收请求DispatcherServlet 作为前端控制器接收请求。
  3. HandlerMappingDispatcherServlet 会通过 HandlerMapping 找到合适的处理器,其实返回的是一个处理器执行链(拦截器)。
  4. 找到能执行当前处理器的 HandlerAdapter
  5. HandlerAdapter:通过 HandlerAdapter 调用具体的 Controller 方法进行处理。
  6. 处理请求并返回数据:Controller 处理请求并返回数据(通常是一个 POJO 或 Map)。
  7. MessageConverterDispatcherServlet 使用 HttpMessageConverter 将返回的对象转换为 JSON 格式。
  8. 响应客户端:返回的 JSON 数据通过 HTTP 响应返回给客户端。
sequenceDiagramparticipant Clientparticipant DispatcherServletparticipant HandlerMappingparticipant Handlerparticipant HandlerAdapterparticipant HttpMessageConverterClient->>DispatcherServlet: 发起请求DispatcherServlet->>HandlerMapping: 查找处理器HandlerMapping->>DispatcherServlet: 返回 url 对应的处理器(HandlerChain)DispatcherServlet->>HandlerAdapter: 找到能执行该处理器的 HandlerAdapterHandlerAdapter->>Controller: HandlerAdapter 执行 Handler(controller 中的方法)Controller->>DispatcherServlet: 返回数据(如 POJO) DispatcherServlet->>HttpMessageConverter: HttpMessageConverter 转换数据为 JSONHttpMessageConverter->>DispatcherServlet: 返回 JSON 数据DispatcherServlet->>Client: 返回 JSON 数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863048.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

显卡危机的解决方案,全面解析ToDesk云电脑:服务配置与应用场景探索

ToDesk云电脑是一款集成了高性能计算资源的云端服务,旨在为用户提供便捷、高效、安全的计算体验。无论是游戏玩家、设计师还是企业用户,都能通过ToDesk云电脑享受到强大的计算能力和灵活的资源配置。ToDesk云电脑以其强大的性能、灵活的服务和优质的用户体验,正在迅速赢得市…

【有源码】周边旅游平台系统+SpringBoot+VUE+前后端分离

学弟,学妹好,我是爱学习的学姐,今天带来一款优秀的项目:流浪宠物管理系统。 本文介绍了系统功能与部署安装步骤,如果您有任何问题,也请联系学姐,偶现在是经验丰富的程序员! 一. 系统演示 管理后台-截图前端-截图 视频演示 https://githubs.xyz/show/327.mp4二. 系统概述…

01java反序列化基础

java反射的相关操作 一些重要的方法获取类的⽅法: forName实例化类对象的⽅法: newInstance获取函数的⽅法: getMethod执⾏函数的⽅法: invoke// eg.反射获取任意类的任意方法并执行 import java.lang.reflect.Method;public class ReflectionExample {public static void …

单元化架构最佳实践指南!

0 前言单元化架构通过减少故障影响范围来增强系统的弹性。 单元化架构是对于那些无法接受停机或可能对最终用户产生负面影响的系统的良好选择。 单元化架构可能很复杂,有一些最佳实践可以遵循,以提高成功的机会。 在推出单元化架构或将现有的云原生/微服务架构改造/转变为单元…

苹果鼠标有望加入 AI 语音控制功能;Accent Oracl :准确识别你口音的 AI 丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

计算机网络复习应用层(第六章)

应用层 应用层的共同特点:C/S或者P2P、推/拉、面向文本/面向二进制域名系统(DNS) 名字到IP地址的解析互联网的域名空间 互联网采用了层次树状结构的命名方式采用:.四级域名.三级域名.二级域名.顶级域名 其中本地域名服务器向根域名服务器发出DNS请求,根域名服务器进行查找…

【有源码】流浪宠物管理系统+SpringBoot+VUE+前后端分离

学弟,学妹好,我是爱学习的学姐,今天带来一款优秀的项目:流浪宠物管理系统。 本文介绍了系统功能与部署安装步骤,如果您有任何问题,也请联系学姐,偶现在是经验丰富的程序员! 一. 系统演示 管理后台-截图前端-截图视频演示 https://githubs.xyz/show/326.mp4二. 系统概述…

.Net Core 管道底层源码实现

在 .NET Core 中,请求处理管道是一个中间件(Middleware)链,用于处理 HTTP 请求并生成响应。管道的底层实现基于 Microsoft.AspNetCore.Http 命名空间中的一些核心类和接口1. 核心组件 1.1 HttpContext• HttpContext 是 HTTP 请求和响应的核心抽象,封装了请求信息(如请求…

JavaScript代码安全性提升:选择和使用JS混淆工具的指南

https://toolin.cn/jsfuckhttps://maimai.cn/article/detail?fid=1827257627&efid=382Pa05uQ_i7jAl6rmq5tg在Web开发中,JavaScript是一种常用的脚本语言,然而,由于其代码容易被他人轻易获取和修改,为了保护JavaScript代码的安全性和版权,我们需要使用JS混淆工具。本文…

AI 驱动研发模式升级,蓝凌软件探索效率提升之道

蓝凌软件在引入通义灵码后取得了较明显的效果。目前,蓝凌软件已使用灵码的开发人员中,周活跃用户占比超过90%、根据代码库自动生成的代码占比超33%、代码智能补全占比29%,代码注释率提升了15%,有效提升了产品代码工程化的效能。深圳市蓝凌软件股份有限公司(以下简称蓝凌软…

“越用越上瘾”,中华财险 60% 研发人员用通义灵码提效

保险业被看成是社会“稳定器”和经济“助推器”,近年来已驶入数字化发展快车道。在 AI、大模型当道的今天,保险行业的研发流程、产品设计、场景拓展等业务链条各环节,都值得用大模型进行重塑。保险业被看成是社会“稳定器”和经济“助推器”,近年来已驶入数字化发展快车道。…