Spring mvc执行过程
根据请求路径,获取执行链 HandlerExecutionChain
RequestMappingHandlerMapping,构建执行链,包括调用的目标方法(HandlerMethod)和拦截器(HandlerInterceptor)根据1获取的执行链中的调用目标方法(HandlerMethod),获取适配器(HandlerAdapter),一般是RequestMappingHandlerAdapter
- 执行执行链中的拦截器(HandlerInterceptor)中的preHandle方法,如果返回false,则返回。
使用HandlerAdapter执行执行链中的HandlerMethod,返回view
spring中配置的argumentResolvers、messageConverters和returnValueHandlers会在这里执行执行执行链中的拦截器中的postHandler方法
处理分发后的结果,其中,view渲染,就在这一步。HandlerInterceptor的afterCompletion执行也在这一步
如果执行异常,则执行HandlerInterceptor的afterCompletion
RequestMappingHandlerAdapter
argumentResolvers : {
org.springframework.web.method.annotation.RequestParamMethodArgumentResolver,
org.springframework.web.method.annotation.RequestParamMapMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.PathVariableMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.PathVariableMapMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.MatrixVariableMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.MatrixVariableMapMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor,
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor, ---------- messageConverters,用于消息转化,用在这里
org.springframework.web.servlet.mvc.method.annotation.RequestPartMethodArgumentResolver,
org.springframework.web.method.annotation.RequestHeaderMethodArgumentResolver,
org.springframework.web.method.annotation.RequestHeaderMapMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.ServletCookieValueMethodArgumentResolver,
org.springframework.web.method.annotation.ExpressionValueMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.SessionAttributeMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.RequestAttributeMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.ServletRequestMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.ServletResponseMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor,
org.springframework.web.servlet.mvc.method.annotation.RedirectAttributesMethodArgumentResolver,
org.springframework.web.method.annotation.ModelMethodProcessor,
org.springframework.web.method.annotation.MapMethodProcessor,
org.springframework.web.method.annotation.ErrorsMethodArgumentResolver,
org.springframework.web.method.annotation.SessionStatusMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.UriComponentsBuilderMethodArgumentResolver,
org.ihsxin.service.common.support.mvc.JsonArgumentResolvers,
org.springframework.web.method.annotation.RequestParamMethodArgumentResolver,
org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor
},
return value handler: {
org.springframework.web.servlet.mvc.method.annotation.ModelAndViewMethodReturnValueHandler,
org.springframework.web.method.annotation.ModelMethodProcessor,
org.springframework.web.servlet.mvc.method.annotation.ViewMethodReturnValueHandler,
org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitterReturnValueHandler,
org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBodyReturnValueHandler,
org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor,
org.springframework.web.servlet.mvc.method.annotation.HttpHeadersReturnValueHandler,
org.springframework.web.servlet.mvc.method.annotation.CallableMethodReturnValueHandler,
org.springframework.web.servlet.mvc.method.annotation.DeferredResultMethodReturnValueHandler,
org.springframework.web.servlet.mvc.method.annotation.AsyncTaskMethodReturnValueHandler,
org.springframework.web.method.annotation.ModelAttributeMethodProcessor,
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor,
org.springframework.web.servlet.mvc.method.annotation.ViewNameMethodReturnValueHandler,
org.springframework.web.method.annotation.MapMethodProcessor,
org.ihsxin.service.common.support.mvc.ResponseHandler,
org.springframework.web.method.annotation.ModelAttributeMethodProcessor
}