SpringMVC簡介
SpringMVC是目前最好的實現(xiàn)MVC設計模式的框架恳守,是Spring框架的一個分支產(chǎn)品在岂,已經(jīng)融合在Spring Web Flow里面范抓。
它以SpringIOC容器為基礎斟叼,并利用容器的特性來簡化它的配置识腿。
SpringMVC對MVC流程進行了封裝楞抡,屏蔽掉很多底層代碼,開放出接口竞慢,讓開發(fā)者可以更加輕松快捷的完成基于MVC模式的Web開發(fā)檬洞。
SpringMVC的靜態(tài)概念
dispatcherServlet
前端控制器添怔,是整個流程控制的核心,控制其他組件的執(zhí)行县遣,統(tǒng)一調(diào)度元旬,降低組件之間的耦合性体啰,相當于總指揮仅偎。
瀏覽器發(fā)出的請求正是通過dispatcherServlet進行了分發(fā),到達了一個合適的controller卷玉,來生產(chǎn)我們所需要的業(yè)務數(shù)據(jù)model哨颂,model再通過dispatcherServlet進行傳遞,傳遞給view來完成最終的頁面呈現(xiàn)相种。因此MVC將數(shù)據(jù)的業(yè)務邏輯和頁面實現(xiàn)分離其實核心就是通過dispatcherServlet來實現(xiàn)的威恼。
Controller
控制器(處理器)品姓,就是我們調(diào)用業(yè)務邏輯生成Model的地方
HandleAdapter
處理器適配器,首先Handler它其實就是Controller的一個表現(xiàn)形式箫措,在dispatcherServlet當中腹备,其實最終調(diào)用的controller是以Handler形式出現(xiàn)的,而不同的handleAdapter可以處理不同類型的handler斤蔓,dispatcherServlet根據(jù)Handler來找到支持它的handleAdapter植酥,通過handleAdapter去調(diào)用Handler的方法得到ModelAndView對象。
HandlerInterceptor
攔截器弦牡,它是一個接口友驮,可以在被攔截對象的兩側加入一些內(nèi)容,如果需要做一些攔截處理驾锰,可以來實現(xiàn)這個接口卸留。
它提供了在調(diào)用controller前,調(diào)用之后椭豫,以及在最終model發(fā)送到頁面完成呈現(xiàn)之后的處理方法耻瑟。
HandlerMapping
它是前端請求與controller之間映射關系的一種類,它的作用就是告訴DispatcherServlet這個請求到來之后由哪一個controller來響應赏酥,前端控制器通過HandlerMapping將不同的請求分發(fā)到不同的Handler
handleMapping根據(jù)請求URL找到對應的的Handler(Controller)喳整,以及這個Handler需要被包裹的handlerIntercepter,然后將它們構成一個執(zhí)行的鏈條裸扶。
HandlerExecutionChain
處理器執(zhí)行鏈框都,將攔截器與Handler(controller)一起形成執(zhí)行鏈條對象
ModelAndView
裝載了模型數(shù)據(jù)和視圖信息,作為Handler的處理結果姓言,返回給DispatcherServlet
有3種表現(xiàn)形式瞬项,Model、Map何荚、ModelAndView囱淋,不管是哪種,dispatcherServlet都會將其轉化為ModelAndView
ViewResolver
視圖解析器餐塘,根據(jù)配置找出需要的視圖對象妥衣,DispatcherServlet通過它將邏輯視圖解析成物理視圖,最終將渲染結果響應給客戶端
View
負責呈現(xiàn)頁面(Responsible for page rendering)
SpringMVC的動態(tài)概念
圖解一
訪問過程:首先請求達到了dispatcherServlet戒傻,然后dispatcherServlet將請求代理給了HandlerMapping税手,通過HandlerMapping去查找對應的controller以及對應的HandlerInterceptor,找到之后將controller和HandlerInterceptor形成執(zhí)行鏈條返回給dispatcherServlet需纳,dispatcherServlet通過HandlerAdapter調(diào)用Handler的方法芦倒,調(diào)用后生成模型數(shù)據(jù)ModelAndView,接著調(diào)用視圖解析器返回View對象不翩,然后ModelAndView作為模型數(shù)據(jù)被傳遞給view完成頁面呈現(xiàn)兵扬,最終響應給用戶麻裳。
圖解二
雖然SpringMVC涉及概念很多,但是真正需要我們做的卻很少器钟。
- DispatcherServlet由springmvc內(nèi)部實現(xiàn)津坑,只需要配置即可
- HandlerMapping同理,只需要配置RequestMapping傲霸,后續(xù)操作都已經(jīng)提供了實現(xiàn)
- Controller需要我們自行編寫疆瑰,HandlerInterceptor如果需要就實現(xiàn)接口即可
- HandlerAdapter由DispatcherServlet內(nèi)部調(diào)用,無需關心
- ModelAndView是一個類昙啄,只需要向map一樣添加數(shù)據(jù)即可
- ViewResolver只需要關心使用哪種類型的解析器即可穆役,都有默認的實現(xiàn)
- View對應的真正視圖需要我們自行編寫,在Handler返回時只需要返回視圖名稱即可跟衅,渲染視圖的過程自動就完成了