
文章插圖
作為經(jīng)典MVC思想的spring實(shí)現(xiàn),它能夠幫我們開發(fā)靈活的JavaWeb應(yīng)用 。今天我們就來對它動刀,看看它的內(nèi)部是怎么實(shí)現(xiàn)的,我們能不能仿寫一份呢?
首先我們通過一張時序圖來看一下springMVC的運(yùn)行流程 。
springMVC運(yùn)行流程
從上面的時序圖,我們可看到,一個叫dispatcherServlet的家伙十分繁忙,幾乎每一步都有它的參與,他怎么這么忙啊,這就和它的名字有關(guān)
dispatcher /d?s’p?t??/ n. 發(fā)報機(jī),調(diào)度員
它就相當(dāng)于在M-V-C三者之間的郵差,或者說是領(lǐng)導(dǎo),負(fù)責(zé)調(diào)用各個組件 。
我們來假設(shè)一下這個場景:
DispatcherServlet是MVC場景里的老大,而且親力親為,什么事都要他過目審批,這天他收到了一份用戶請求,叫他給出一個網(wǎng)頁頁面 。
他馬上給他的副手HandlerMapping,說:“小劉,你看看這個活,誰來干合適?”小劉HandlerMapping一看員工花名冊有一個叫小張的Controller能夠勝任,小劉就對領(lǐng)導(dǎo)說:“Controller小張能干” 。
這時候,領(lǐng)導(dǎo)DispatcherServlet不能直接找到小張,因?yàn)樾堉回?fù)責(zé)實(shí)現(xiàn)具體業(yè)務(wù),而用戶的要求太抽象,小張看不懂,需要有個人幫他理一理,第一步該做什么,第二步該做什么 。這時候項目經(jīng)理HandlerAdaper就上線了,領(lǐng)導(dǎo)找到項目經(jīng)理說:“幫小張理一理,這個活具體該咋做” 。
項目經(jīng)理三下五除二給整完了,之后,領(lǐng)導(dǎo)拿著處理好的任務(wù),將任務(wù)交給里小張,我們的小張也很爭氣呀,也給干完了,而且,他干的工程不僅有業(yè)務(wù)(Model)還有漂亮的組件(View),不過小張同學(xué)的審美不太好,沒辦法把它們組合到一塊 。于是,領(lǐng)導(dǎo)DispatcherServlet就吭哧吭哧跑到學(xué)美術(shù)的viewRsolver身邊,讓她給渲染一下 。viewRsolver畫技高超,寥寥幾筆渲染出來了一份既有業(yè)務(wù)資料,也很好看的頁面出來 。
至此一個項目完成了,DispatcherServlet就拿著成果(JSP等前端頁面)展示給用戶看,用戶心滿意足,大方的付了錢,于是,大家都有錢拿…
看完了Rod Johnson的springMVC的MVC 流程,里面組件分工明確,各司其職,能夠完成很多復(fù)雜的業(yè)務(wù),但是我們剛開始上手,肯定不能上來就整這么多,因此今天我們搭一個簡單版的,只有領(lǐng)導(dǎo)(DispatcherServlet)和各類業(yè)務(wù)員等 。業(yè)務(wù)員,還是只負(fù)責(zé)具體業(yè)務(wù),其他的活全讓領(lǐng)導(dǎo)干 。
我們的流程:
在我們的流程中 DispatcherServlet領(lǐng)導(dǎo) = 前端控制器 + 映射處理器
好了明確了我們要搭的任務(wù),現(xiàn)在建哥來手把手教學(xué),開搞!
詳細(xì)步驟1.新建webApp骨架的maven工程2.在pox.xml中引入依賴<!– 引入servlet jar –><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!– 引入反射jar包–><dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId><version>0.9.11</version></dependency>
3.新建包如圖所示4.編寫配置文件在resource目錄下編寫配置文件:applicationContext.properties,內(nèi)容為:指定掃描路徑package,我們在這里指定controller所在的包
package=com.cloudwise.controller
5.更新web.xml文件骨架用的還是2.0版本,我們在這里更新為4.0的 。
并且注冊我們的領(lǐng)導(dǎo)MyDispatcherServlet并為其指定配置文件所在位置contextConfigLocation,我們的領(lǐng)導(dǎo)凡事親力親為,在這里讓他攔截所有請求 。
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><display-name>Archetype Created Web Application</display-name><!-- 配置我們自己的前端控制器,MyDispatcherServlet就是一個servlet,攔截前端發(fā)送的請求--><servlet><servlet-name>xxx</servlet-name><servlet-class>com.cloudwise.servlet.MyDispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>applicationContext.properties</param-value></init-param></servlet><servlet-mapping><servlet-name>xxx</servlet-name><!-- 攔截所有請求--><url-pattern>/</url-pattern></servlet-mapping></web-app>6.自定義注解注解在這里的作用就相當(dāng)于給類/方法加上一個小尾巴,我們通過不同的尾巴辨識不同的Controller和Method
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 出新的治理框架 阿富汗總統(tǒng)加尼弟弟宣誓效忠塔利班
- 網(wǎng)頁前端開發(fā) 前端快速開發(fā)框架有哪些
- 詳解ajax框架作用 ajax框架教程
- 簡單快速構(gòu)建后臺管理系統(tǒng) 后臺模板框架的模板
- struts2和springMVC的區(qū)別 struts2配置文件詳解
- 十個前端UI優(yōu)秀框架 前端ui框架有哪些
- 基于ssm框架的圖書管理系統(tǒng) 網(wǎng)站框架模板代碼
- 單點(diǎn)登錄失敗解決措施 單點(diǎn)登錄框架有哪些
- java開發(fā)常用的框架 java框架都有哪些
- 免費(fèi)google賬號注冊 google服務(wù)框架安裝
