spring boot request 工作流程
- FrameworkServlet.service
- FrameworkServlet.processRequest 记录请求信息,构造请求对象并设置,调用 DispatcherServlet 实现的 doService() 复位请求信息,发布请求完成事件
- DispatcherServlet.doService() 设置request 属性
- DispatcherServlet.doDispatch() 判断是否为文件上传 如果是 则重新构造processedRequest
- 根据processedRequest 获取对应的mappedHandler
- 根据 mappedHandler 获取 HandlerAdapter
- 执行mappedHandler.applyPreHandle
- 使用 HandlerAdapter 执行 mappedHandler
- 渲染视图
- 执行 mappedHandler. applyPostHandle
HandlerMapping
- DispatcherServlet.initHandlerMappings() 初始化 收集spring容器中所有的HandlerMapping的实现类
- 在spring初始化的时候 所有的controller 中的方法会通过url映射,注册到spring中 AbstractHandlerMethodMapping.initHandlerMethods AbstractHandlerMethodMapping.handlerMethodsInitialized
getHandler() 返回一个 HandlerExecutionChain 对象里面包含了
与url 对应的 方法 或 类 以及 拦截器
handlerAdapter
用来执行HandlerMapping的适配器
ModelAndView handle(HttpServletRequest req, HttpServletResponse res, Object handler);
RequestMappingHandlerAdapter.invokeHandlerMethod() 数据绑定,通过反射执行方法
数据绑定 通过 HandlerMethodArgumentResolver