Spring mvc的生命周期開(kāi)始使用 spring mvc之前,我們必須需要了解下SPRING MVC的流程,如下圖:
在看下圖之前的一些說(shuō)明: (下面介紹的 HandlerMapping,HandlerAdapter,HandlerExceptionResovler,ViewResolver都有個(gè) order屬性,因?yàn)檫@些接口每一個(gè)都可以注冊(cè)多個(gè)實(shí)現(xiàn),order代表他們的執(zhí)行順序,order越小的越先執(zhí)行,一般先執(zhí)行的匹配到了后面的就不會(huì)執(zhí) 行了) DispatcherServlet: 整個(gè)Spring MVC的前端控制器,由它來(lái)接管來(lái)自客戶端的請(qǐng)求 HandlerMapping: DispatcherServlet會(huì)通過(guò)它來(lái)處理客戶端請(qǐng)求到各個(gè)(Controller)處理器的映射 HandlerAdapter: HandlerMapping會(huì)根據(jù)它來(lái)調(diào)用Controller里需要被執(zhí)行的方法 HandlerExceptionResolver: spring mvc處理流程中,如果有異常拋出,會(huì)交給它來(lái)進(jìn)行異常處理 ViewResolver: HandlerAdapter會(huì)把Controller中調(diào)用返回值最終包裝成ModelAndView,ViewResolver會(huì)檢查其中的 view,如果view是一個(gè)字符串,它就負(fù)責(zé)處理這個(gè)字符串并返回一個(gè)真正的View,如果view是一個(gè)真正的View則不會(huì)交給它處理,為什么 view即可以是字符串又會(huì)是View呢下面會(huì)進(jìn)行解釋 View: 對(duì)應(yīng)MVC 中的V, 此接口只有一個(gè)方法 render,用于視圖展現(xiàn) ModelAndView 對(duì)于解決上面介紹ViewResoler或者下面圖片的疑惑,這個(gè)類中的view這個(gè)屬性是 Object 類型的,它可以是一個(gè)視圖名也可以是一個(gè)實(shí)際的View,這點(diǎn)我們觀察其源碼可以很清楚的看出來(lái) private Object view;
public void setViewName(String viewName) { this.view = viewName; } public String getViewName() { return (this.view instanceof String ? (String) this.view : null); } public void setView(View view) { this.view = view; } public View getView() { return (this.view instanceof View ? (View) this.view : null); } Spring mvc的流程圖如果看不全或者看不清圖,請(qǐng)點(diǎn)擊以下鏈接,由于圖片太大,流程入口從中間上方的Client開(kāi)始 http://image54.360doc.com/DownloadImg/2012/08/0914/26053838_1.png |
|
來(lái)自: 老鼠愛(ài)上美貓 > 《spring》