javascript
初探Spring MVC 请求处理流程
Spring MVC 相對(duì)于前面的章節(jié)算是比較簡(jiǎn)單的,我們首先引用《Spring in Action》上的一張圖來(lái)了解Spring MVC 的核心組件和大致處理流程:
從上圖中看到
①、DispatcherServlet 是SpringMVC 中的前端控制器(Front Controller),負(fù)責(zé)接收Request 并將Request 轉(zhuǎn)發(fā)給對(duì)應(yīng)的處理組件。
② 、HanlerMapping 是SpringMVC 中完成url 到Controller 映射的組件。DispatcherServlet 接收Request, 然后從HandlerMapping 查找處理Request 的Controller。
③、Controller 處理Request,并返回ModelAndView 對(duì)象,Controller 是SpringMVC中負(fù)責(zé)處理Request 的組件(類似于Struts2 中的Action),ModelAndView 是封裝結(jié)果視圖的組件。
④、⑤、⑥視圖解析器解析ModelAndView 對(duì)象并返回對(duì)應(yīng)的視圖給客戶端。
在前面的章節(jié)中我們已經(jīng)大致了解到,容器初始化時(shí)會(huì)建立所有url 和Controller 中的Method 的對(duì)應(yīng)關(guān)系,保存到HandlerMapping 中,用戶請(qǐng)求是根據(jù)Request 請(qǐng)求的url 快速定位到Controller 中的某個(gè)方法。在Spring 中先將url 和Controller 的對(duì)應(yīng)關(guān)系,保存到Map<url,Controller>中。Web 容器啟動(dòng)時(shí)會(huì)通知Spring 初始化容器(加載Bean 的定義信息和初始化所有單例Bean),然后SpringMVC 會(huì)遍歷容器中的Bean,獲取每一個(gè)Controller 中的所有方法訪問(wèn)的url,然后將url 和Controller 保存到一個(gè)Map中;這樣就可以根據(jù)Request 快速定位到Controller,因?yàn)樽罱K處理Request 的是Controller 中的方法,Map 中只保留了url 和Controller 中的對(duì)應(yīng)關(guān)系,所以要根據(jù)Request 的url 進(jìn)一步確認(rèn)Controller 中的Method,這一步工作的原理就是拼接Controller 的url(Controller 上@RequestMapping 的值) 和方法的url(Method 上@RequestMapping 的值),與request 的url 進(jìn)行匹配,找到匹配的那個(gè)方法;確定處理請(qǐng)求的Method 后,接下來(lái)的任務(wù)就是參數(shù)綁定,把Request 中參數(shù)綁定到方法的形式參數(shù)上,這一步是整個(gè)請(qǐng)求處理過(guò)程中最復(fù)雜的一個(gè)步驟。
?
總結(jié)
以上是生活随笔為你收集整理的初探Spring MVC 请求处理流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 触发通知
- 下一篇: Spring MVC 源码分析