版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xhpscdx/article/details/54968934
解spring mvc的什么特征
- 我想通过在实际应用中需要明白这些特征原理。
- 需要了解DispatcherServlet,DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter,ViewResolver,Interceptor,ExceptionHandler,LocaleResolver(i18n国际化组件),Controller支持请求参数,返回参数。
- 需要了解这些组件工作请求流程。熟悉各个组件的调用位置。
- 了解spring mvc的整体架构,方便自行扩展。
spring mvc 组件时序图
- browse的请求都会被DispatchServlet所拦截,调用doDispatch方法,DispatchServlet是主要request请求处理组件,很多属性组件在init被set进来。MultipartResolver,LocaleResolver,handlerMappings,handlerAdapters,handlerExceptionResolvers这些常用组件。
- 2-4步骤HandlerExecutionChain获取过程,
RequestMappingHandlerMapping的父类AbstractHandlerMapping.getHandler(HttpServletRequest request) 获取了HandlerMethod,并在getHandlerExecutionChain方法里构建HandlerExecutionChain, HandlerExecutionChain对象主要有HandlerMethod属性(具体controller方法),该request需要interceptorList。 - RequestMappingHandlerMapping
- 步骤5是根据methodHandler获取对应的HandlerAdapter。
- 执行HandlerExecutionChain的方法前interceptor拦截器,
- 步骤10,调用HandlerAdapter.handle方法,里面会根据HandlerMethodArgumentResolver,根据参数调用 进行选择是否调用HttpMessageConverter 或者ConversionService 处理。
- 13并会执行参数注入与参数validate。
- 步骤14,最后调用controller业务层。
- 最近返回ModelAndView对象在DispatchServlet,
- 继续执行HandlerExecutionChain.applyPostHandle应用处理后interceptor。
- 方法processDispatchResult是对handlerExceptionResolvers处理。
- 完成。