SpringMVC-详解一个http请求是如何被成功处理的

本文基于spring 5.5.2.release

项目中一直在使用SpringMVC,自信对它很了解,但是前几天测试环境出了一个问题,才发现对它的了解远远不够。于是我计划开一个springmvc的专栏,详细介绍请求处理逻辑,以及它的各个组件功能。今天是第一篇关于springmvc的文章,先从整体上看一下springmvc的逻辑。
下图是springmvc的一个经典图,图中最重要的是DispatcherServlet,它是整个处理过程的核心,它将各个组件串在一起,完成一次http请求。
在这里插入图片描述
DispatcherServlet实现了Servlet接口,因此它可以接受http请求,springmvc将所有的请求都发送给DispatcherServlet,下面看一下它对请求的处理过程:

  1. 遍历HandlerMapping找到对应的Controller,HandlerMapping的作用是根据请求参数找到对应的Handler,每个Handler对象包含了一个Controller,springmvc提供了多种HandlerMapping,每种HandlerMapping都可以根据某个请求参数查找对应的Handler;
  2. 找到Controller后,调用Controller处理请求获得返回结果,不过springmvc不是直接调用Controller,而是通过适配器(HandlerAdapter),适配器在调用前,会处理Controller方法入参,包括类型转换,参数校验等,Controller返回结果后,适配器根据配置对返回结果做不同的处理,比如可以将返回值直接返回客户端,请求结束;还可以将返回结果组装成ModelAndView对象,以进行后续处理;
  3. 如果上一步创建了ModelAndView对象,那么接下来遍历ViewResolver,以找到合适的View对象,每个View对象可以理解为一个Html页面,或者一个返回给客户端的json串,总之一个View对象代表最终呈现给客户端的内容;
  4. 找到了View对象后,需要对View对象进行渲染,我觉得这个渲染用的比较高端,对View对象的处理显得很奇妙,其实简单的说就是处理页面中的一些参数,将不确定的值转换为确定值,比如jsp页面中判断,显示值等;
  5. View渲染之后,就可以将View对象内容转换为字符串返回给客户端,请求处理结束。

上面这个流程是一个正常的请求处理过程,为了简单,里面忽略了很多细节,在后续文章中会介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值