模型視圖控制器模型 這是中文名稱
原先是為桌面應用建立的框架,后來轉變成為B/S模型。
經(jīng)典圖如下
說一下CGI,是使用CGI 和apache進行連接,當發(fā)生一個請求的時候,進入apache,即web server,由web server執(zhí)行事先編輯好的CGI程序,由CGI程序讀取databases,由CGI程序把讀取到的dtatBases整合,返回給webserver 再由webserver返回給瀏覽器,實現(xiàn)了該協(xié)議的由php-cgi,但是繼續(xù),每次收到一個請求都會fork一個進程,把cgi進行改良,產(chǎn)生了fast-cgi,即,每次處理完成以后,不在清除掉這個進程,而是保留這個進程。再往后出現(xiàn)了php-fpm,為fastCGI的實現(xiàn),提供了進程管理的功能。其中php-fpm是可以單獨執(zhí)行的,不具有靜態(tài)的文件處理功能,此時加上apahce,用于對靜態(tài)文件進行處理,由于站點過多,在加上nginx進行反向代理,實現(xiàn)負載均衡。php-fpm是可以單獨執(zhí)行的。最后,apache和nginx都可以實現(xiàn)負載均衡,不過由于nginx是事件驅動的所以使用nginx用來做反向代理偏多
另外,還有一種是異步機制,屬于Node.js,即,當事件發(fā)生的時候,入棧,然后,有一個事件環(huán),進行循環(huán)處理,其中,事件環(huán)為單線程的。此為異步
Node中也有對象機制,即,先發(fā)出命名好的事件,事件觸發(fā)之前注冊好的監(jiān)聽器,在Node.js下,需要繼承EventEmitter類,并實例化生成。
PS:事件 != 異步,是在異步函數(shù)執(zhí)行完成以后觸發(fā)事件,基于事件通信的回調機制。
即,后臺程序不需要任何修改,只需要使用不同的視圖,用來呈現(xiàn)出不同的頁面。
mvc有兩個版本,在早期當中,jsp頁面融合了控制器和視圖的功能。即,開發(fā)出一堆jsp頁面,然后一堆java bean,當用戶訪問的時候,訪問jsp的時候,由tomcat生成對象,送入java bean中進行執(zhí)行,由java bean負責業(yè)務處理,包括數(shù)據(jù)庫的讀取,然后返回給瀏覽器。這里呢,jsp負責控制器和視圖,java bean負責業(yè)務處理。
第二個 mvc 只是把jsp和java bean分開了。
在第二個版本當中,視圖和模型徹底分離。
栗子如下,一個數(shù)據(jù)展示界面,從一張表中把數(shù)據(jù)讀取,然后展示到頁面上,其中頁面展示為視圖V,從數(shù)據(jù)庫取得數(shù)據(jù)是模型層M,控制器C是把瀏覽器接收到的請求,執(zhí)行模型層M,執(zhí)行,然后組合視圖V,最后把數(shù)據(jù)返回給客戶端。
圖如下
首先,HTTP協(xié)議發(fā)出請求,然后控制器接收請求,控制器接收請求以后,發(fā)送給,模型層處理,模型層,把數(shù)據(jù)提交給邏輯層,邏輯層和持久層進行連接,持久層用于和數(shù)據(jù)庫,進行一對一,一對多,多對多關系映射,取出數(shù)據(jù)以后,把數(shù)據(jù)返回給邏輯層,進行業(yè)務處理,處理完成以后,返回給模型層,模型層,拿到數(shù)據(jù),返回給控制層,控制層,拿到數(shù)據(jù),控制器,進行組裝視圖層,把組裝好的視圖層,轉換成為瀏覽器可以接收的HTML數(shù)據(jù),然后最后再把數(shù)據(jù)返回給瀏覽器。
上方是MVC的數(shù)據(jù)的流的經(jīng)過
特點,高重用性,低耦合,快速開發(fā),便捷部署。
MVC模塊有以上模塊,為核心控制器,過濾器,攔截器,視圖管理器,模型管理器。
核心控制器
MVC框架入口,接收和反饋HTTP請求。
過濾器
用戶過濾HTTP請求。
攔截器
對進出,進入的數(shù)據(jù)進行攔截
模型管理器
例如session,線程池等
視圖管理工具
對,視圖進行管理。
提供多種語言的視圖
輔助工具
例如,文件管理,對象管理。
數(shù)據(jù)流是先通過核心控制器,然后,流到過濾器,進行表單的過濾,再流入攔截器,對不通過的登錄進行內攔截,業(yè)務代碼寫在模型層中,對業(yè)務進行處理,處理完成以后,返回給控制器,視圖管理器中由jsp文件,對jsp文件進行渲染,返回給客戶端
這是一個目前的大致總結,首先有一個核心控制器,數(shù)據(jù)進入以后,再次進入攔截器,過濾器,過濾器,和攔截器,對于用戶訪問web資源是否具有權限進行驗證,然后再次進入模型層取出數(shù)據(jù),此時通知視圖層進行數(shù)據(jù)更新,最后把視圖層進行返回。
統(tǒng)一都注冊在控制器中。包括視圖管理類,模型管理類。
每次發(fā)生改變的時候,通過調用管理類的方式來管理模型和視圖,并且加載進入內存。
對于訪問資源來說,放置到過濾器和攔截器中。
對于業(yè)務邏輯處理放入模型層中。
對于視圖層和模型層來說,每次控制器通知模型數(shù)據(jù)更改以后,觸發(fā)一個事件,響應到視圖管理類中,視圖管理類對于視圖進行渲染,即生成HTML文件,把生成的HTML文件的URL直接返回給控制器,控制器再次返回給瀏覽器。
對于MVC來說,首先有兩個管理類,即,視圖管理類和模型管理類,注冊在控制器中,控制器基于servlet,每次發(fā)生請求的時候,控制器接收到請求,然后傳遞給攔截器,和過濾器,攔截器和過濾器,用于進行身份驗證,和訪問資源的驗證,然后通過管理類暴露在外的接口,調用模型層,以及書寫在模型層中業(yè)務代碼,包括數(shù)據(jù)庫的讀取,模型層數(shù)據(jù)更新以后,通過觀察者模式,通知視圖層的管理類,對視圖中的數(shù)據(jù)進行渲染成為HTML文件,由JSP文件直接渲染成為HTML文件,涉及到編譯原理的一些知識,最后把生成的URL直接返回給控制器,控制器拿到URL,把URL返回給瀏覽器。
聯(lián)系客服