SpringMvc原理分析

springmvc的工作原理图:
SpringMvc原理分析
SpringMVC流程
1、 用户发送请求至前端控制器DispatcherServlet(其实在前端控制器收到请求时会创建springmvc容器,如果存在spring容器,则将spring容器向下转型得到springmvc容器,如果不存在则创建springmvc的ioc容器,所以spring和springmvc是父子容器的关系)。

2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。HandlerMapping其实只有一个HandlerExecutionChain getHandler(HttpServletRequest request);方法。作用是根据当前请求的找到对应的 Handler(HandlerMethod(Controller 中的方法)、 Controller 对象),并将 Handler 与一堆 HandlerInterceptor (拦截器)封装到
HandlerExecutionChain 对象中。

4、 DispatcherServlet调用HandlerAdapter处理器适配器(利用 RequestMappingHandlerMapping 获取的 Handler 是 HadnlerMethod 类型,它代表 Controller 里要执行的方法,将handler传递给HandlerAdapter。)。

5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器),HandlerAdapter其实是将当前的Handler进行匹配,判断是哪一种类型(基于注解实现d的requestMappingHandlerAdapter,基于配置文件实现的simpleControllerHandlerAdapter(其本质也是执行 Controller 中的 handleRequest 方法),HttpRequestHandlerAdapter(其实就是 Controller 中的 handleRequest 方法),还有用于适配Servlet的SimpleServletHandlerAdapter (其最终执行的方法是 Servlet 的 service 方法))。

6、 Controller执行完成返回ModelAndView。

7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器(将逻辑试图转换成物理视图的过程)。

9、 ViewReslover解析后返回具体View。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中,模型数据是保存在request对象中的)。

11、 DispatcherServlet响应用户。

其实这里的Handler可以说就是我们编写的controller。