- 首先用户发送请求,
DispatcherServlet
实现了Servlet
接口 - 获取url请求对应的处理方法,遍历handlerMappings列表,获取对象
HandlerExecutionChain
(包含一个处理器 handler 如HandlerMethod 对象、多个 HandlerInterceptor 拦截器对象),遍历handlerMappings列表,针对每个handlerMapping试图获取HandlerExecutionChain,一旦成功,即返回 - 获取对应的 HandlerAdapter,HandlerAdapter 将会把步骤2中的handler包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器。DispatcherServlet中的HandlerAdapter列表如图中所列的3种,依次遍历,调用
HanderAdapter.supports
判断是否支持。 - 调用Controller的具体方法处理请求,并返回一个 ModelAndView。HandlerAdapter会为每一个请求生成一个
ServletInvocableHandlerMethod
实例,核心方法invokeAndHandle
,包括输入参数的处理和返回数据的解析。 - 渲染
- 返回
前端控制器(DispatcherServlet):接收用户请求并返回请求结果。它的作用相当于一个转发器或*处理器,控制整个执行流程,对各逐渐进行调度降低组件之间的耦合。
处理器映射器(HandlerMapping):根据用户请求的URL,通过注解或者XML配置,查找相应的处理器Handler
处理器适配(HandlerAdapter):根据映射器查找出的Handler,完成调用处理器中的方法
处理器(Handler):请求处理的具体逻辑,返回数据和视图信息
视图解析器(View Resolver):解析具体视图,通过ModelAndView对象中的View信息,将逻辑视图名解析成真正的视图View
出处:
【深入浅出spring】Spring MVC 流程解析 -- HanndlerMapping