Spring MVC原理1-DispatcherServlet

MVC流程
在整個 Spring MVC 框架中,DispatcherServlet 處於核心位置,它負責協調和組織不同組件完成請求處理並返回響應工作。在看 DispatcherServlet 類之前,請求處理的大致流程:

0.Tomcat 啓動,對 DispatcherServlet 進行實例化,然後調用它的 init() 方法進行初始化,在這個初始化過程中完成了:對 web.xml 中初始化參數的加載;建立 WebApplicationContext (SpringMVC的IOC容器);進行組件的初始化;
1.客戶端發出請求,由 Tomcat 接收到這個請求,如果匹配 DispatcherServlet 在 web.xml 中配置的映射路徑,Tomcat 就將請求轉交給 DispatcherServlet 處理;
2.DispatcherServlet 從容器中取出所有 HandlerMapping 實例(每個實例對應一個HandlerMapping 接口的實現類)並遍歷。
3.每個 HandlerMapping 會根據請求信息,通過自己實現類中的方式去找到處理該請求的 Handler (執行程序,如Controller中的方法),並且將這個 Handler 與一堆 HandlerInterceptor (攔截器) 封裝成一個 HandlerExecutionChain 對象,一旦有一個 HandlerMapping 可以找到 Handler 則退出循環;
4.DispatcherServlet 取出 HandlerAdapter 組件,根據已經找到的 Handler,再從所有 HandlerAdapter 中找到可以處理該 Handler 的 HandlerAdapter 對象;執行 HandlerExecutionChain 中所有攔截器的 preHandler() 方法。
5.然後再利用 HandlerAdapter 執行 Handler ,執行完成得到 ModelAndView,再依次調用攔截器的 postHandler() 方法;
6.利用 ViewResolver 將 ModelAndView 或是 Exception(可解析成 ModelAndView)解析成 View。
7.然後 View 會調用 render() 方法再根據 ModelAndView 中的數據渲染出頁面;最後再依次調用攔截器的 afterCompletion() 方法,這一次請求就結束了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章