栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot请求映射原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot请求映射原理

SpringMvc中DispatchServlet是处理所有请求的开始,

 frameworkServlet重写了doGet方法,最终会调用到 frameworkServlet的doGet

 进入processRequest方法内,前面是初始化过程,核心是doService(request,reponse)

 由于doService点进去是抽象方法,自然进入子类DispatcherServlet,最终在DispatcherServlet实现了doService

其中核心的方法时doDispatch(request,response) ,最终每个请求进来都会调用这个方法

即SpringMVC功能分析都从 org.springframework.web.servlet.DispatcherServlet-》doDispatch

 核心在于

mappedHandler = getHandler(processedRequest);

我们需要知道它到底是怎么找到当前/user请求会调用哪个方法

 

HandlerMapping:处理器映射

进入方法,发现有 5个处理器映射,

RequestMappingHandlerMapping:保存了所有@RequestMapping 和handler的映射规则

 打开后发现里面有我们在controller写的各种请求,在这里面寻找

 进入getHandler方法,

进入getHandlerInternal

 

 

 

 先拿到我们原生请求的路径,然后还拿到一把锁,害怕并发查询,mappingRegistry上面已经说了,

进入lookupHandlerMethod,第一个参数是我们的请求路径,第二个是原生request

 从mappingRegistry寻找谁能处理,先是根据请求路径找,最终找到4个,

将找到的添加到我们的请求集合里面

在里面找到最佳匹配的路径 

 为空的情况

 不为空时获取第一个,如果数量大于1,经过一系列操作,最终报错

Ambiguous handler methods mapped for '" + uri + "': {" + m1 + ", " + m2 + "}"

也就是SpringMvc要求我们同样的请求路径,请求方式只能有一个

---------------------------------------------------------------------------------------------------------------------------

欢迎页的访问

 

请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。

如果有就找到这个请求对应的handler,如果没有就是下一个 HandlerMapping

 

 

SpringBoot自动配置欢迎页的 WelcomePageHandlerMapping 。访问 /能访问到index.html;

SpringBoot自动配置了默认 的 RequestMappingHandlerMapping

还有后面三个

------------------------------------------------------------------------------------------------------------------------

我们需要一些自定义的映射处理,我们也可以自己给容器中放HandlerMapping。自定义 HandlerMapping

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/606651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号