一个请求在spring中的流程

一个请求在spring中的流程

DispatcherServlet.doDispatch (请求第一次处理、所有的请求都会执行这个方法。在这个方法中请求会被解析、分发。)->
WebAsyncUtils.getAsyncManager (request中创建一个属性WebAsyncManager)->
DispatcherServlet.checkMultipart (request是否是多文件类的请求)->
DispatcherServlet.getHandler (获得当前requst的处理handler–spring提供了两个RequestMappingHandlerMapping、BeanNameUrlHandlerMapping)->
AbstractHandlerMapping.getHandler (获得当前requst的处理handler)->
AbstractHandlerMapping.getHandlerExecutionChain->
UrlPathHelper.getLookupPathForRequest->
DispatcherServlet.getHandlerAdapter (获得当前requst的处理handlerAdapter–spring提供了两个RequestMappingHandlerAdapter、HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter)->
HandlerExecutionChain.applyPreHandle (处理拦截器)->
AbstractHandlerMethodAdapter.handle (开始处理该请求)->
RequestMappingHandlerAdapter.handleInternal (跳转至方法)->
WebContentGenerator.checkRequest (检查方法是否支持、是否有session)->
RequestMappingHandlerAdapter.invokeHandlerMethod (准备调用具体的执行方法)->
RequestMappingHandlerAdapter.getDataBinderFactory (获得DataBinderFactory)->
RequestMappingHandlerAdapter.createDataBinderFactory (创建DataBinderFactory)->
RequestMappingHandlerAdapter.getModelFactory (获得ModelFactory)->
ModelFactory.ModelFactory (创建ModelFactory)->
RequestMappingHandlerAdapter.createInvocableHandlerMethod (创建ServletInvocableHandlerMethod)->
ModelFactory.initModel (按照参数、初始化ModelFactory)->
ModelFactory.invokeModelAttributeMethods (调用@ModelAttribute修饰的方法)->
InvocableHandlerMethod.invokeForRequest (具体的调用执行方法)->
InvocableHandlerMethod.getMethodArgumentValues (获取方法参数值)->
HandlerMethodArgumentResolverComposite.resolveArgument (获得参数)->
RequestResponseBodyMethodProcessor.resolveArgument (获得参数)->
RequestResponseBodyMethodProcessor.readWithMessageConverters (将request中的参数转化成对象)->
AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters (将request中的参数转化成对象)->
AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters (将request中的参数转化成json对象、该系统用的是json数据传输)->
ServletInvocableHandlerMethod.invokeAndHandle (调用真正的方法)->
InvocableHandlerMethod.invokeForRequest (执行)->
InvocableHandlerMethod.doInvoke (执行)->
->
自己controller中的方法
->
InvocableHandlerMethod.doInvoke (执行返回)->
InvocableHandlerMethod.invokeForRequest (执行返回)->
ServletInvocableHandlerMethod.invokeAndHandle (执行返回)->
HandlerMethodReturnValueHandlerComposite.handleReturnValue (处理方法返回的参数)->
RequestResponseBodyMethodProcessor.handleReturnValue (处理方法返回的参数)->
AbstractMessageConverterMethodProcessor.writeWithMessageConverters (处理方法返回的参数)->
RequestMappingHandlerAdapter.invokeHandlerMethod (执行返回)->
RequestMappingHandlerAdapter.getModelAndView (获得ModelAndView)->
RequestMappingHandlerAdapter.handleInternal (执行返回)->
AbstractHandlerMethodAdapter.handle (执行返回)->
DispatcherServlet.doDispatch (执行返回)->

你可能感兴趣的:(一个请求在spring中的流程)