1. 程式人生 > >springMVC整體執行流程

springMVC整體執行流程

SpringMVC執行流程圖如下:
這裡寫圖片描述

HandlerExcutionChain:處理器執行鏈,它是包含了Handler目標方法和所有相關攔截器的物件,它是由HandlerMapping獲取的。
HandlerMapping:處理器對映器,它定義了請求到處理器之間的對映。就是說,要想通過請求找到處理器,就必須通過HandlerMapping。
HandlerAdapter:處理器介面卡,在呼叫目標方法之前,需要做資料初始化,資料繫結,型別轉換格式化等

問題1 :如果傳送的請求沒有對應的handler,那HandlerExcutionChain中的handler會不會為空呢?
情況1 :
實際情況是,如果配置了<mvc:default-servlet-handler />

且配置了<mvc:annotation-driven><mvc:annotation-driven>就會註冊RequestMappingHandlerMapping、RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver三個Bean,其中handlerMappings中包含了SimpleUrlHandlerMapping(這個物件就是可以直接訪問靜態資原始檔)和RequestMappingHandllerMapping(這個物件就是可以找到我們controller中的目標方法對映)。那springMVC在RequestMappingHandllerMapping找不到對映,則會認為是個靜態資源,所以HandlerExcutionChain中的handler不會為空,但是最終也會報錯404 + 請求路徑 錯誤。
情況2 :
如果什麼都沒配置,那handlerMappings中只包含BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping,這兩個對映器都無法獲得handler,所以HandlerExcutionChain的handler為空,doDispatch會直接return 並報404錯誤 且沒有請求路徑。