HandlerExecutionChain을 설명하기 전에 SpringMVC의 핵심 개발 단계에 대한 일반적인 이해를 해보자:
DispaterServlet을 HandlerExecutionChain 유형의 핸들러 객체에 매핑합니다.
핸들러 객체를 HandlerAdapter의 인스턴스화 객체에 매개변수로 전달합니다. 핸들러 메소드를 호출하면 ModelAndView 객체가 생성됩니다.
ViewResolver 뷰 파서를 통해 이전 단계에서 생성된 ModelAndView를 구문 분석합니다.
DispatcherServlet은 획득한 뷰를 기반으로 사용자에게 뷰를 반환합니다.
HandlerExecutionChain 클래스는 비교적 간단하고 이해하기 쉽습니다.
============================================== == ========================
HandlerExecutionChain {
=================== === ============================================== === =
List<HandlerInterceptor>
applyPreHandle(HttpServletRequest request, HttpServletResponse response) = (! ( i = 0; i < interceptors.length; i++= (!interceptor.preHandle(request, response, .interceptorIndex =
applyPostHandle(HttpServletRequest request, HttpServletResponse response, ModelAndView mv) = (! ( i = interceptors.length - 1; i >= 0; i--=
/** * 这个方法只会执行preHandle()方法已经成功执行并且返回true的拦截器中的postHandle()方法。 */void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, Exception ex)throws Exception { HandlerInterceptor[] interceptors = getInterceptors();if (!ObjectUtils.isEmpty(interceptors)) {for (int i = this.interceptorIndex; i >= 0; i--) { HandlerInterceptor interceptor = interceptors[i];try { interceptor.afterCompletion(request, response, this.handler, ex); }catch (Throwable ex2) { logger.error("HandlerInterceptor.afterCompletion threw exception", ex2); } } } }
위 내용은 HandlerExecutionChain 클래스 설명 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!