SpringMVC(关于HandlerMapping执行流程原理分析)

请求过来先碰见中央调度器(前端调度器)



//Determine handler for the current request; 对当前请求决定交给哪个handler, 当前请求地址过来

处理器执行链处理请求,接着我们去找getHandler的实现
hm是HandlerMapping对象,下图选定位置调用HandlerMapping的getHandler()方法通过请求找到Handler,但是返回值为HandlerExecutionChain(执行链)


这个servlet所支持的处理器映射器的集合,这里有N个处理器映射器。hm就是指HandlerMapping ,下面的if中的代码是指记录日志,日志跟踪。HandlerMapping处理器映射器中有N个拦截器,处理客服端请求的处理器只有一个,就是handler处理器。
getHandler我们跟进去,

看过来的handler是不是执行链,要是就把handler强转成执行链,如果不是我new出一个执行链并且把handler给执行链。

HandlerInterceptor是处理器的拦截器。而且不是一个是多个拦截器(this.adaptedInterceptors),然后做了一个操作。如果当期拦截器,是映射用的拦截器,就把他给强转成处理器映射器。
然后做了一个匹配,和查找的路径做匹配。然后加到了执行链拦截器中。那么如果不是就直接用一个的参数来添加。所有可以看出HandlerExecutionChain中只包含一个handler。包含N个拦截器。在把这个对象返回给了中央调度器。
HandlerMapping总结:
DispatcherServlet
--->doDispatcher()
---->getHandler(request):
---->HandlerExecutionChain
------> hm.getHandler(request)-----》方法体中
----->ExecutionChain executionChain = getHandlerExecutionChain(handler, request);
----->new HandlerExecutionChain(handler)
----->chain.addInterceptor(interceptor);
HandlerMapping:处理器映射器
作用:根据【请求】找到【处理器Handler】,但并不是简单的返回处理器,而是
将处理器和拦截器封装,形成一个处理器执行链(HandlerExecuteChain)。
4.DispatcherServlet 拿着执行链去寻找对应的处理器适配器(HandlerAdapter)
为什么要引入适配器?
因为处理器(Handler)有很多种,DispatcherServlet没办法统一管理,所以出现了适配器。
让适配器统一处理Handler,而DispatcherServlet统一处理适配器。
根据请求去找对应的handler
SpringMVC(关于HandlerMapping执行流程原理分析)的更多相关文章
- springmvc与struts2执行流程比较
之前写过一篇struts2的执行流程的文章了,这里对struts2的流程就不做过多的分析,这篇文章主要分析spring-mvc的执行流程以 及struts2与spring-mvc的差别. 1.stru ...
- SpringMVC启动和执行流程
Spring框架大家用得很多,相当熟悉,但是我对里面的运作比较好奇,例如bean的加载和使用,和我们定义的配置文件有什么联系;又例如aop在什么时候起作用,原理又是怎样.经过一个了解后,整理了启动和执 ...
- SpringMVC学习笔记:SpringMVC框架的执行流程
一.MVC设计模式 二.SpringMVC框架介绍 三.SpringMVC环境搭建 四.SpringMVC框架的请求处理流程及体系结构
- SpringMVC拦截器执行流程
1:MyInterceptor1.MyInterceptor2这2个拦截器都放行 MyInterceptor1......preHandleMyInterceptor2......preHandle ...
- SpringMVC架构&组件&执行流程
SpringMVC架构: 组件: DIspatcherServlet:前端控制器.相当于mvc模式的c,是整个流程控制的中心,负责调用其他组件处理用户的请求,降低了组件之间的耦合性. HandlerM ...
- koa执行过程原理分析
本文原创,转载请注明出处https://i.cnblogs.com/EditPosts.aspx?postid=5710639 我们大家都知道,当koa接到请求经过中间件时,当执行到 yield ne ...
- 关于 [栈溢出后jmp esp执行shellcode] 原理分析
原文地址:https://blog.csdn.net/lixiangminghate/article/details/53333710 正常情况下,函数栈分布图如下: 即,返回地址被改为一段缓存区的地 ...
- springmvc对请求执行流程
doService-->getHandlerMapping-->handlerMapping-->getHandler-->HandlerExecutionChain--> ...
- SpringMVC之HandlerAdapter执行流程
01.protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Except ...
随机推荐
- Asp.Net WebApi核心对象解析(下篇)
在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...
- servlet文件下载
创建web工程servlet,新建DownloadServlet.java package com.xmyself.servlet; import java.io.File; import java. ...
- CYQ.Data、ASP.NET Aries 百家企业使用名单
如果您或您所在的公司正在使用此框架,请联系左侧的扣扣,告知我信息,我将为您添加链接: 以下内容为已反馈的用户,(收集始于:2016-08-08),仅展示99家: 序号 企业名称 企业网址 备注 1 山 ...
- 【Win 10 应用开发】应用预启动
所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...
- 23种设计模式--建造者模式-Builder Pattern
一.建造模式的介绍 建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建 ...
- 神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观
前言 哦,不搞SQL了么,当然会继续,周末会继续更新,估计写完还得几十篇,但是我会坚持把SQL更新完毕,绝不会烂尾,后续很长一段时间没更新的话,不要想我,那说明我是学习新的技能去了,那就是学习英语,本 ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
- [修正] Firemonkey TFrame 存档后,下次载入某些事件连结会消失(但源码还在)
问题:Firemonkey TFrame 存档后,下次载入某些事件连结会消失(但源码还在) 解决:(暂时方法) type TTestFrame = class(TFrame) public const ...
- EC笔记:第4部分:20、传递引用代替传值
考虑以下场景: #include <iostream> #include <string> using namespace std; struct Person { strin ...
- mysql 写入优化
1 主从分离 从表读取,主表可以去掉索引 2 先写入到文件或redis,定时刷新到库 3 用nginx 4 分库 分表 每个库表的数据总量少了 插入会快一点 5 最大限度减少查库的次数 6 一条sql ...