通過 JSP Model 深入學習 MVC

Web開發者發表於2012-03-01


動態Web程式設計技術的發展歷史

  使用 JSP 技術開發 Web 應用程式, 有兩種架構模型可供選擇. 通常稱為 Model1和 Model2.

  所謂Model 1 就是JSP大行其道的時代,在Model 1模式下,整個Web應用幾乎全部由JSP頁面組成,JSP頁面接收處理客戶端請求,對請求處理後直接做出響應。用少量的JavaBean來處理資料庫連線、資料庫訪問等操作。如下圖:

  Model 1 模式的實現比較簡單,適用於快速開發小規模專案。但從工程化的角度看,它的侷限性非常明顯:JSP頁面身兼View和Controller兩種角色,將控制邏輯和表現邏輯混雜在一起,從而導致程式碼的重用性非常低,增加了應用的擴充套件性和維護的難度。

  早期有大量ASP和JSP技術開發出來的Web應用,這些Web應用都採用了Model 1架構。

  Model 2 模式是基於MVC架構的設計模式。在Model 2架構中,Servlet作為前端控制器,負責接收客戶端傳送的請求,在Servlet中只包含控制邏輯和簡單的前端處理;然後,呼叫後端JavaBean來完成實際的邏輯處理;最後,轉發到相應的JSP頁面處理顯示邏輯。如下圖:

  Model 2下JSP不再承擔控制器的責任,它僅僅是表現層角色,僅僅用於將結果呈現給使用者,JSP頁面的請求與Servlet(控制器)互動,而Servlet負責與後臺的JavaBean通訊。在Model 2模式下,模型(Model)由JavaBean 充當,檢視(View)由JSP頁面充當,而控制器(Controller)則由Servlet充當。

  由於引入了MVC模式,使Model 2具有元件化的特點,更適用於大規模應用的開發,但也增加了應用開發的複雜程度。原本需要一個簡單的JSP頁面就能實現的應用,在Model 2中被分解成多個協同工作的部分,需花更多時間才能真正掌握其設計和實現過程。

  注意  對於非常小型的Web站點,如果後期的更新、維護工作不是特別大,可以使用Model 1的模式來開發應用,而不是使用Model 2的模式。雖然Model 2提供了更好的可擴充套件性及可維護性,但增加了前期開發成本。從某種程度上講,Model 2為了降低系統後期維護的複雜度,卻導致前期開發的更高複雜度。

  MVC並不是Java語言所特有的設計思想,也並不是Web應用所特有的思想,它是所有物件導向程式設計語言都應該遵守的規範。

  MVC思想將一個應用分成三個基本部分:Model(模型)、View(檢視)和Controller(控制器),這三個部分以最少的耦合協同工作,從而提高應用的可擴充套件性及可維護性。

  起初,MVC模式是針對相同的資料需要不同顯示的應用而設計的,其整體的效果如下圖所示。

  在經典的MVC模式中,事件由控制器處理,控制器根據事件的型別改變模型或檢視,反之亦然。具體地說,每個模型對應一系列的檢視列表,這種對應關係通常採用註冊來完成,即:把多個檢視註冊到同一個模型,當模型發生改變時,模型向所有註冊過的檢視傳送通知,接下來,檢視從對應的模型中獲得資訊,然後完成檢視顯示的更新。

  從設計模式的角度來看,MVC思想非常類似於一個觀察者模式,但與觀察者模式存在少許差別:觀察者模式下觀察者和被觀察者可以是兩個互相對等的物件,但對於MVC思想而言,被觀察者往往只是單純的資料體,而觀察者則是單純的檢視頁面。

  概括起來,MVC有如下特點:

  1、多個檢視可以對應一個模型。按MVC設計模式,一個模型對應多個檢視,可以減少程式碼的複製及程式碼的維護量,一旦模型發生改變,也易於維護。
  2、模型返回的資料與顯示邏輯分離。模型資料可以應用任何的顯示技術,例如,使用JSP頁面、Velocity模板或者直接產生Excel文件等。
  3、應用被分隔為三層,降低了各層之間的耦合,提供了應用的可擴充套件性。
  4、控制層的概念也很有效,由於它把不同的模型和不同的檢視組合在一起,完成不同的請求。因此,控制層可以說是包含了使用者請求許可權的概念。
  5、MVC更符合軟體工程化管理的精神。不同的層各司其職,每一層的元件具有相同的特徵,有利於通過工程化和工具化產生管理程式程式碼。
  6、相對於早期的MVC思想,Web模式下的MVC思想則又存在一些變化,因為對於一個應用程式而言,我們可以將檢視註冊給模型,當模型資料發生改變時,即時通知檢視頁面發生改變;而對於Web應用而言,即使將多個JSP頁面註冊給一個模型,當模型發生變化時,模型無法主動傳送訊息給JSP頁面(因為Web應用都是基於請求/響應模式的),只有當使用者請求瀏覽該頁面時,控制器才負責呼叫模型資料來更新JSP頁面。

  注意  MVC思想與觀察者模式有一定的相似之處,但並不完全相同。經典的MVC思想與Web應用的MVC思想也存在一定的差別,引起差別的主要原因是因為Web應用是一種請求/響應模式下應用,對於請求/響應應用,如果使用者不對應用發出請求,檢視無法主動更新自己。

相關文件:詳細介紹JSP技術的兩種架構模型

相關文章