楊靜
摘要:MVC(Model-View-Controller)設計模式是現(xiàn)代軟件設計中一種非常重要的設計模式,也是WEB系統(tǒng)中常用的一種經(jīng)典模式,它實現(xiàn)了界面顯示與業(yè)務邏輯的分離。為了提高基于WEB系統(tǒng)中代碼的可重復性、可維護性、可移植性和系統(tǒng)性能的穩(wěn)定性,從數(shù)據(jù)庫訪問技術(shù)、XML技術(shù)和DAO設計模式的角度,提出一種MVC改進模式,并闡述了基于此模式進行開發(fā)的技術(shù)和原理。
關(guān)鍵詞:MVC;Model;設計模式;Java Web
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2014)28-6668-04
1 MVC設計模式
MVC是一種經(jīng)典的程序設計概念,此模式將應用程序分成3個部分,分別是模型層(Model)、視圖層(View)、控制層(Controller),其關(guān)系如圖1所示:
1.1 模型層(Model)
模型層是應用程序的核心部分,主要由JavaBean組件來充當,可以是一個實體對象或一種業(yè)務邏輯。負責表達和訪問數(shù)據(jù),執(zhí)行商業(yè)邏輯和操作,維護應用程序狀態(tài)。在MVC 模型中,它控制視圖的表現(xiàn)結(jié)果。它采用面向?qū)ο蟮姆椒ǎ?將問題領域中的對象抽象為應用程序?qū)ο?。在這些抽象的對象中封裝了對象的屬性和這些對象所隱含的邏輯。模型可以接收來自視圖的查詢并做出響應,在模型的數(shù)據(jù)變化的時候,它將通知視圖并提供后者訪問自身狀態(tài)的能力,視圖將根據(jù)模型的變化來更新自己,同時控制器也可以訪問模型的功能函數(shù)以完成相關(guān)的任務[1] 。
1.2 視圖層(View)
視圖層提供應用程序與用戶之間的交互界面。它從模型中得到數(shù)據(jù)并按要求顯示出來,當模型中的數(shù)據(jù)發(fā)生變化時,視圖從模型中得到通知自動更新視圖;它也可以將用戶輸入的信息傳送給控制器。在MVC模式中,這一層并不包含任何的業(yè)務邏輯,僅僅提供一種與用戶交互的視圖,在Web應用中有JSP、HTML界面充當。
1.3 控制層(Controller)
控制層用于對程序中的請求進行控制,起到一種宏觀調(diào)控的作用,它可以通知容器選擇什么樣的視圖、什么樣的模型組件,在Web應用中由Servlet充當。
2 基于JSP的MVC設計模式
JSP(Java Server Pages)是由Sun公司倡導、許多公司參與建立的動態(tài)網(wǎng)頁技術(shù)標準。它在HTML代碼中嵌入Java代碼片段(Scriptlet)和JSP標簽,構(gòu)成JSP網(wǎng)頁。在接收到用戶請求時,服務器會處理Java代碼片段,然后生成處理結(jié)果的HTML頁面返回給客戶端,客戶端的瀏覽器將呈現(xiàn)最終的頁面效果。JSP頁面負責數(shù)據(jù)顯示、業(yè)務邏輯、頁面控制等所有的工作,這給Web設計帶來了強耦合,維護困難,開發(fā)人員分工不明確,程序處理邏輯發(fā)雜等一系列問題。為了解決這種問題,Sun公司制定了兩種設計模式,模式一(Model1)和模式二(Model2)。Model1設計模式中,主要分兩層,視圖層和模型層。圖2稱之為模式一,雖然模式一實現(xiàn)了頁面顯示和業(yè)務邏輯的分離,但是在JSP頁面中不僅需要編寫顯示,而且很多業(yè)務邏輯、流程控制和調(diào)用JavaBean的程序代碼都出現(xiàn)在JSP頁面中,當業(yè)務邏輯非常復雜時,大量的內(nèi)嵌代碼會使得整個頁面程序變得異常復雜,使整個項目再維護的時候顯得非常困難。采用Model1模式開發(fā)小型項目非常的方便,每組頁面實現(xiàn)一個功能,當需要對某個功能進行修改時,需要修改很多地方,這樣不利用功能的擴展和更新。
為了解決模式一種的緊耦合、復用性差、維護成本高的缺點,此時提出了Model2模式,如圖3所示。該圖表示的是一種把JSP與Servlets聯(lián)合使用來實現(xiàn)動態(tài)內(nèi)容服務的方法,即 MVC 模式。它可以很好地表達用戶與系統(tǒng)的交互模式以及整個系統(tǒng)的程序架構(gòu)模式。在該模式中,JSP充當視圖層,主要負責視圖的顯示servlet充當控制層,控制分發(fā)用戶的請求,根據(jù)用戶的請求,調(diào)用相應的業(yè)務Bean,并將結(jié)果返回給適當?shù)捻撁孢M行顯示,JavaBean充當模型層,主要負責業(yè)務邏輯的實現(xiàn),因此在構(gòu)建 Web 應用,采用Model2模式具有顯著的優(yōu)勢。
3 改進的MVC模式
采用Model2模式開發(fā)項目時,在業(yè)務層中主要封裝了實體Bean和業(yè)務Bean,實體Bean主要用來封裝實體對象,而業(yè)務Bean主要是一些關(guān)于對數(shù)據(jù)庫的操作。此時在業(yè)務Bean就會涉及到數(shù)據(jù)庫的連接和關(guān)閉,當在使用的過程中,如果頻繁的打開和關(guān)閉數(shù)據(jù)庫是非常耗時和浪費系統(tǒng)資源的,此時我們可以在業(yè)務層中加入一個數(shù)據(jù)庫連接池,避免了數(shù)據(jù)庫頻繁的打開和關(guān)閉,提高了系統(tǒng)性能。當一個項目的業(yè)務比較復雜時,此時在Servlet中不僅有一些流程控制代碼和業(yè)務代碼,還有大量的數(shù)據(jù)處理代碼,此時應該盡量減少在Servlet中的代碼,只讓Servlet做接收數(shù)據(jù),轉(zhuǎn)發(fā)數(shù)據(jù)功能,其它的事情放到外面去做,為了實現(xiàn)該功能,將在Servlet中對數(shù)據(jù)的一些處理操作代碼單獨封裝到Service層中,Servlet接收到用戶請求后,根據(jù)請求的目標,直接跳轉(zhuǎn)到對應的Service中,在Service中負責對數(shù)據(jù)的處理和調(diào)用相應的業(yè)務層。其實現(xiàn)流程圖如圖4所示。
4 基于MVC模式登陸模塊的實現(xiàn)
現(xiàn)在結(jié)合登陸模塊的開發(fā),介紹MVC的在Java Web中的具體實現(xiàn)步驟,從而加深對MVC設計的理解。用戶填寫登陸信息的界面和通過驗證并返回信息的界面都為視圖(View);當用戶填寫的信息通過Form表單提交后,此時需要根據(jù)action跳轉(zhuǎn)到指定的控制器(Controller),而此控制器主要是通過Servlet完成,Servlet需要在web.xml中進行配置;通過控制器調(diào)用模型層(Model),連接數(shù)據(jù)庫,驗證輸入信息是否在數(shù)據(jù)庫中存在。在此整個模塊所涉及到的程序清單如下表一各模塊的表述:
在數(shù)據(jù)庫連接時,通常采用JDBC技術(shù),此技術(shù)作為一種數(shù)據(jù)庫訪問技術(shù),具有簡單易用的優(yōu)點。但使用這種模式進行Web應用程序開發(fā),存在很多問題:首先,每一次Web請求都要建立一次數(shù)據(jù)庫連接,而建立連接是一個費時并且耗費內(nèi)存資源;其次,對于每一次數(shù)據(jù)庫連接,使用完后都得斷開,否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會導致數(shù)據(jù)庫系統(tǒng)中的內(nèi)存泄漏,最終將不得不重啟數(shù)據(jù)庫。因此,這種開發(fā)不能控制被創(chuàng)建的連接對象數(shù),系統(tǒng)資源會被毫無顧及的分配出去,如連接過多,也可能導致內(nèi)存泄漏,服務器崩潰。此時我們采用數(shù)據(jù)庫連接池進行數(shù)據(jù)庫的打開和關(guān)閉。數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個“緩沖池”,預先在緩沖池中放入一定數(shù)量的連接,當需要建立數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。在配置數(shù)據(jù)庫連接池時需要修改Tomcat中的server.xml和項目中WEB-INF下的web.xml文件,再在程序中獲得已有連接。
在整個MVC設計中Model是其核心部分, 對于用戶登陸模塊,需要將輸入的數(shù)據(jù)或從數(shù)據(jù)庫中讀取的數(shù)據(jù)封裝到User類,從而各個模塊都能方便的使用該JavaBean對象了,而JavaBean在封裝的時候只需要書寫它的getXxx和setXxx方法就可以了,作為Model最重要的就是如何設計一個好的DAO模式來對數(shù)據(jù)庫進行操作,為了以后能夠更好的進行功能的擴充,在DAO組件中先定義一個UserDAO接口,然后定義接口的UserDAOImpl實現(xiàn)類,在接口的實現(xiàn)類中定義的各種方法來實現(xiàn)對數(shù)據(jù)的操作,但不負責數(shù)據(jù)庫的連接和關(guān)閉操作,而要完成這一操作主要是通過代理來完成,并調(diào)用真實主題,通過一個DAOFactory工廠實現(xiàn)DAO的實例。部分代碼如下:
接口的實現(xiàn)類:
陸流程圖
5 結(jié)束語
采用MVC模式清晰將表達和內(nèi)容進行了分離,開發(fā)人員負責Servlet和JavaBean,網(wǎng)頁設計人員負責JSP頁面的開發(fā),分工明確,非常適合大項目的開發(fā),同時采用該模式開發(fā)設計清晰,獨立性強,易擴充,易維護等優(yōu)點,使各類人員都可以更加專注完成自己的工作,在Web開發(fā)中有顯著的優(yōu)勢。
參考文獻:
[1] 雷鈞.MVC 設計模式在J2EE平臺上的應用[J]. 微計算機信息,2006,22(7):45-48.
[2] 萬健,劉建華.基于MVC模式的JSP技術(shù)開發(fā)WebGIS[J].工程地球物理學報,2009,6(2):241-243.
[3] 范蕓,范慧霞. JSP動態(tài)網(wǎng)站開發(fā)基礎與上機指導[M].北京:清華大學出版社, 2010:245.