SpringMVC工作原理

 

具體工作流程:
當客戶端發出一個請求,首先被DispatcherServlet捕獲(若該請求不經過DispatcherServlet,那麼直接返回相應資源,非SSM)

DispatcherServlet收到請求後自己不進行處理,而是委託給其他的解析器進行處理,作爲統一訪問點,進行全局的流程控制。判斷是否有相應的Handler方法。

如果沒有找到相應的解析器Handler,查看是否配置了 <mvc:default-servlethandler/>  ,若配置了它會對DispatcherServlet的請求進行處理,如果該請求已經作了映射,有相應的請求處理方法,那麼會接着交給後臺對應的處理程序(目標資源),如果沒有作映射,就交給 WEB 應用服務器默認的 Servlet 處理(返回404頁面,控制檯:No mapping found for HTTP request with URI [/xx/xx] in DispatcherServlet),從而找到對應的靜態資源,只有再找不到資源時纔會報錯。

 

若相應的處理請求的 Handler 方法,則調用 HandlerMapping , HandlerMapping 將會把請求映射爲HandlerExecutionChain 對象(包含一個Handler 處理器(頁面控制器)對象、多個HandlerInterceptor 攔截器)對象。

然後調用HandlerAdapter,HandlerAdapter 將會把Handler 處理器包裝爲適配器,從而支持多種類型的處理器

然後向下這裏調用調用攔截器的 PreHandle (進行預處理,當preHandle方法返回false時,從當前攔截器往回執行所有攔截器的afterCompletion方法,再退出攔截器鏈。當preHandle方法全爲true時,執行下一個攔截器,直到所有攔截器執行完。)方法對ModelAndView進行操作,處理完成後返回ModelAndView 對象(包含模型數據、邏輯視圖名)。

然後執行handle方法,返回ModelAndView

執行postHandle方法:它是進行處理器攔截用的,它的執行時間是在處理器進行處理之後,也就是在Controller的方法調用之後執行,但是它會在DispatcherServlet進行視圖的渲染之前執行,也就是說在這個方法中可以對ModelAndView進行操作。(這裏判斷是否存在異常)如果不存在異常,繼續執行。

之後執行 processDispatchResult 方法。如果這裏存在異常:進入processHandlerException -> HandlerExceptionResolver 組件解析異常,則返回一個新的 ModelAndView 對象(繼續執行下去)。

 

若沒有異常,進入render 方法 調用ViewResolver組件解析ModelAndView對象得到實際的View解析視圖

 

View會根據傳進來的Model模型數據進行渲染

 

最後調用攔截器的 afterCompletion方法清理資源。

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