SpringBoot中请求映射的原理
共 1823字,需浏览 4分钟
·
2021-01-11 22:39
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
本图是很久以前学习SpringMVC时的,本次学习拿出来对照收获颇多。
带着问题学习:我们写的接口,是如何被处理的。
在SpringBoot中,所有的请求都是会来到DispatcherServlet中,而这也就是SpringMVC中的东西。
从此图可以看出继承树,最终是来到HttpServlet的,也就是说必然会有doGetPost方法。而HttpServlet并没有,于是顺着关系找下去。
在FrameworkServlet中,我们发现了重写的方法:
而两个方法都是调用processRequest的,进入进去:
除了各种初始化过程,最终做的是调用doService方法。而FrameworkServlet中doService是抽象的,来到DispatcherServlet中找到此方法:
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpServletRequest processedRequest = request;
HandlerExecutionChain mappedHandler = null;
boolean multipartRequestParsed = false;
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
try {
ModelAndView mv = null;
Exception dispatchException = null;
try {
processedRequest = checkMultipart(request);
multipartRequestParsed = (processedRequest != request);
// 找到当前请求使用哪个Handler(Controller的方法)处理
mappedHandler = getHandler(processedRequest);
//HandlerMapping:处理器映射。/xxx->>xxxx
略过一些与本次学习无关的,直接看倒数两行,将会通过getHandler方法,找到合适的Handler(Controller的方法)处理(流程2、3):
而handlerMapping中会有五个值:
RequestMappingHandlerMapping:保存了所有@RequestMapping 和handler的映射规则:
顺便讲了欢迎页的原理:
• 请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。
• 如果有就找到这个请求对应的handler
• 如果没有就是下一个 HandlerMapping
如果你啥也没传,也就是"/",那么在RequestMappingHandlerMapping中将不会找到合适的,然后他就会循环到下一个控制器:WelcomePageHandlerMapping:
而这个控制器就是专门处理"/"的,于是根据处理,转发到index.html中。
(SpringBoot自动配置欢迎页的 WelcomePageHandlerMapping 。访问 /能访问到index.html;)
而不管是哪个控制器,找到后都会对应的操作逻辑,也就是流程5后面的事情了。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42313246/article/details/112311353
粉丝福利:Java从入门到入土学习路线图
👇👇👇
👆长按上方微信二维码 2 秒
感谢点赞支持下哈