溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

SpringMVC是什么?

發(fā)布時(shí)間:2020-06-02 17:18:37 來(lái)源:網(wǎng)絡(luò) 閱讀:371 作者:jjjyyy66 欄目:網(wǎng)絡(luò)安全

一,首先是一個(gè)MVC框架。

在web模型中,MVC是一種很流行的框架,通過(guò)把Model,View,Controller分離,把較為復(fù)雜的web應(yīng)用分成邏輯清晰的幾部分,是為了簡(jiǎn)化開(kāi)發(fā),減少出錯(cuò)。還是為了組內(nèi)開(kāi)發(fā)人員之間的配合??傊褪且环N分層工作的辦法。

 

二,springMVC,是spring的一個(gè)子框架,當(dāng)然擁有spring的特性,如依賴(lài)注入。

三,springMVC的信息流是什么樣的?

首先用戶(hù)通過(guò)HTTP請(qǐng)求到服務(wù)器,服務(wù)器會(huì)根據(jù)你的url來(lái)將請(qǐng)求轉(zhuǎn)到不同的控制器Controller。這是第一步,具體需要做的是在web.xml中設(shè)置URLpattern映射到spring的DispatcherServlet,這是控制器是負(fù)責(zé)第一道處理,用來(lái)轉(zhuǎn)發(fā)請(qǐng)求的,它會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到合適的Controller上。那么問(wèn)題來(lái)了,它是根據(jù)什么轉(zhuǎn)發(fā)呢?這個(gè)問(wèn)題有些混亂,原因是springMVC一直在升級(jí),不斷貢獻(xiàn)新的url到Controller的映射方法。但是萬(wàn)變不離其宗,不管如何變,它的目的都不變,就是設(shè)法建立url到Controller的映射,找到這個(gè)目的之后,看起來(lái)就容易一些。具體來(lái)看,

方法1,在springmvc的配置文件中,直接將bean的name寫(xiě)成一個(gè)url,如

<bean name=”/product_input” class="com.ap.ProductInputController" />

通過(guò)這句配置,就直接將/product_input這url的請(qǐng)求轉(zhuǎn)發(fā)到了ProductInputController這個(gè)類(lèi)上。

注:但是這個(gè)方法被認(rèn)為是老套的方法,現(xiàn)在已經(jīng)不流行了。了解就可以,現(xiàn)在推薦的是注解的方式,即方法2的方式。

 

方法2,這種方式,在給Controller命名時(shí),就可以無(wú)所謂了, 它的映射不是依賴(lài)這個(gè)名字,所以可以像下面這種方式來(lái)寫(xiě)這個(gè)bean的配置,可以隨便起一個(gè),如

<bean name=”product” class="com".ap.ProductInputController />

到這里,顯然還是沒(méi)有實(shí)現(xiàn)url到Controller的映射,因?yàn)閡rl都還沒(méi)看見(jiàn)呢,

現(xiàn)在的springMVC有一個(gè)注解是RequestMapping,專(zhuān)門(mén)負(fù)責(zé)映射url的,比方說(shuō)需要映射到ProductInputController的 addProduct()這個(gè)方法,只需要在這個(gè)方法上加上一個(gè)注解,如

@RequestMapping(name=”product_input”)

addProduct()

通過(guò)這個(gè)注解,就可以將product_input這個(gè)url映射到addProduct這個(gè)方法了。是不是很簡(jiǎn)單。其實(shí)做的事情都一樣,只不過(guò)是換了一種寫(xiě)法和位置。

感覺(jué)好神奇的樣子,我一開(kāi)始也有這種感覺(jué),直到我了解了原始Servlet是如何將url和處理業(yè)務(wù)的類(lèi)聯(lián)系起來(lái)的,才發(fā)現(xiàn)這個(gè)過(guò)程也沒(méi)有那么神秘,這里推薦一本書(shū)《SpringMVC學(xué)習(xí)指南》 Paul Deck著,適合0基礎(chǔ)的人看,例子很詳細(xì)。

我大概說(shuō)一下url到Controller是怎么回事:

起點(diǎn)是,用戶(hù)通過(guò)HTTP請(qǐng)求了服務(wù)器,那么一定就有URL,比方說(shuō)是http://www.dudu.com/getName,其中g(shù)etName就是我的url,假設(shè)你的servlet是部署在tomcat中的,在web.xml這個(gè)配置文件中,應(yīng)該有url到某個(gè)類(lèi)的關(guān)系,或者通過(guò)別的注解的方法 如@Webservlet(name= “xxController”, urlPatterns = {“product_input”}), 這里意思就是這個(gè)url進(jìn)來(lái)后,把請(qǐng)求交給xxController這個(gè)class去處理,這個(gè)類(lèi)繼承了HttpServlet, 并且重寫(xiě)的doGet方法,你的請(qǐng)求就會(huì)來(lái)到這個(gè)方法里,然后,在方法內(nèi)調(diào)用request.getRequestURI這個(gè)方法,拿到了你的url=getName,之后就是字符串匹配equals,調(diào)用后面具體的類(lèi)。

我們使用框架的原因,就是在開(kāi)發(fā)中,這樣的步驟都是重復(fù)的,而且每次都一樣,所以寫(xiě)框架的人,就把這樣套路式的代碼封裝了, 細(xì)節(jié)都交給他來(lái)處理,我們只要做兩件和自己業(yè)務(wù)相關(guān)的事,一個(gè)是確定url,二是,這個(gè)url指向那個(gè)類(lèi)。寫(xiě)到這里基本把url到Controller這件事說(shuō)完了。這里有兩個(gè)類(lèi)一個(gè)是DispatcherServlet,這個(gè)是SpringMVC框架自帶的,一個(gè)就是你自己處理業(yè)務(wù)的類(lèi),比如是ProductController??刂破鞯拿枷矚g叫XXXController。下面畫(huà)一張圖說(shuō)明這一步

 SpringMVC是什么?

 

四,MVC,先說(shuō)的居然是C,Controller,下面說(shuō)View,就是視圖,展示。用戶(hù)的瀏覽器,看到的都是比較美觀的網(wǎng)頁(yè),這就是HTML,它負(fù)責(zé)來(lái)將苦澀的數(shù)據(jù),展現(xiàn)成各種樣式,讓普通用戶(hù)看起來(lái)也不錯(cuò),而不是一堆JSON數(shù)據(jù)。用戶(hù)的請(qǐng)求進(jìn)來(lái)之后,肯定還是要返回給用戶(hù)頁(yè)面的,這每個(gè)頁(yè)面就是一個(gè)VIEW,view就像一個(gè)網(wǎng)頁(yè)的框架,某個(gè)頁(yè)面的框架是固定的,不同的是其中的數(shù)據(jù)。比方說(shuō)購(gòu)物車(chē)頁(yè)面,就是一個(gè)框架。那你的購(gòu)物車(chē)和我的大體看起來(lái)是一樣的,但其中的具體內(nèi)容不同,因?yàn)橘I(mǎi)的商品不同,而這具體的東西,或叫做數(shù)據(jù),就是Model。現(xiàn)在M和V就有了。

 

下面再串一個(gè)這個(gè)流程,剛才說(shuō)到請(qǐng)求已經(jīng)到了Controller,這個(gè)類(lèi)的作用就是1,選擇適當(dāng)?shù)膙iew返回給用戶(hù),2,組織數(shù)據(jù),即生成Model。網(wǎng)絡(luò)傳輸和信息技術(shù)主要處理的就是數(shù)據(jù),而現(xiàn)在數(shù)據(jù)就放在Model中,或者把放數(shù)據(jù)的地方叫做Model,比如用戶(hù)在請(qǐng)求查詢(xún)用戶(hù)信息,那么Controller做的就是,在數(shù)據(jù)庫(kù)中找到這些信息,然后把信息添加到Model中,然后把Model和對(duì)應(yīng)的View一起返回給DispatcherServlet。 這里繼續(xù)補(bǔ)充上一張圖:

 

 

 SpringMVC是什么?

 

 

 

五,現(xiàn)在DispatcherServlet已經(jīng)拿到Model里的數(shù)據(jù)和該用哪個(gè)View來(lái)展示給用戶(hù)了。

所以會(huì)將Model和View融合,具體就是用Model的數(shù)據(jù)把View的變量都換成具體的值,然后view就變成一個(gè)HTML的頁(yè)面了,最后把這個(gè)HTML返回給用戶(hù),用戶(hù)那邊用瀏覽器來(lái)解釋HTML,看到就是正常的網(wǎng)頁(yè)。 全過(guò)程結(jié)束。

SpringMVC是什么?


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI