SpringMVC的执行过程
流程描述
- 客户端发送请求给核心控制器(DispatchServlet),核心控制器获得请求后,根据请求的url在处理器映射器中查找对应handler对象(控制器对象)
- 处理器映射器将找到的Handler对象返回给核心控制器
- 核心控制器委派处理器适配器HandlerAdapter执行Handler(有一系类的执行链HandlerExecutionChain )
- 处理器适配器HandlerAdapter将请求转给Handler对象执行具体业务
- 处理器对象Handler,调用Model层进行业务处理,将结果返回给处理器适配器HandlerAdapter,返回的结果为ModelAndView对象(Model指数据,view指视图)
- 处理器适配器HandlerAdapter将ModelAndView对象返回给核心控制器
- 核心控制器调用视图解析器对View进行解析,视图解析器根据核心控制器发送来的逻辑视图解析为一个物理视图并将物理视图返回给核心控制器
- 核心控制器调用视图渲染器将视图渲染(将model数据加载到特定的对象如request)
- 核心控制器向客户端响应
补充:
SpringMVC对应的实现是在DispatchServlet下实现的,该对象在初始化的时候就会把映射器、适配器、视图解析器、异常处理器、文件处理器等等都初始化好具体的在DispatchServlet.properties文件里面配置,请求其实进入DoService方法,主要调用的是DoDispatch方法,映射器就是查找到路径,具体实现在HandlerExecutionChain(映射器最终实例+拦截器list),然后获取适配器RequestMappingHandlerAdapter【ResController】(@ResponseBody和@RequestBody)执行handler方法,最终处理逻辑决定于HttpMessageConverter的实例对象
DispatchServlet: