DispatcherServlet处理过程及源码分析

DispatcherServlet处理过程及源码分析

第一步

寻找WebApplicationContext并将其作为一个属性绑定到请求上,这样Controller和其他元素在处理过程中就可以使用它。默认它是绑定在DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE这个键上。

在这里插入图片描述

DispatcherServlet这个类里最重要的两个方法是doService()方法和doDispatch()。doService()方法在执行过程中调用了doDispatch()方法。
在这里插入图片描述

第二步

局部解析器也被绑定到请求上。如果你不需要局部解析,你也就不需要局部解析器。

在这里插入图片描述

第三步

将主题解析器绑定到请求上。如果不使用主题,也可以忽略。

在这里插入图片描述

第四步

如果配置了多部分文件解析器,那么请求就会被检查是否包含多部分。

在这里插入图片描述

这一步是由doDispatch()方法进行实现的。

在这里插入图片描述

如果找到多部分,则将该请求包装在MultipartHttpServletRequest中,以供流程中的其他元素进一步处理。这一部分体现在checkMultipart()方法内。

在这里插入图片描述

第五步

搜索适当的处理器(handler)。如果找到处理程序,则执行与处理程序(预处理器,后处理器和控制器)关联的执行链,以准备模型或进行渲染。另外,对于带注释的控制器,可以返回响应(在HandlerAdapter中),而不是返回视图。

在这里插入图片描述

上图代码:尝试获取Handler,如果获取失败(为null),抛出一个noHandlerFound异常

在这里插入图片描述
上图代码:执行链

第六步

如果返回模型,则呈现视图。如果没有返回任何模型(可能是由于预处理器或后处理器拦截了该请求,也可能出于安全原因),则不会呈现任何视图,因为该请求可能已经被满足。

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值