springmvc源码解析(4)--handle处理请求并返回结果视图

方法入口

处理请求之前先获取handler并作为参数传入,此处不需要拦截器,所有没有传入HandlerExecutionChain

在这里插入图片描述

调用 AbstractHandlerMethodAdapter中的handle方法

在这里插入图片描述

  1. 判断当前是否需要支持在同一个session中只能线性地处理请求
  2. 如果当前不需要对session进行同步处理,则直接对HandlerMethod进行适配
  3. synchronizeOnSession默认false,所以走第二个分支

在这里插入图片描述

下面是执行的核心方法

  1. 首先封装了一个webRequest,这个用于argumentResolver解析参数时使用
  2. 初始化WebDataBinderFactory,WebDataBinder主要用来参数绑定
  3. 初始化 ModelFactory,用来处理model,解析@sessionAttribute @modelAttribute 的值并放到model中
  4. 初始化 ServletInvocableHandlerMethod,核心类,参数绑定,和请求处理都是他来完成,首先把handlerMethod 封装为 ServletInvocableHandlerMethod,然后再设置参数解析器、返回值解析器
  5. 对请求参数进行处理,调用目标HandlerMethod,并且将返回值封装为一个ModelAndView对象
  6. 对封装的ModelAndView进行处理,主要是判断当前请求是否进行了重定向,如果进行了重定向,还会判断是否需要将FlashAttributes封装到新的请求中

在这里插入图片描述

对目标handler的参数进行处理,并且调用目标handler

在这里插入图片描述

下面主要是对request中的参数进行处理,然后进行反射调用

在这里插入图片描述
在这里插入图片描述

这个方法主要有以下三个功能

  1. 调用modelFactory更新model。
  2. 根据mavcontainer 创建modelandview。
  3. 如果mavcontainer是redirectAttribute类型的就将值设置到 falshmap中

在这里插入图片描述

总结

总的来说主要流程的就是绑定参数,执行请求,处理返回值。
参数绑定主要有如下几种类型

  1. request中参数, request中处理
  2. cookie中的参数,request中处理
  3. session中参数, request中处理
  4. falshMap中的参数, RequestMappingHandlerAdapter处理
  5. @sessionAttribute中的参数, ModelFactory中处理
  6. @modelAttributes中的参数, ModelFactory中处理
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值