Spring MVC请求流程
MVC框架
MVC设计模式简单地说,就是将数据显示、流程控制和业务逻辑处理分离,使之相互独立。
使用MVC框架就应该遵守MVC思想,MVC框架不赞成了浏览器直接访问Web应用的视图页面,用户的所有请求都只应向控制器发送,由控制器调用模型组件、视图组件向用户呈现数据。
Model II模式基于MVC架构的设计模式,利用JSP页面、Servlet和JavaBean组件分工协作共同完成系统功能的所有任务。其中JSP负责数据显示逻辑任务,Servlet负责程序流程控制逻辑任务,JavaBean负责处理业务逻辑任务。
SpringMVC框架
SpringMVC框架本质上相当于servlet,提供了一个DispatcherServlet作为前端控制器来分派请求,同时提供灵活的配置处理程序映射、视图解析、语言环境和主题解析并支持文件上传。
在SpringMVC框架中,Controller替代Servlet担负控制器的职能。Controller接收请求调用相应的Model进行处理,处理器完成业务处理后返回处理结果。Controller调用相应的View并对处理结果进行视图渲染,最终传送响应消息到客户端。
SpringMVC请求流程
(1)用户通过客户端向服务器发起一个request请求,此请求会被前端控制器(DispatcherServlet)所拦截。
(2)前端控制器请求处理器映射器(handlerMapping)去查找Handler,可以依据XML配置或注解去查找。
(3)处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成),并返回给前端控制器。
(4)前端处理器请求处理器适配器(HandlerAdapter)去执行相应的Handler(常称为Controller)。
(5)处理器适配器会调用并执行Handler处理器,这里的处理器指的是程序中编写的Controller类,也被称为后端控制器。在请求信息到达真正调用Handler的处理方法之前的这段时间内,Spring MVC还完成了很多工作。
(6)Controller执行完毕后会返回给处理器适配器一个ModelAndView对象(Spring MVC底层对象),该对象中会包含View视图信息或者包含Model数据模型和View视图信息。
(7)处理器适配器接收到Controller返回的ModelAndView后,将其返回给前端控制器。
(8)前端控制器接收到ModelAndView后,选择一个合适的视图解析器(ViewResolver)对视图进行解析。
(9)视图解析器解析后,会根据View视图信息匹配到相应的视图结果,反馈给前端控制器。
(10)前端控制器接受到View视图后,进行视图渲染,将模型数据(在ModelAndView对象中)填充到request域。
(11)前端控制器向用户相应结果。
以上就是SpringMVC的整个请求处理流程,其中用到的组件有前端控制器(dispatcherServlet)、处理器映射器 (HandlerMapping)、处理器适配器(HandlerAdapter)、Handler处理器(Controller)、视图解析器(ViewResolver)、视图(View)。
其中,DiapatcherServlet、 HandlerMapping、 HandlerAdapter 和ViewResolver对象的工作是在框架内部执行的,开发人员并不需要关心这些对象内部的实现过程,只需要配置DispatcherServlet,完成Handler处理器(Controller)中的业务处理,并在视图中展示相应信息即可。