0%

SpringBoot—Web·请求映射原理

Controller中每个请求都是通过请求映射实现的,这里简单记录请求映射的基本原理。

PART1

找到 doGet() 查看继承树,我们得到了如下的内容
01.png

PART2

可知SpringMVC功能分析都从 org.springframework.web.servlet.DispatcherServlet –> doDispatch() 方法开始的

查看 doDispatch() 方法

1
2
3
4
5
6
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
......略


// 找到当前请求使用哪个Handler(Controller的方法)处理
mappedHandler = getHandler(processedRequest);

这里的HandlerMapping:处理器映射。/xxx->>xxxx

PART3

我们用debug跟进发现共有5个HandlerMapping
02.png
其中,RequestMappingHandlerMapping:保存了所有@RequestMapping 和handler的映射规则。这就是我们在Controlller 里面写的 @RequestMapping 注解。
WelcomePageHandlerMapping:完成了欢迎页的映射

程序会遍历所有编写的请求,然后将所有的请求映射都在HandlerMapping中。

处理请求的流程:

  • SpringBoot自动配置欢迎页的 WelcomePageHandlerMapping 。访问 /能访问到index.html;
  • SpringBoot自动配置了默认 的 RequestMappingHandlerMapping
  • 请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。
    • 如果有就找到这个请求对应的handler
    • 如果没有就是下一个 HandlerMapping

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