[摘要] 隨著開(kāi)源軟件的興起,各種框架也紛紛出現(xiàn),在實(shí)際軟件開(kāi)發(fā)中運(yùn)用這些框架,大大降低了J2EE開(kāi)發(fā)的復(fù)雜度和難度,降低了開(kāi)發(fā)成本,本文闡述了基于MVC模型的JAVAWeb應(yīng)用軟件開(kāi)發(fā)模式,并結(jié)合一個(gè)實(shí)例討論如何設(shè)計(jì)基于MVC框架的應(yīng)用,同時(shí)也分析了使用框架開(kāi)發(fā)web應(yīng)用的優(yōu)勢(shì)。
[關(guān)鍵詞] Model(模型)View(視圖)Controller(控制器)MVC
一、MVC模式
將JSP頁(yè)面中嵌入的流程控制代碼和部分的邏輯處理代碼提取出來(lái),放到一個(gè)單獨(dú)的角色中,這個(gè)角色就是控制器角色了。這樣的架構(gòu)就符合MVC架構(gòu)模式,MVC即模型——視圖——控制器(Model-View-Control)。
MVC架構(gòu)有助于將應(yīng)用程序分割成若干邏輯部件,使程序設(shè)計(jì)變得更加容易。MVC架構(gòu)提供了一種按功能參各種對(duì)象進(jìn)行分割的方法,其目的是為了將各對(duì)象間的耦合程序降至最低。MVC框架原本是為了將傳統(tǒng)的輸入(input)、處理(processing)和輸出(output)任務(wù)運(yùn)用到圖形化用戶交互模型中而設(shè)計(jì)的,但是,將這些概念運(yùn)用到基于Web的企業(yè)級(jí)多層應(yīng)用領(lǐng)域也是很適合的。
圖1MVC模型、視圖、控制器的關(guān)系圖
在一個(gè)MVC架構(gòu)中,一個(gè)應(yīng)用被分成三個(gè)部分,模型(Model)、視圖(View)和控制器(Control)。
模型代表應(yīng)用程序的數(shù)據(jù)以用于訪問(wèn)控制和修改這些數(shù)據(jù)的業(yè)務(wù)規(guī)則。當(dāng)模型發(fā)生變化時(shí),它會(huì)通知視圖,并為視圖提供查詢模型相關(guān)狀態(tài)的能力。同時(shí),它也為控制器提供訪問(wèn)封閉在模型內(nèi)部的應(yīng)用程序功能的能力。
視圖用開(kāi)組織模型的內(nèi)容。它從模型那里獲得數(shù)據(jù)并指定這些數(shù)據(jù)如何表現(xiàn)。當(dāng)模型變化時(shí),視圖負(fù)責(zé)維護(hù)數(shù)據(jù)表現(xiàn)的一致性。視圖同時(shí)將用戶的請(qǐng)求通知控制器。
控制器定義了應(yīng)用程序的行為。它負(fù)責(zé)對(duì)來(lái)自視圖的用戶請(qǐng)求進(jìn)行解釋,并把這些請(qǐng)求映射成相應(yīng)的行為,這些行為由模型負(fù)責(zé)實(shí)現(xiàn)。在獨(dú)立運(yùn)行的GUI客戶端,用戶的請(qǐng)求可能是一些鼠標(biāo)單擊或是菜單選擇操作。在一個(gè)WEB應(yīng)用程序中,它們的表現(xiàn)形式可能是一些來(lái)自客戶端GET或POST的HTTP請(qǐng)求。圖1描述了在MVC應(yīng)用程序中模型、視圖、控制器三部分的關(guān)系。
在這種開(kāi)發(fā)模式下,控制器的角色由Servlet實(shí)現(xiàn),視圖的角色由Jsp頁(yè)面實(shí)現(xiàn),模型的角色由JavaBean來(lái)實(shí)現(xiàn),該模型的架構(gòu)圖如圖2所示。
圖2JSP開(kāi)發(fā)模型
Servlet充當(dāng)控制的角色,它接受請(qǐng)求,并且根據(jù)請(qǐng)求信息將它們分發(fā)給適當(dāng)?shù)腏SP頁(yè)面來(lái)產(chǎn)生響應(yīng)。Servlet控制器還根據(jù)JSP視圖的需求生成JavaBean的實(shí)例并輸出給JSP環(huán)境。JSP視圖可以通過(guò)直接調(diào)用JavaBean實(shí)例的方法或使用
二、基于MVC框架的論壇功能的實(shí)現(xiàn)
論壇是電子商務(wù)網(wǎng)站中一種常見(jiàn)的功能,它為上網(wǎng)用戶提供了一個(gè)自由的討論區(qū)。用戶可以根據(jù)需要在論壇上發(fā)表文章,提出問(wèn)題并表達(dá)自己的觀點(diǎn),俗稱發(fā)帖子或灌水。與此同時(shí),上網(wǎng)用戶也可以在論壇中瀏覽其他人發(fā)表文章,并能對(duì)該文章進(jìn)行回復(fù)。一個(gè)典型的論壇系統(tǒng)一般應(yīng)提供如下功能:會(huì)員管理、討論區(qū)文章查閱、發(fā)表新文章、后臺(tái)管理。
運(yùn)用MVC框架實(shí)現(xiàn)論壇,首先把應(yīng)用分解為模型、視圖和控制器來(lái)實(shí)現(xiàn),這樣就將業(yè)務(wù)邏輯和表現(xiàn)層分開(kāi),提高軟件可擴(kuò)展性和良好的邏輯性,改變了傳統(tǒng)Web開(kāi)發(fā)設(shè)計(jì)模式。下面將以論壇中用戶登陸為例按照MVC架構(gòu)來(lái)詳述實(shí)現(xiàn)過(guò)程。
1.創(chuàng)建視圖組件
在視圖中主要包括兩個(gè)組件:用戶登錄頁(yè)面Login.jsp,登錄失敗頁(yè)面error.jsp;是用戶登錄失敗后顯示的頁(yè)面。它們都保存在Web應(yīng)用目錄xxx下。
2.創(chuàng)建模型組件
模型組件文件UserInfo.java 是處理業(yè)務(wù)邏輯的JavaBean, 封裝了與論壇用戶相關(guān)的所有信息,同時(shí)也定義了所有與論壇用戶信息處理相關(guān)的方法。例如檢查用戶身份的方法以及查找、刪除、編輯、存儲(chǔ)用戶信息等。通過(guò)Action類派生的子類LoginAction訪問(wèn)UserInfo.java實(shí)現(xiàn)對(duì)業(yè)務(wù)邏輯的處理。注意業(yè)務(wù)邏輯層對(duì)應(yīng)的類所在的包應(yīng)該部署在xxx/WEB-INF/classes下。
3.創(chuàng)建控制器組件
控制器組件作為整個(gè)MVC架構(gòu)的控制中心,包括了ActionServlet、Action Bean、ActionForm Bean、以及相關(guān)配置文件web.xml及資源包。
(1)聲明及定義LoginActionForm.java
該Javabean用于獲取用戶登錄頁(yè)面提交的表單數(shù)據(jù)。注意ActionFormBean中屬性名稱一定要對(duì)應(yīng)用戶表示層JSP頁(yè)面中的表單元素名稱及超鏈接參數(shù)名。
(2)聲明及定義LoginAction.java
LoginAction負(fù)責(zé)處理客戶端提交請(qǐng)求,其主要功能是依據(jù)接收到的不同請(qǐng)求,通過(guò)LoginActionForm中得到對(duì)應(yīng)的提交表單數(shù)據(jù),調(diào)用業(yè)務(wù)邏輯層中對(duì)應(yīng)的UserInfo.java進(jìn)行處理。最終將結(jié)果傳給用戶表示層JSP頁(yè)面,顯示在用戶面前。
(3)配置文件定義
web.xml主要實(shí)現(xiàn)了對(duì)ActionServlet進(jìn)行配置如下。
< servlet-class>ActionServlet
三、結(jié)束語(yǔ)
從某種意思上講,MVC實(shí)現(xiàn)了Web層的應(yīng)用框架,是一個(gè)具有良好擴(kuò)展性和不斷完善的框架,利用這種應(yīng)用框架不但能縮短開(kāi)發(fā)時(shí)間,還能夠?qū)崿F(xiàn)框架和代碼的重用,特別是當(dāng)應(yīng)用有著較復(fù)雜的邏輯,并且返回的視圖也不同時(shí),該種方式是首先。
本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。