SpringBoot中请求映射的原理

java1234

共 1823字,需浏览 4分钟

 ·

2021-01-11 22:39

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

76套java从入门到精通实战课程分享

本图是很久以前学习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 秒


感谢点赞支持下哈 

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报