- N +

mvc執(zhí)行流程圖,MVC時(shí)序圖

大家好,感謝邀請(qǐng),今天來(lái)為大家分享一下mvc執(zhí)行流程圖的問(wèn)題,以及和MVC時(shí)序圖的一些困惑,大家要是還不太明白的話,也沒(méi)有關(guān)系,因?yàn)榻酉聛?lái)將為大家分享,希望可以幫助到大家,解決大家的問(wèn)題,下面就開(kāi)始吧!

springmvc參數(shù)封裝原理

(1)前端控制器DispatcherServlet(配置即可)

功能:中央處理器,接收請(qǐng)求,自己不做任何處理,而是將請(qǐng)求發(fā)送給其他組件進(jìn)行處理。DispatcherServlet是整個(gè)流程的控制中心。

(2)處理器映射器HandlerMapping(配置即可)

功能:根據(jù)DispatcherServlet發(fā)送的url請(qǐng)求路徑查找Handler

常見(jiàn)的處理器映射器

:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping,

ControllerClassNameHandlerMapping,DefaultAnnotationHandlerMapping(不建議使用)

(3)處理器適配器HandlerAdapter(配置即可)

功能:按照特定規(guī)則(HandlerAdapter要求的規(guī)則)去執(zhí)行Handler。

通過(guò)HandlerAdapter對(duì)處理器進(jìn)行執(zhí)行,這是適配器模式的應(yīng)用,通過(guò)擴(kuò)展多個(gè)適配器對(duì)更多類型的處理器進(jìn)行執(zhí)行。

常見(jiàn)的處理器適配器

:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter,AnnotationMethodHandlerAdapter

(4)處理器Handler即Controller(程序猿編寫(xiě))

功能:編寫(xiě)Handler時(shí)按照HandlerAdapter的要求去做,這樣適配器才可以去正確執(zhí)行Handler。

(5)視圖解析器ViewReslover(配置即可)

功能:進(jìn)行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖。

ViewResolver負(fù)責(zé)將處理結(jié)果生成View視圖,ViewResolver首先根據(jù)邏輯視圖名解析成物理視圖名即具體的頁(yè)面地址,再生成View視圖對(duì)象,最后對(duì)View進(jìn)行渲染將處理結(jié)果通過(guò)頁(yè)面展示給用戶。

springmvc框架提供了多種View視圖類型,如:jstlView、freemarkerView、pdfView...

(6)視圖View(程序猿編寫(xiě))

View是一個(gè)接口,實(shí)現(xiàn)類支持不同的View類型(jsp、freemarker、pdf...)

springmvc的工作流程是什么

spring工作的流程

流程如下:

1、用戶發(fā)起請(qǐng)求到前端控制器(DispatcherServlet),該控制器會(huì)過(guò)濾出哪些請(qǐng)求可以訪問(wèn)Servlet、哪些不能訪問(wèn)。就是url-pattern的作用,并且會(huì)加載springmvc.xml配置文件。

2、前端控制器會(huì)找到處理器映射器(HandlerMapping),通過(guò)HandlerMapping完成url到controller映射的組件,簡(jiǎn)單來(lái)說(shuō),就是將在springmvc.xml中配置的或者注解的url與對(duì)應(yīng)的處理類找到并進(jìn)行存儲(chǔ),用map<url,handler>這樣的方式來(lái)存儲(chǔ)。

3、HandlerMapping有了映射關(guān)系,并且找到url對(duì)應(yīng)的處理器,HandlerMapping就會(huì)將其處理器(Handler)返回,在返回前,會(huì)加上很多攔截器。

4、DispatcherServlet拿到Handler后,找到HandlerAdapter(處理器適配器),通過(guò)它來(lái)訪問(wèn)處理器,并執(zhí)行處理器。

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ì)象中存放視圖的名稱進(jìn)行查找,找到對(duì)應(yīng)的頁(yè)面形成視圖對(duì)象

9、返回視圖對(duì)象到前端控制器。

10、視圖渲染,就是將ModelAndView對(duì)象中的數(shù)據(jù)放到request域中,用來(lái)讓頁(yè)面加載數(shù)據(jù)的。

11、通過(guò)第8步,通過(guò)名稱找到了對(duì)應(yīng)的頁(yè)面,通過(guò)第10步,request域中有了所需要的數(shù)據(jù),那么就能夠進(jìn)行視圖渲染了。最后將其返回即可。

puremvc對(duì)于Unity來(lái)講是否合適,是否過(guò)度設(shè)計(jì)

PureMVC和Unity3D的UGUI制作一個(gè)簡(jiǎn)單的員工管理系統(tǒng)實(shí)例運(yùn)行實(shí)例演示.png

前言:

1.關(guān)于PureMVC:

MVC框架在很多項(xiàng)目當(dāng)中擁有廣泛的應(yīng)用,很多時(shí)候做項(xiàng)目前人開(kāi)坑開(kāi)了一半就消失了,后人為了填補(bǔ)各種的坑就遭殃的不得了。嘛,程序猿大家都不喜歡像文案策劃一樣組織文字寫(xiě)東西,也不喜歡看別人留下不清不楚的文檔,還不如看代碼來(lái)得實(shí)在。剛開(kāi)始新人看代碼是看得頭暈,因?yàn)檫@樣那樣的東西不一定能完全猜得透。而老人家就算有經(jīng)驗(yàn)和閱歷,也沒(méi)有這么多的體力去看一個(gè)龐大而又復(fù)雜的糟糕項(xiàng)目。因?yàn)檫@種需求,Unity3D的程序猿就統(tǒng)一組織起來(lái),想做一個(gè)完整規(guī)范的程序框架,而這時(shí),PureMVC就誕生了。我個(gè)人喜歡PureMVC的原因也很簡(jiǎn)單,因?yàn)樗?jiǎn)單粗暴,和Unity3D之間沒(méi)有依賴性,加上又開(kāi)源,真的遇到Bug能拿到源代碼來(lái)調(diào)試也是很容易執(zhí)行的。Unity3D應(yīng)用商店還有一個(gè)同類產(chǎn)品叫uFrameGameFramework,它對(duì)Unity版本有著依賴,拖視圖雖然方便,但是一旦出bug真的改得夠嗆的,所以不推薦使用它。下文便是使用PureMVC和Unity3D的UGUI制作一個(gè)簡(jiǎn)單的員工管理系統(tǒng)實(shí)例。

2.通過(guò)MVC模式在Unity項(xiàng)目當(dāng)中應(yīng)用的特別提醒:

(1)Unity3D是基于組件設(shè)計(jì)的,如果沒(méi)有好的規(guī)劃,組件之間會(huì)產(chǎn)生復(fù)雜的調(diào)用關(guān)系,導(dǎo)致組件之間復(fù)雜的依賴,從而破壞了整個(gè)系統(tǒng)結(jié)構(gòu),因此需要設(shè)計(jì)時(shí)確定組件的層次關(guān)系,確保依賴關(guān)系只存在于下層對(duì)上層。而這個(gè)是業(yè)務(wù)邏輯設(shè)計(jì)問(wèn)題,PureMVC幫不了你。(2)僅僅用上MVC,解決不了什么問(wèn)題,或許解決了1%,剩下的99%就被挪到了MVC的C里,當(dāng)你慶祝MVC竣工時(shí),99%的問(wèn)題在那里默默的微笑的看著你。(話說(shuō)以前寫(xiě)PHP的CI框架時(shí)候,一堆東西扔到XxxAction.Class.php里面,發(fā)現(xiàn)和擺的亂七八糟的架構(gòu)沒(méi)區(qū)別,只是大家都習(xí)慣了這套框架的規(guī)矩,看代碼找某個(gè)東西稍微好找而已,本質(zhì)上還是考驗(yàn)基本功和對(duì)項(xiàng)目的熟悉程度的,23333)

3.PureMVC通過(guò)4種pattern實(shí)現(xiàn)隔離變化:

(1)facade非常適合將UI界面對(duì)游戲數(shù)據(jù)的依賴解耦,將UI操作數(shù)據(jù)的請(qǐng)求封裝在facade接口里面,同時(shí)數(shù)據(jù)變化對(duì)UI的影響可以通過(guò)notification事件通知來(lái)實(shí)現(xiàn),該模式應(yīng)用得非常常見(jiàn)。(2)command模式統(tǒng)一對(duì)對(duì)象的操作,將鍵盤(pán)輸入,網(wǎng)絡(luò)輸入輸出統(tǒng)一成command來(lái)操控游戲?qū)ο蟆?3)proxy維護(hù)數(shù)據(jù),提供某塊數(shù)據(jù)統(tǒng)一的初始化,訪問(wèn)和修改接口。(4)mediator沒(méi)怎么用過(guò),我們的游戲中的UI界面每次變化一般都是整體更新的,不常用局部更新。以上4中pattern請(qǐng)務(wù)必牢牢記住,請(qǐng)務(wù)必牢牢記住,請(qǐng)務(wù)必牢牢記住。重要的事情要說(shuō)3便。

4.PureMVC的流程示意圖

(1)在puremvc中,model/view/controller統(tǒng)一是由Facade類的單件實(shí)例來(lái)統(tǒng)籌管理的。(2)PureMVC的基本流程:?jiǎn)?dòng)PureMVC—>建立Mediator來(lái)操作視覺(jué)元素(按鈕與文本框)—>點(diǎn)擊按鈕發(fā)送Notification->文本框接收Notification改變內(nèi)容。(3)大致流程可理解為:通過(guò)Facade類的單件實(shí)例(即:統(tǒng)一的門(mén)面)啟動(dòng)puremvc環(huán)境,啟動(dòng)同時(shí)注冊(cè)Command對(duì)象(相當(dāng)于asp.netmvc中的controller),然后Command通過(guò)與之關(guān)聯(lián)的facade(即前面的單件實(shí)例)來(lái)注冊(cè)Mediator(中介者:用于把View與Command聯(lián)系起來(lái))。(4)當(dāng)UI界面(即View)上有動(dòng)靜時(shí)(比如按鈕點(diǎn)擊了之類),與之關(guān)聯(lián)的Mediator(中介者)會(huì)發(fā)送通知給facade,然后facade會(huì)調(diào)用command對(duì)象執(zhí)行相關(guān)的處理。(即:消息響應(yīng))

PureMVC示意圖.png

一.引入PureMVC的插件

1.下載PureMVC

請(qǐng)?jiān)L問(wèn)地址https://github.com/PureMVC/puremvc-csharp-standard-framework/wiki

安裝

2.把PureMVC.DotNET.35.dll放到Plugins里面就好了。

QA

3.這里有一個(gè)很簡(jiǎn)單的基本案例可以參考一下http://www.open-open.com/lib/view/open1452657515480.html

二.動(dòng)手配置文件

1.需要完成的實(shí)例如下:實(shí)現(xiàn)的界面效果.png2.具體實(shí)現(xiàn)的目標(biāo):

(1)在Scripts文件夾下,分別設(shè)置模型、視圖、控制器對(duì)應(yīng)的文件夾Model、View、Controller,分別放置處理數(shù)據(jù)模型的腳本、處理顯示視圖的腳本、處理邏輯控制的腳本。(2)如界面,一個(gè)Unity3D和UGUI制作的簡(jiǎn)單員工管理系統(tǒng),EmployeeAdmin,其中員工界面Users顯示有哪些員工在登記范圍內(nèi),而New和Delete分別是添加和刪除某個(gè)員工的信息。然后下面的員工信息界面UserProfile則是對(duì)員工信息的一個(gè)具體編輯和修正。

三.主要實(shí)現(xiàn)步驟

1.啟動(dòng)文件AppFacade.cs作為PureMVC框架的入口文件。2.對(duì)PureMVC需要處理的事件用EventsEnum.cs存放3.然后在Unity的場(chǎng)景中創(chuàng)建一個(gè)MainUI.cs文件,掛在需要啟動(dòng)PureMVC的組件上。就可以啟動(dòng)了。4.對(duì)Controller部分進(jìn)行處理

然后我們對(duì)執(zhí)行邏輯的處理事件進(jìn)行補(bǔ)充。新建一個(gè)文件夾Controller,暫時(shí)先放置StartupCommand.cs和DeleteUserCommand.cs。處理上述所說(shuō)的邏輯事件首先,處理啟動(dòng)事件

其次,處理刪除用戶事件

5.對(duì)Model部分進(jìn)行處理

然后是對(duì)Model模型數(shù)據(jù)的定義哈,首先要記錄的信息用UserVO來(lái)表示

接著對(duì)操作數(shù)據(jù)的UserProxy進(jìn)行補(bǔ)充

6.接下來(lái)對(duì)VIew部分進(jìn)行實(shí)現(xiàn)

顯示用戶界面列表的UserList和填寫(xiě)用戶具體信息的UserForm列表單條數(shù)據(jù)部分

用戶列表部分

用戶個(gè)人信息部分

最后,對(duì)局部更新UI的行為進(jìn)行完善Mediator

補(bǔ)充,UI的選擇部分

//[lzh]usingUnityEngine;usingUnityEngine.UI;usingUnityEngine.Events;usingSystem.Collections;

publicclassToggleEvent:UnityEvent<Toggle>{}

[RequireComponent(typeof(ToggleGroup))]publicclassUGUI_MyToggleGroup:MonoBehaviour{publicToggleGrouptoggleGroup;publicToggleEventonToggleChange=newToggleEvent();

}

作者:小小酥XX鏈接:http://www.jianshu.com/p/904b36ad37e2來(lái)源:簡(jiǎn)書(shū)著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

springmvc原理及流程

第一步:用戶發(fā)起請(qǐng)求到前端控制器(DispatcherServlet)

第二步:前端控制器請(qǐng)求處理器映射器(HandlerMappering)去查找處理器(Handle):通過(guò)xml配置或者注解進(jìn)行查找

第三步:找到以后處理器映射器(HandlerMappering)像前端控制器返回執(zhí)行鏈(HandlerExecutionChain)

第四步:前端控制器(DispatcherServlet)調(diào)用處理器適配器(HandlerAdapter)去執(zhí)行處理器(Handler)

第五步:處理器適配器去執(zhí)行Handler

第六步:Handler執(zhí)行完給處理器適配器返回ModelAndView

第七步:處理器適配器向前端控制器返回ModelAndView

第八步:前端控制器請(qǐng)求視圖解析器(ViewResolver)去進(jìn)行視圖解析

第九步:視圖解析器像前端控制器返回View

第十步:前端控制器對(duì)視圖進(jìn)行渲染

第十一步:前端控制器向用戶響應(yīng)結(jié)果

spring mvc流程詳解

1、首先創(chuàng)建父容器(AnnotationConfigWebApplicationContext),通過(guò)自定義的getRootConfigClasses()拿到配置類,并注冊(cè)到父容器中。

2、通過(guò)父容器作為參數(shù)創(chuàng)建ContextLoaderListener監(jiān)聽(tīng)器。并添加到servletContext(Tomcatservlet容器)。

3、通過(guò)自定的getServletConfigClasses()方法拿到MVC的配置類創(chuàng)建子容器,并把配置類注冊(cè)到子容器中。

4、創(chuàng)建DispatcherServlet,并將DispatcherServlet添加到servletContext的Servlet容器中去。

5、設(shè)置dispatcherServlet相關(guān)屬性(啟動(dòng)時(shí)加載,設(shè)置映射路徑)。

好了,文章到此結(jié)束,希望可以幫助到大家。

返回列表
上一篇:
下一篇: