对handlerexecutionchain类的深入理解
HandlerExecutionChain类比较简单,好理解。
/*
*处理器执行链由处理器对象和拦截器组成。
*/
publicclassHandlerExecutionChain{
下面是类的部分属性。
privatefinalObjecthandler;//处理器对象。 privateHandlerInterceptor[]interceptors;//拦截器数组 privateListinterceptorList;//拦截器列表
/**
*ApplypreHandlemethodsofregisteredinterceptors.
*@return{@codetrue}iftheexecutionchainshouldproceedwiththe
*nextinterceptororthehandleritself.Else,DispatcherServletassumes
*thatthisinterceptorhasalreadydealtwiththeresponseitself.
*执行已经注册的拦截的preHandle()方法。如果返回true,则执行链可以执行下一个拦截器的preHandle()方法或handler自身。
*否则,
*/
booleanapplyPreHandle(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
HandlerInterceptor[]interceptors=getInterceptors();
if(!ObjectUtils.isEmpty(interceptors)){
for(inti=0;i
/*
*执行已经注册的拦截器postHandle()方法。
*/
voidapplyPostHandle(HttpServletRequestrequest,HttpServletResponseresponse,ModelAndViewmv)throwsException{
HandlerInterceptor[]interceptors=getInterceptors();
if(!ObjectUtils.isEmpty(interceptors)){
for(inti=interceptors.length-1;i>=0;i--){
HandlerInterceptorinterceptor=interceptors[i];
interceptor.postHandle(request,response,this.handler,mv);
}
}
}
/**
*这个方法只会执行preHandle()方法已经成功执行并且返回true的拦截器中的postHandle()方法。
*/
voidtriggerAfterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Exceptionex)
throwsException{
HandlerInterceptor[]interceptors=getInterceptors();
if(!ObjectUtils.isEmpty(interceptors)){
for(inti=this.interceptorIndex;i>=0;i--){
HandlerInterceptorinterceptor=interceptors[i];
try{
interceptor.afterCompletion(request,response,this.handler,ex);
}
catch(Throwableex2){
logger.error("HandlerInterceptor.afterCompletionthrewexception",ex2);
}
}
}
}
以上这篇对handlerexecutionchain类的深入理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。