SpringMVC 拦截器执行源码解析:
1、执行doDispatcher做请求分发处理
1.1、调用getHandler()获取请求处理器,处理器中包含请求的方法和拦截器信息
getHandlerInternal() 根据请求地址获取对应的目标方法getHandlerExecutionChain() 获取请求地址对应的所有拦截器信息
1.2、调用getHandlerAdapter() 方法获取 适配处理器
适配器可以用来执行目标方法.
1.3、mappedHandler.applyPreHandle(processedRequest, response) 执行所有拦截器 preHandle()方法
以下代码就是执行所有拦截器的代码.
1.4、调用ha.handle(); 调用Controller目标方法,并将结果封装成为ModelAndView返回
1.5、mappedHandler.applyPostHandle() 执行拦截器PostHandler()后置方法
执行所有拦截器后置方法的代码 :
1.6、processDispatchResult(); 处理结果,渲染页面
1.7、mappedHandler.triggerAfterCompletion(); 执行拦截器 渲染完成方法
2、视图源码解析:
视图就是用户最终看到的结果( 最终的页面的数据 )
2.1、View 视图
获取视图的类型
String getContentType();
渲染视图页面
void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception;
2.2、AbstractView 抽象类实现
具体实现页面的渲染
protected abstract void renderMergedOutputModel(
Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception;
2.3、把隐含模型中的数据,同步到Reqeust域中
protected void exposeModelAsRequestAttributes(Map<String, Object> model, HttpServletRequest request)
2.4、ViewResolver 视图解析器
根据给定的视图名得到相应的视图View对象
View resolveViewName(String viewName, Locale locale) throws Exception;