這篇文章說(shuō)一下spring mvc的請(qǐng)求流程儒溉,開(kāi)發(fā)中使用spring mvc的還是挺多的,所以你需要請(qǐng)求怎么通過(guò)各個(gè)環(huán)節(jié)发钝,數(shù)據(jù)如何流轉(zhuǎn)顿涣,最后數(shù)據(jù)又如何顯示在瀏覽器,明白請(qǐng)求流程還是蠻重要的酝豪,對(duì)于調(diào)查問(wèn)題很有幫助涛碑。
spring mvc的請(qǐng)求流程如下圖所示:
1.瀏覽器發(fā)出請(qǐng)求,該請(qǐng)求攜帶請(qǐng)求信息的內(nèi)容孵淘,至少含有url蒲障。來(lái)到DispatcherServlet控制器。
2.DispatcherServlet會(huì)查詢一個(gè)或者多個(gè)handler mapping瘫证,來(lái)確定下一站在哪里揉阎。
3.當(dāng)確定好對(duì)應(yīng)的控制器,DispatcherServlet會(huì)把請(qǐng)求發(fā)送選中的控制器將請(qǐng)求發(fā)送給spring mvc控制器背捌。
4.控制器在處理完邏輯任務(wù)后毙籽,會(huì)產(chǎn)生對(duì)應(yīng)的信息,也就是model模型毡庆,控制器將這些原始的信息打包并且標(biāo)示出用于渲染輸出的視圖名坑赡,接著會(huì)將模型和視圖名發(fā)送回DispatcherServlet。
5.此時(shí)View Resolver視圖解析器會(huì)根據(jù)返回的視圖名匹配一個(gè)特定的視圖進(jìn)行解析么抗。
6.視圖解析成功后垮衷,將返回客戶端,這個(gè)請(qǐng)求就結(jié)束了乖坠。
可能會(huì)在開(kāi)發(fā)中遇到的問(wèn)題搀突,對(duì)于初學(xué)者來(lái)說(shuō),你可能會(huì)遇到controller寫好了熊泵,JSP也開(kāi)發(fā)好了仰迁,但是始終不會(huì)進(jìn)你的后臺(tái)controller,那么你需要查看一下你的url是否和controller的一致顽分,如果不相同徐许,那么handler mapping是不會(huì)匹配到你的controller,所以會(huì)導(dǎo)致頁(yè)面404卒蘸。
還有可能存在相同的url雌隅,你和別人的controller不同翻默,但是定義的url是相同的,在別人的順序之后的話恰起,handler mapping也是首先會(huì)從菜單里面匹配到前面的controller修械,所以會(huì)執(zhí)行他的,而不是執(zhí)行你的controller检盼。