標籤:dha tin tran 適配器 逆序 response app mvc process
直接上源碼
//doDispatch方法 //1、處理器攔截器的預先處理(正序執行) HandlerInterceptor[] interceptors = mappedHandler.getInterceptors(); if (interceptors != null) { for (int i = 0; i < interceptors.length; i++) { HandlerInterceptor interceptor = interceptors[i]; if (!interceptor.preHandle(processedRequest, response, mappedHandler.getHandler())) { //1.1、失敗時觸發afterCompletion的調用 triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, null); return; } interceptorIndex = i;//1.2、記錄當前預先處理成功的索引 } } //2、處理器適配器調用我們的處理器 mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); //當我們返回null或沒有返回邏輯視圖名時的預設視圖名翻譯(詳解4.15.5 RequestToViewNameTranslator) if (mv != null && !mv.hasView()) { mv.setViewName(getDefaultViewName(request)); } //3、處理器攔截器的後處理(逆序) if (interceptors != null) { for (int i = interceptors.length - 1; i >= 0; i--) { HandlerInterceptor interceptor = interceptors[i]; interceptor.postHandle(processedRequest, response, mappedHandler.getHandler(), mv); } } //4、視圖的渲染 if (mv != null && !mv.wasCleared()) { render(mv, processedRequest, response); if (errorView) { WebUtils.clearErrorRequestAttributes(request); } //5、觸發整個請求處理完畢回調方法afterCompletion triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, null);
springMVC 攔截器源碼解析