SpringMVC的执行流程图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ceec0875b6af009f34df1d00a6e45c0.png)
组件说明
DispatcherServlet:
整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。
HandlerMapping:
根据请求的url查找Handler。HandlerMapping负责根据用户请求找到Handler即处理器(Controller),SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
ViewResolver:
进行视图解析,根据逻辑视图名解析成真正的视图,ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
Model:
返回的数据对象。
View:
实现类支持不同的View类型(jsp、freemarker、pdf...)。
SpringMVC工作流程
1、用户发送http请求到web服务器,web服务器解析http请求,匹配到DispatcherServlet的请求映射路径(在web.xml文件中配置),web容器将请求转交给DispatcherServlet。
2、中央调度器DispatcherServlet接收到请求后,会根据http请求以及HandlerMapping中的配置找到处理请求的处理器Handler。
3、HandlerMapping 找到对应的 Handler 之后,并不是返回一个 Handler 原始对象,而是一个 Handler 执行链(HandlerExecutionChain),在这个执行链中包括了拦截器和处理请求的 Handler。HandlerMapping 返回一个执行链给 DispatcherServlet。
4、DispatcherServlet 接收到执行链之后,会调用 Handler 适配器去执行 Handler。
5、HandlerAdapter执行完成 Handler之后会得到一个 ModelAndView,并返回DispatcherServlet。
6、DispatcherServlet 接收到 HandlerAdapter 返回的 ModelAndView 之后,会根据其中的视图名调用 ViewResolver。
7、ViewResolver 根据逻辑视图名解析成一个真正的 View 视图,并返回给 DispatcherServlet。
8、DispatcherServlet 接收到视图之后,会根据上面的 ModelAndView 中的 model 来进行视图中数据的填充,也就是所谓的视图渲染。
9、渲染完成之后,DispatcherServlet 就可以将结果返回给用户了。