(面试题)SpringMVC的工作流程

110 阅读2分钟

1.png

先说SpringMVC的作用,免得被面试官看出来说的生硬,不要有背的感觉。

概念:SpringMVC,相当于是Spring提供的一个Web框架,提供了一个总的前端控制器DispatcherServlet,实现url到handler的映射,并且能够将handler的处理结果通过视图解析器展现给前端。

源码位置:因为DispatcherServlet本质是一个Servlet,所以核心处理方法肯定在doService、doGet、doPost方法中,然后我找到的核心方法是doService中的doDispatcher方法,然后我要说的其实就是这个方法

流程

(1)用户发送请求到前端控制器DispatcherServlet

(2)DispatcherServlet收到请求request对象后,会去查找HandlerMapping处理器映射器

(3)HandlerMappering找到具体处理器后就会返回一个处理器执行链,也就是一个HandlerExecutionChain对象。如果点开这个源码看这个对象,内部其实就是有一个Handler以及拦截器的集合。

(4)DispatherServlet获取该handler对应的HandlerAdapter,这里需要问为什么不直接执行handler里面的方法,这其实是一种适配器模式,因为handler有好几种,就比如我们用Controller实现handler,用注解实现handler,这好几种handler内部逻辑和执行方法是不同的,所以采用了一种适配器模式来执行handler

举例说明<适配器模式>:
    比如你有三个手机,一个华为、一个苹果、一个安卓
       你肯定不能直接对着220V电源就开始充电,这是不可能的
       需要找到对应的充电器,拿着手机找到充电器后给手机充电,这就是适配器模式

(5)通过HandlerAdapter执行Handler里面的方法

(6)Handler执行方法后返回一个ModelAndView对象给HandlerAdapter

(7)HandlerAdapter再将ModelAndView返回给DispacherServlet

(8)DispacherServlet再去调用视图解析器,解析视图名称

(9)视图解析器返回一个视图对象View

(10)光渲染View不够,还需要再把Model也就是数据渲染上去

(11)最后DidpatcherServlet响应用户请求