源码寻找:
1.找到AbstractDispatcherServletInitializer类
2.找到registerDispatcherServlet方法
1.用户发起请求后就会到达前端控制器DispatcherServlet
2.前端控制器获取请求后,就会调用doDispatch方法里的getHandler。
3.获取匹配的HandlerMapping(处理器映射器)
4.处理器映射器就会根据请求的URL,找到对应的Handler处理器(如果是基于注解开发,找到的就是HandlerMethod反射对象)和拦截器链,将处理器对象及拦截器链(Interceptors)一并组成处理器执行链HandlerExecutionChain返回给前端控制器
5.前端控制器通过方法getHandlerAdapter获取适配器(底层会进行适配判断,通过适配器的supports方法),通过supports方法
6.前端控制器将执行链中的处理器对象交给处理器适配器(HandlerAdapter)执行,而执行链中的拦截器由dispatcherServlet直接调用执行链的方法执行
7.适配器通过调用handle方法执行处理器方法,执行完返回模型视图(ModelAndView)给前端控制器,如果使用了@ResponseBody注解标识类或方法,那么返回的ModelAndView为null,就直接响应结果给请求端(如果返需要返回JSON数据,那么底层会调用消息转换器进行JSON转换)
8.如果ModelAndView不为空,那么前端控制器将模型视图传给视图解析器(ViewReslover)
9.视图解析器解析模型视图后(拼接前缀和后缀)返回具体的View给前端控制器
10.前端控制器对View进行视图渲染(将模型数据填充到视图中),响应用户