本文是對(duì) SpringMVC 工作流程的總結(jié),這是前段時(shí)間蘇寧Java工程師在線筆試的簡(jiǎn)答題,自己一定要可以用語(yǔ)言描述SpringMVC的工作流程。

名詞解釋:
DispatcherServlet:前端控制器,是 SpringMVC 工作流程的中心,負(fù)責(zé)調(diào)用其他組件,在系統(tǒng)啟動(dòng)時(shí)就加載該類。
Handler:后端處理器,對(duì)用戶具體請(qǐng)求進(jìn)行處理,也就是我們編寫的 Controller 類。
HandlerMapping:處理器映射器,根據(jù)用戶訪問(wèn)的 URL 映射到對(duì)應(yīng)的后端處理器 Handler,根據(jù)不同的映射處理器可實(shí)現(xiàn)不同的映射,比如 xml 配置(現(xiàn)在不常用)、注解配置(最常用)。
HandlerExecutionChain:后端處理器 Handler 相關(guān)對(duì)象,包括 Handler 對(duì)象和對(duì)應(yīng)的攔截器對(duì)象,以 HandlerExecutionChain 對(duì)象包含了這些相關(guān)的對(duì)象。
ModelAndView:邏輯視圖,包括數(shù)據(jù)模型和視圖名。
HandlerAdapter:處理器適配器,調(diào)用后端處理器中的方法,返回邏輯視圖 ModelAndView 對(duì)象。
ViewResolver:視圖解析器,將 ModelAndView 邏輯視圖解析為具體的視圖(如 JSP,PDF等)。
工作流程:
1、當(dāng)用戶向服務(wù)器發(fā)送請(qǐng)求時(shí),會(huì)被 DispatcherServlet 攔截。
2、DispatherServlet 解析用戶訪問(wèn)的 URL,并調(diào)用處理器映射器 HandlerMapping。
3、 處理器映射器 HandlerMapping 映射到對(duì)應(yīng)的后端處理器 Handler(注意這里只是找到了對(duì)應(yīng)的 Controller 類,并沒(méi)有執(zhí)行其中的方法),Handler 對(duì)象以及 Handler 對(duì)象相關(guān)的攔截器對(duì)象會(huì)被封裝到 HandlerExecutionChain 對(duì)象中返回給 DispatcherServlet。
4、DispatcherServlet 根據(jù)后端處理器 Handler 對(duì)象來(lái)調(diào)用適合的處理器適配器。
5、HandlerAdapter 調(diào)用 Handler 對(duì)象執(zhí)行 Handler 中的方法,在 Handler 的方法中,可以做一些額外的工作,如消息轉(zhuǎn)換(如 JSON、XML 和 Java 對(duì)象的互轉(zhuǎn))、數(shù)據(jù)轉(zhuǎn)換(如 String 和 Integer、Double的互轉(zhuǎn))、數(shù)據(jù)格式化(如日期)、數(shù)據(jù)校驗(yàn)(后端校驗(yàn)),最終返回 ModelAndView 對(duì)象給 DispatcherServlet,該對(duì)象包含視圖名和數(shù)據(jù)模型。
6、DispatcherServlet 根據(jù) ModelAndView 對(duì)象來(lái)調(diào)用適合的視圖解析器 ViewResolver。
7、ViewResolver 解析 Model 和 View 返回具體的 view 給 DispatcherServlet。
8、DispatcherServlet 對(duì) view 進(jìn)行渲染,返回具體的視圖給客戶端顯示,如 JSP,JSON、XML、PDF等。