DispatcherServlet拦截全部web请求
void doService(HttpServletRequest request, HttpServletResponse response) throws Exception
调用里面的void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception
校验文件上传:processedRequest = checkMultipart(request);
处理器调用链:HandlerExecutionChain mappedHandler = getHandler(processedRequest);
处理器适配器:HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
处理器前置:mappedHandler.applyPreHandle(processedRequest, response)
实际处理:mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
处理器后置:mappedHandler.applyPostHandle(processedRequest, response, mv);
结果集处理:processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
异常里面的后置处理:triggerAfterCompletion(processedRequest, response, mappedHandler, ex);
Spring是怎么把controller解析成handler的:
org.springframework.web.servlet.config.DefaultServletHandlerBeanDefinitionParser
容器先解析controller成BeanDefinition parse(Element element, ParserContext parserContext)
Handler根据class去beanFactory获取对应bean
HandlerMapping集合:matchingBeans=BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerMapping.class, true, false);