⑴ MVC的工作原理是什麼
MVC的工作原理:
①當用戶在瀏覽器中點擊一個鏈接或者提交一個表單時,那麼就會產生一個請求(request)。當請求離開瀏覽器時,它會攜帶用戶請求的信息。
②請求的第一站到達的是Spring的DispatcherServlet,它是一個前端控制器,工作是將用戶的請求委託給其他的組件(這里是交給Spring MVC的控制器)去處理。這里DispatcherServlet要決定將請求傳給哪一個控制器(Controller)去處理,那麼這時就需要處理器映射(Handler Mapping)了。處理器映射會看請求的URL信息,然後決定將請求交給哪一個控制器去處理。比如說有兩個控制器ControllerA和ControllerB,分別處理後綴名為.html和.jsp送來的請求,那麼當請求者的後綴名為.html時,那麼DispatcherServlet就將請求交給ControllerA進行處理。
③當選擇了一個合適的控制器後,DispatcherServlet就會將請求交給這個控制器去處理。在這個控制器上,用戶的請求將會將用戶提交的一些信息交由控制器處理並等待。然而設計的比較好的控制器本身對信息做很少的處理或者根本不做處理,而是將業務邏輯交給一個或多個伺服器對象(Model)去處理。
④當控制器對用戶請求所攜帶的信息進行處理(或交給模型層處理)後,經常會產生一些其他的需要返回給瀏覽器進行顯示的數據。這些原始數據直接顯示出來顯然是不友好的,那麼就需要視圖(View)來對這些數據進行顯示了。控制器的最後一件事就是將模型數據打包,並且指定產生輸出的視圖的特定名稱,然後它將模型、視圖名稱以及request請求一起發送給DispatcherServlet。所以控制器並沒有與視圖進行耦合,因為傳遞給DispatcherServlet的視圖名稱並不是某一個指定的特殊的文件名稱(如後綴名一定是JSP或其他什麼名稱),它只要是一個可以產生輸出和展示結果的邏輯名稱就可以了。
⑤DispatcherServlet會向一個視圖解析器(ViewResolver)進行請求,視圖解析器可以將邏輯視圖名稱映射到一個特定的視圖顯示文件上面。
⑥現在DispatcherServlet知道哪一個視圖文件可以顯示結果了。該視圖將會利用模板數據產生輸出,這些輸出通過response對象返回給客戶端進行顯示。
⑵ mvc模式的原理
胡亂講一下
MVC說到底,底層還是servlet。
以登錄為例,首先會有頁面,會有action,會有登錄對象。這個頁面就是所謂的V(view,視圖),action一般都被視為C(controler,控制器),最後就是各種各樣的對象M(mole,模型)。
SSH是MVC開發中最被人認知的,但不能說是最好的。
Struts2可以說是一個跨VC的框架,因為他負責頁面的跳轉和邏輯分析。它能夠幫助我們方便快捷地完成這兩部分的開發。
Spring,如果你不太了解的話,像我一樣,那麼你就可以這么理解。一個服務(一般是一個介面),可能會有好多種實現,但是我們為了達到一個目的,只能用其中的一個實現,那麼這時的做法是new一個新的對象,而這個對象是一個介面類型,這個對象實際是一個介面的實現。Spring的好處就是讓我們方便地管理這些實現,一般這是基於配置文件的。
Hibernate,這個是與資料庫底層相關的,它與Mole有很大的對應關系。
Dao,data access object,數據訪問對象,他們是介面,就是把所有的logic介面放在這里。
Service,也是介面,不過這個介面的概念是基於頁面的動作的,例如我想登錄,會有一個Service,但是這個service會涉及好多的logic(包括用戶狀態獲取,用戶許可權獲取,用戶信息獲取),所以說service跟logic的對應關系是一對多的關系。
model,這個更加隨意一下,一般都是對應著資料庫中表的結構,例如用戶表,會對應一個User類等。
最後就是javabean了,其實javabean的定義很廣泛的。
我簡單就我的理解給你介紹一下,formbean就是所謂的頁面Form對象對應著的java端的對象,簡單的說就是頁面有一個name,formBean中就有一個name屬性或者是一個與name相關的屬性。另外一個種就是廣義上的javabean,為了達到某一個目的而設立的一個java類都可以成為一個javabean,它可以包含方法跟屬性。
另外一點建議,如果想研究細一點,先不要看這些框架先看servlet,慢慢的就會明白這么劃分目錄結構的好處了。把它們放到一個包中,也是未嘗不可的,但是亂!
⑶ 如何用php實現自己的MVC
MVC三個字母的含義: M:Model 模型,負責資料庫操作。 V:View 視圖,負責調用Model調取數據,再調用模板,展示出最終效果。 C:Controller 控制器,程序的入口,決定改調用哪個View,並告訴View該做什麼。 下面是一個超級簡單的MVC結構實現: Controller.php include 'Model.php'; include 'View.php'; class Controller { private $model = ''; private $view = ''; public function Controller(){ $this->model = new Model(); $this->view = new View(); } public function doAction( $method = 'defaultMethod', $params = array() ){ if( empty($method) ){ $this->defaultMethod(); }else if( method_exists($this, $method) ){ call_user_func(array($this, $method), $params); }else{ $this->nonexisting_method(); } } public function link_page($name = ''){ $links = $this->model->getLinks(); $this->view->display($links); $result = $this->model->getResult($name); $this->view->display($result); } public function defaultMethod(){ $this->br(); echo "This is the default method. "; } public function nonexisting_method(){ $this->br(); echo "This is the noexisting method. "; } public function br(){ echo ""; } } $controller = new Controller(); $controller->doAction('link_page', 'b'); $controller->doAction(); Model.php class Model { private $database = array( "a" => "hello world", "b" => "ok well done", "c" => "good bye", ); //@TODO connect the database //run the query and get the result public function getResult($name){ if( empty($name) ){ return FALSE; } if( in_array($name, array_keys( $this->database ) ) ){ return $this->database[$name]; } } public function getLinks(){ $links = "Link A "; $links.= "Link B "; $links.= "Link C "; return $links; } } View.php class View { public function display($output){ // ob_start(); echo $output; }
⑷ php中MVC架構的控制器如何獲取底層返回的結果,直接調用報錯
呵呵 你的跳轉是在 類裡面執行的,外面調用方法會在內部跳轉。你如果想 自定義的話就改變 類裡面的方法 就是 下面這個位置
/**************只能在這裡面跳轉***************************/
header("Location:../View/admin_home.php"); 這個位置 不用 改為 return true
header("Location:../View/user_login.php?loginProving=passWordError");這個位置 不用 改為 return false;
上面提交的地方 這里
/*************想在這里處理跳轉***************************/
$LoginProving -> userNameProving($userName,$passWord); 改為 $result= $LoginProving -> userNameProving($userName,$passWord);
這樣就可以判斷是否 登錄成功 了 if( $result){成功跳轉鏈接 }else{ 錯誤跳轉鏈接}
⑸ 什麼MVC框架實現原理
網路永遠是不給力的,不如直接去博客園 看看例子的實現,看看什麼是試圖 什麼是控制器 什麼是模型 什麼是MVC URL路由,WEB 渲染是什麼
⑹ PHP你如何理解 MVC 模式
首先說一下框架,框架:就是別人把一些底層,常用操作.比如數據操作(增,刪,改,查)寫好.你來直接用.其它的功能要自己來做。MVC:設計模式,M
模型,V
顯示,C
控制.現在許多框架都是基於
MVC
來做的把邏輯和顯示分開.比如你要換頁面,只需要改
V
裡面的東西並不需要再去變動程序詳細的東西想要了解的--->黑馬程序員社區--->PHP版塊全部都有,找不到的話官網對話框可以領取
⑺ MVC模式的基本原理
MVC原理
MVC是一種程序開發設計模式,它實現了顯示模塊與功能模塊的分離。提高了程序的可維護性、可移植性、可擴展性與可重用性,降低了程序的開發難度。它主要分模型、視圖、控制器三層。
模型(model)它是應用程序的主體部分,主要包括業務邏輯模塊和數據模塊。模型與數據格式無關,這樣一個模型能為多個視圖提供數據。由於應用於模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復性
視圖(view) 用戶與之交互的界面、在web中視圖一般由jsp,html組成
控制器(controller)接收來自界面的請求 並交給模型進行處理 在這個過程中控制器不做任何處理只是起到了一個連接的作用
MVC的優點
降低代碼耦合性。在MVC模式中,三個層各施其職,所以如果一旦哪一層的需求發生了變化,就只需要更改相應的層中的代碼而不會影響到其他層中的代碼。
有利於分工合作。在MVC模式中,由於按層把系統分開,那麼就能更好的實現開發中的分工。網頁設計人員可進行開發視圖層中的JSP,而對業務熟悉的人員可開發業務層,而其他開發人員可開發控制層。
有利於組件的重用。如控制層可獨立成一個能用的組件,表示層也可做成通用的操作界面。可以為一個模型在運行時同時建立和使用多個視圖。
⑻ php架構,mvc開發模式,php程序員工作~
PHP開發框架背後的思想被稱為「模型—視圖—控制器」(MVC)。MVC是這樣一種架構模式,它隔離了業務邏輯與UI,允許其一改變而另一者不受影響。(也可以說是關注點的隔離)在MVC中,模型負責數據,視圖負責表現,控制器則是程序主體或者說是負責業務邏輯。從本質上說,MVC拆分了一個程序的開發過程,這樣你就可以修改獨立的每一部分,而其他部分不受影響,這是十分重要的,它使得編寫PHP代碼更為快捷簡單
開發者可能出於不同的考慮而使用PHP開發框架,不過首當其沖的原因是為了加速開發過程。相似工程之間的代碼重用能夠節省開發者大量的時間和精力。PHP開發框架內置了預建的模塊,免去了冗長又令人厭煩的編程工作。這樣開發者就能夠把時間活在開發實際程序上,而不是每一次都要為每一個項目重建基礎模塊。
⑼ 關於pHP設計mvc!!!對於mvc 的設計理解我都了解,但是具體操作,寫代碼時是怎樣一個順序,應該從哪開始3Q
我建議你可以下載一個ThinkPHP的框架,這個框架完全是以MVC來完成的,看看其中帶的示例源代碼,估計你會對MVC有個比較明確的認識。