springmvc框架原理分析
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
springmvc全名是spring web mvc,springmvc是spring的一個(gè)模塊,并且看名字即可知道,springmvc是一個(gè)基于mvc設(shè)計(jì)模式的前端web框架。mvc:m(model模型)、v(view視圖)、c(control控制)
SpringMVC的工作原理圖:
1、發(fā)起請(qǐng)求到前端控制器(DispatcherServlet),該控制器中就會(huì)過(guò)濾出你哪些請(qǐng)求可以訪(fǎng)問(wèn)該servlet哪些不可以,就是url-pattern的作用,并且會(huì)加載springmvc.xml配置文件
2、前端控制器會(huì)找到HandlerMapping(處理器映射器),通過(guò)HandlerMapping完成url到controller映射的組件,通俗點(diǎn)講,就是將在springmvc.xml中配置的或者注解的url與對(duì)應(yīng)的處理類(lèi)找到并進(jìn)行存儲(chǔ),實(shí)際上是用一個(gè)map集合來(lái)保存這種映射關(guān)系,map<url,handler>; 這樣,就將所有的這種映射關(guān)系都記錄保存了下來(lái)
3、通過(guò)HandlerMapping有了這些映射關(guān)系,并且找到了url對(duì)應(yīng)的處理器,HandlerMapping就會(huì)將其處理器(圖中紅色標(biāo)明的handler)返回,在其返回之前,在加上很多的攔截器,其作用后面進(jìn)行講解,這里知道在返回的處理器前會(huì)有很多的攔截器即可。
4、DispatcherServlet拿到了handler之后,找到HandlerAdapter(處理器適配器),通過(guò)它來(lái)訪(fǎng)問(wèn)處理器,并且執(zhí)行處理器。
這里會(huì)有人會(huì)有疑惑,為什么需要處理器適配器,我們都獲得了處理類(lèi)了,直接調(diào)用不就行了嗎?
不行,因?yàn)槲覀冎恢捞幚眍?lèi)在哪里,并不知道執(zhí)行處理類(lèi)中的哪個(gè)方法,其實(shí)也就是不知道處理類(lèi)是通過(guò)哪種方式創(chuàng)建出來(lái)的,實(shí)現(xiàn)HttpRequestHandler?還是注解方式,或者是其他方式,我們不知道,所以需要HandlerAdapter來(lái)幫我們確認(rèn)調(diào)用哪個(gè)方法。
5、執(zhí)行處理器
6、處理器會(huì)返回一個(gè)ModelAndView對(duì)象給HandlerAdapter
7、通過(guò)HandlerAdapter將ModelAndView對(duì)象返回給前端控制器(DispatcherServlet)
8、前端控制器請(qǐng)求視圖解析器(ViewResolver)去進(jìn)行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖(jsp),其實(shí)就是將ModelAndView對(duì)象中存放視圖的名稱(chēng)進(jìn)行查找,找到對(duì)應(yīng)的頁(yè)面形成視圖對(duì)象
9、返回視圖對(duì)象到前端控制器。
10、視圖渲染,就是將ModelAndView對(duì)象中的數(shù)據(jù)放到request域中,用來(lái)讓頁(yè)面加載數(shù)據(jù)的。
11、通過(guò)第8步,通過(guò)名稱(chēng)找到了對(duì)應(yīng)的頁(yè)面,通過(guò)第10步,request域中有了所需要的數(shù)據(jù),那么就能夠進(jìn)行視圖渲染了。最后將其返回
組件說(shuō)明:
DispatcherServlet:作為前端控制器,整個(gè)流程控制的中心,控制其它組件執(zhí)行,統(tǒng)一調(diào)度,降低組件之間的耦合性,提高每個(gè)組件的擴(kuò)展性。
HandlerMapping:通過(guò)擴(kuò)展處理器映射器實(shí)現(xiàn)不同的映射方式,例如:配置文件方式,實(shí)現(xiàn)接口方式,注解方式等。?
HandlAdapter:通過(guò)擴(kuò)展處理器適配器,支持更多類(lèi)型的處理器。
ViewResolver:通過(guò)擴(kuò)展視圖解析器,支持更多類(lèi)型的視圖解析,例如:jsp、freemarker、pdf、excel等。
轉(zhuǎn)載于:https://my.oschina.net/u/3873725/blog/1934376
總結(jié)
以上是生活随笔為你收集整理的springmvc框架原理分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PostgreSQL SSL启用与CA证
- 下一篇: 【资源】C++学习资料 - 逆天整理 -