對(duì)于現(xiàn)有較成熟的Model-View-Control(MVC)框架而言,其解決的主要問(wèn)題無(wú)外乎下面幾部分:
1. 將Web頁(yè)面中的輸入元素封裝為一個(gè)(請(qǐng)求)數(shù)據(jù)對(duì)象。
2. 根據(jù)請(qǐng)求的不同,調(diào)度相應(yīng)的邏輯處理單元,并將(請(qǐng)求)數(shù)據(jù)對(duì)象作為參數(shù)傳入。
3. 邏輯處理單元完成運(yùn)算后,返回一個(gè)結(jié)果數(shù)據(jù)對(duì)象。
4. 將結(jié)果數(shù)據(jù)對(duì)象中的數(shù)據(jù)與預(yù)先設(shè)計(jì)的表現(xiàn)層相融合并展現(xiàn)給用戶(hù)。
現(xiàn)在來(lái)看看Spring MVC是怎么做的。
一 總體概述
Spring MVC的核心組件是DispatcherServlet,該類(lèi)既作為整個(gè)MVC框架的前端控制器,同時(shí)又負(fù)責(zé)調(diào)動(dòng)框架中其它組件協(xié)同工作完成對(duì)一個(gè)請(qǐng)求的處理。處理一個(gè)請(qǐng)求的大致流程如下:
1 請(qǐng)求首先由DispatcherServlet截獲,DispatcherServlet把請(qǐng)求交給HandlerMapping,尋找相應(yīng)的邏輯處理單元。
2 HandlerMapping根據(jù)請(qǐng)求的不同,返回一組邏輯處理單元。在Spring MVC中,邏輯處理單元一般是由0個(gè)或多個(gè)interceptor和一個(gè)controller組成的。
3 DispatcherServlet首先判斷返回的邏輯處理單元中是否有interceptor,如果有,則首先依次調(diào)用interceptor的方法。如果沒(méi)有,則執(zhí)行controller的方法。
4 DispatcherServlet通過(guò)HandlerAdapter來(lái)執(zhí)行controller的方法,返回一個(gè)包含了模型和視圖的對(duì)象ModelAndView。使用HandlerAdapter的目的是因?yàn)镾pring MVC并不關(guān)心controller實(shí)現(xiàn)了什么樣的接口,只要提供相應(yīng)的HandlerAdapter,Spring MVC就知道該如何執(zhí)行controller。
5 如果之前返回的邏輯處理單元包含interceptor,DispatcherServlet又依次(和剛才調(diào)用interceptor的順序相反)調(diào)用interceptor的方法。
6 DispatcherServlet把返回的ModelAndView對(duì)象交給ViewResolver,通過(guò)ViewResolver返回一個(gè)合適的View對(duì)象。
7 最后DispatcherServlet調(diào)用View對(duì)象的render方法把模型中的數(shù)據(jù)和視圖融合,返回給用戶(hù)。
posted on 2007-07-13 11:27
JAVA虛擬機(jī) 閱讀(373)
評(píng)論(0) 編輯 收藏