一、注解驱动
先说一下,HandleMapping和HandleAdaptor在使用注解驱动<mvc:annotation-driven>
1.它能帮我处理转发,处理返回值,变为JSON等。(默认为jackson解析)。
2.加上后,会自动注册
ReuestMappingHandlerMapping(处理映射器)
RequestMappingHandlerAdapter(处理适配器)
二、分析流程
通过流程图可以得到简单分析:
(1)浏览器提交请求到中央调度器,也可以叫做前端控制器。
(2)中央调度器直接将请求转给处理器映射器。
(3)处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后
返回给中央调度器。
这里可以得到一个
HandlerExecutionChain(执行链)
,里面包含了
handler(处理器对象)
和
(interceptors)拦截器数组
。这里getHandler有2种,一种通过
URL
,一种通过
HandlerMethod
(通过@requestmapper)得到。
RequestMappingHandler 通过URL和method方法找到响应的Handler
(4)中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。
涉及到了
适配器
设计模式,可以调用不同的处理器,然后去找到对应的
Controller,
找到响应的
方法去执行
。
(5)处理器适配器调用执行处理器。
(6)处理器将处理结果及要跳转的视图封装到一个对象
ModelAndView
中,并将其返回给
处理器适配器。
(7)处理器适配器直接将结果返回给中央调度器。
(8)中央调度器调用视图解析器,将
ModelAndView
中的视图名称封装为视图对象。
(9)视图解析器将封装了的视图对象返回给中央调度器
(
10
)中央调度器调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。
(
11
)中央调度器响应浏览器。