1.用户发送请求至前端控制器DispatcherServlet.
2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器根据不同的请求找到具体的处理器(可以根据xml配置、注解进行查找),生成HandlerExecutionChain(处理器对象及处理器拦截器handlerinterceptor(如果有则生成))一并返回给 DispatcherServlet。
4、 DispatcherServlet 根据获得的 Handler,选择一个合适的HandlerAdapter。
5、 HandlerAdapter经过适配调用具体的处理器(controller,也叫后端控制器)执行具体的业务方法(在handler业务方法执行之前,会做一定的业务逻辑处理:表单校验等)。
6、 Controller执行完成返回ModelAndView处理器适配器(处理完的结果数据:包括逻辑试图和业务模型)。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后(将逻辑视图解析为物理视图)返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户
适配器作用:
SpringMVC涉及的映射器,视图解析器的作用不难理解,映射器负责将前端请求的url映射到配置的处理器,视图解析器将最终的结果进行解析,但中间为什么要经过一层适配器呢,为什么不经映射器找到controller后直接执行返回呢?
那是因为SpringMVC为业务处理器提供了多种接口实现(例如实现了Controller接口),而适配器就是用来根据处理器实现了什么接口,最终选择与已经注册好的不同类型的Handler Adapter进行匹配,并最终执行,例如,SimpleControllerHandlerAdapter是支持实现了controller接口的控制器,如果自己写的控制器实现了controller接口,那么SimpleControllerHandlerAdapter就会去执行自己写的控制器中的具体方法来完成请求.
有时候面试会问到这样一个问题: 前端发送一个请求,后端是如何做的处理?
侧重点就是在问SpringMVC的工作流程



