Spring MVC工作流程
DispatcherServlet配置到web.xml。在servlet.init()的時候進行spring mvc的初始化
1、創建springmvc的ioc容器並refresh(),從ServletContext中拿到Spring ioc容器並設置父子ApplicationContext關係
2、初始化Servlet需要用的策略工具
比如:初始化文件上傳工具、國際化工具、HandlerMappings、HandlerAdapters、View解析器
從容器裏拿出所有HandlerMapping設置到dispatcherServlet.handlerMappings
從容器裏拿出所有HandlerAdapter設置到dispatcherServlet.handlerAdapters
從容器裏拿出所有ViewResolver設置到dispatcherServlet.viewResolvers
如果容器裏面沒有,可以從包中讀DispatcherServlet.properties進行配置
3、servlet請求都會被轉發到doDispatcher進行處理
檢查請求是multipart/form-data內容類型,就用multipartResolver進行解析封裝
遍歷handlerMappings,執行mapping.gethandler(request),看誰最先返回非空的handlerChain (該chain包含interceptors)
遍歷handlerAdaptors,執行adaptor.supports(handlerChain.getHandler()),看誰最先匹配上就返回該adaptor
從chain裏拿到所有攔截器進行遍歷
執行interceptor.preHandle(req,res,handler)
modelAndView = adaptor.handler(req,res,handler)
執行interceptor.postHandle(req,res,handler,modelAndView)
遍歷viewResolvers,執行view = viewResolver.resolverViewName(mav.getViewName, locale)
view.render(mav.getModelInternal(), req, res)