spring mvc流程图
2021-10-22 17:50:18 4 举报
springMvc流程图
作者其他创作
大纲/内容
checkRequest(request)验证请求方法和session的和合法性
getHandlerAdapter获取处理器适配器HandlerAdapter
resolveViewName获取视图,返回View对象
循环调用
ha.handle正真的执行处理器方法,返回ModelAndView
mappedHandler.applyPreHandle调用handlerInterceptor的前置处理器
MappedInterceptor的初始化时机:refresh()->finishBeanFactoryInitialization(beanFactory)->beanFactory.preInstantiateSingletons()->getBean(beanName)->doCreateBean->initializeBean->applyBeanPostProcessorsBeforeInitialization->processor.postProcessBeforeInitialization->invokeAwareInterfaces->((ApplicationContextAware) bean).setApplicationContext->initApplicationContext(context)->AbstractHandlerMapping#initInterceptors
mapping.getHandler(request)
DispatcherServlet#doService
缓存处理,根据Last-Modified缓存机制(第一次成功请求后如果在第二次请求之间内容没有改变,那么返回304状态码),Controller需要实现LastModified接口
遍历所有的viewResolvers,递归调用resolveViewNameeg:我们注入的ThymeleafViewResolver在此解析
创建ModelAndViewContainer,并初始化Model对象:modelFactory.initModel
HttpServlet#service
1.解析并合并@SessionAttributes注解2.调用被@ModelAttribute注解的方法3.查找标注了@ModelAttribute、@SessionAttributes的方法参数,确保其解析过程中不会发生异常
httpServlet实现了javax.servlet,运行阶段调用其service方法
:表示循环代码
dapter.supports(handler)子类有不同实现。0 =RequestMappingHandlerAdapter1 =HandlerFunctionAdapter2 =HttpRequestHandlerAdapter3 =SimpleControllerHandlerAdapter
getHandlerExecutionChain:获取处理器链
ThymeleafViewResolver#createView创建视图
CORS请求的处理
遍历handlerMappings:0 =RequestMappingHandlerMapping1 =SimpleUrlHandlerMapping2 =BeanNameUrlHandlerMapping3 =RouterFunctionMapping4 =SimpleUrlHandlerMapping
AbstractHandlerMethodMapping#lookupHandlerMethod
addMatchingMappings:this.mappingRegistry.getMappings().get(mapping)
invokeForRequest通过反射调用controller的目标方法
ThymeleafView#renderFragment
getModelAndView返回ModelAndView对象
DispatcherServlet#doDispatch
尝试绑定参数、返回值解析器
getDataBinderFactory(handlerMethod)为目标对象创建一个WebDataBinder实例,为web请求提供了参数绑定服务
异步请求相关WebAsyncUtils.createAsyncWebRequestWebAsyncUtils.getAsyncManager
FrameworkServlet#service
mappingRegistry:key:存储了路径信息。value:AbstractHandleMethodMapping(存储controller路径信息)
getHandler(processedRequest)返回一个处理器执行链:HandlerExecutionChain
遍历所有的adaptedInterceptors,添加到HandlerExecutionChain:MappedInterceptor根据url判断是否匹配,其它类型的Interceptor对所有请求都有效
view.render渲染视图
createInvocableHandlerMethodServletInvocableHandlerMethod继承并扩展了InvocableHandlerMethod
invokeHandlerMethod执行处理的方法
RequestMappingInfoHandlerMapping#getHandlerInternal(request):获得一个HandlerMethod
invocableMethod.invokeAndHandle调用Controller中的具体方法并处理返回值
processDispatchResult视图解析器解析viewname
收藏
0 条评论
回复 删除
下一页