前言:想要寫(xiě)出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇mvc框架范文,相信會(huì)為您的寫(xiě)作帶來(lái)幫助,發(fā)現(xiàn)更多的寫(xiě)作思路和靈感。
(中國(guó)礦業(yè)大學(xué)〈北京〉機(jī)電與信息工程學(xué)院,中國(guó) 北京 100083)
【摘要】一個(gè)好的設(shè)計(jì)模式能夠有效地建立系統(tǒng)結(jié)構(gòu),降低系統(tǒng)復(fù)雜度。模型-視圖-控制器(mvc)就是一個(gè)框架級(jí)的設(shè)計(jì)模式,它可以分離數(shù)據(jù)訪問(wèn)和數(shù)據(jù)表現(xiàn),讓開(kāi)發(fā)人員可以開(kāi)發(fā)一個(gè)可伸縮性強(qiáng)的、便于擴(kuò)展的控制器,來(lái)維護(hù)整個(gè)流程。本文在介紹了MVC模式的發(fā)展、概念以及實(shí)現(xiàn)的基礎(chǔ)上,詳細(xì)介紹了MVC模式在Struts框架中的具體應(yīng)用。
關(guān)鍵詞 MVC模式;Struts框架;應(yīng)用研究
0引言
MVC模式最早由Trygve Reenskaug在1978年提出,是施樂(lè)帕羅奧多研究中心(Xerox PARC)在20世紀(jì)80年代為程序語(yǔ)言Smalltalk發(fā)明的一種軟件設(shè)計(jì)模式。并且由于其鮮明特點(diǎn),廣泛受到程序開(kāi)發(fā)人員的青睞。使用MVC模式的目的是實(shí)現(xiàn)一種動(dòng)態(tài)的程式設(shè)計(jì),使之簡(jiǎn)化對(duì)后續(xù)程序的修改和擴(kuò)展,并且可以重復(fù)利用程序的某一部分。而基于MVC模式的Struts框架,可以將問(wèn)題進(jìn)行劃分,成為一個(gè)個(gè)的小模塊,這樣使得問(wèn)題更容易得到解決,系統(tǒng)結(jié)構(gòu)更加清晰,另外當(dāng)問(wèn)題發(fā)生變化或者當(dāng)技術(shù)有所改變時(shí),我們可以進(jìn)行代碼重用,這能夠極大的提高開(kāi)發(fā)人員的開(kāi)發(fā)效率。所以基于MVC模式的Struts框架非常適合開(kāi)發(fā)大型的復(fù)雜系統(tǒng)。本文詳細(xì)介紹了MVC模式的基本思想,以及Struts框架的體系結(jié)構(gòu)。
1MVC模式概述
1.1MVC架構(gòu)
MVC英文即Model-View-Controller,即把一個(gè)應(yīng)用的輸入、處理、輸出流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個(gè)應(yīng)用被分成三個(gè)層——模型層、視圖層、控制層。模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。視圖(View)代表用戶(hù)交互界面,對(duì)于Web應(yīng)用來(lái)說(shuō),可以概括為HTML界面,但有可能為XHTML、XML和Applet。隨著應(yīng)用的復(fù)雜性和規(guī)模性,界面的處理也變得具有挑戰(zhàn)性??刂?Controller)可以理解為從用戶(hù)接收請(qǐng)求,將模型與視圖匹配在一起,完成用戶(hù)的請(qǐng)求。這實(shí)際上是一種模型的變化-傳播機(jī)制。模型、視圖、控制器三者之間的關(guān)系和各自的主要功能,如圖1所示。
1.2MVC模式的優(yōu)勢(shì)與不足
MVC能夠被眾多的web應(yīng)用系統(tǒng)作為主流框架,主要原因在于它具有巨大而眾多的優(yōu)勢(shì),這主要體現(xiàn)在下面幾個(gè)方面。
(1)MVC可以讓一個(gè)正在運(yùn)行著的模型,同時(shí)建立和使用多個(gè)視圖,并且,MVC中具有一種特殊的機(jī)制,那就是內(nèi)置數(shù)據(jù)監(jiān)聽(tīng)機(jī)制,依靠觀察者模式,這種機(jī)制可以監(jiān)聽(tīng)模型層數(shù)據(jù)的更新,并且能夠同步將視圖層的數(shù)據(jù)進(jìn)行更新,以此來(lái)實(shí)現(xiàn)同步響應(yīng)。
(2)在視圖和控制器之間,是相互透明和獨(dú)立的。這種特點(diǎn),可以讓開(kāi)發(fā)人員根據(jù)需要來(lái)動(dòng)態(tài)的定制控制器和視圖之間的關(guān)聯(lián)關(guān)系,以此開(kāi)發(fā)相對(duì)復(fù)雜的應(yīng)用系統(tǒng)。同樣因?yàn)橐晥D和模型之間是相互獨(dú)立、分別存在的,所以如果在做跨平臺(tái)的系統(tǒng)移植時(shí),把一個(gè)模型單獨(dú)移植到新的平臺(tái)進(jìn)行工作就會(huì)相對(duì)比較簡(jiǎn)單。我們僅僅需要在新的平臺(tái)上將視圖重新設(shè)計(jì),并且重新運(yùn)行控制器。
(3)由于MVC是一種思想,是一種潛在框架結(jié)構(gòu),因此我們可以在此模型的基礎(chǔ)上建立客制化的應(yīng)用框架,以此來(lái)滿(mǎn)足客戶(hù)的個(gè)性化需求。
雖然MVC具有很多的優(yōu)點(diǎn),但是也有一些不足的地方,例如,使得系統(tǒng)結(jié)構(gòu)更加復(fù)雜,從而增加了實(shí)現(xiàn)的難度。此外,MVC適用于相對(duì)規(guī)模比較大的系統(tǒng),如果系統(tǒng)實(shí)現(xiàn)的功能結(jié)構(gòu)相對(duì)比較簡(jiǎn)單,那么如果嚴(yán)格遵循MVC模式,反而會(huì)使得系統(tǒng)結(jié)構(gòu)復(fù)雜度增加,并且還有可能由于進(jìn)行跟多的更新操作,導(dǎo)致系統(tǒng)運(yùn)行效率降低。另外,視圖與控制器之間的耦合性過(guò)強(qiáng)。雖然在理論上,視圖與控制器之間是相互分離的,但是在實(shí)際的應(yīng)用中,視圖和控制器之間的耦合性還是比較強(qiáng)的。如果視圖中沒(méi)有控制器的話,那么他的應(yīng)用將會(huì)非常有限,反之亦然。這種強(qiáng)耦合阻礙了組件的獨(dú)立復(fù)用。還有,視圖通過(guò)模型界面訪問(wèn)數(shù)據(jù)的效率很低,這是由于在模型層中提供的接口是不相同的,因此視圖為了獲得足夠多的顯示數(shù)據(jù),往往需要進(jìn)行多次調(diào)用,這種方式訪問(wèn)數(shù)據(jù)的效率比較低,并且對(duì)系統(tǒng)操作性能也有一定的影響。
綜上所述,通過(guò)對(duì)MVC模式的分析,可以看出MVC模式的作用是很明顯的,并且在大的系統(tǒng)結(jié)構(gòu)中作用會(huì)更加明顯。
2MVC模式基本實(shí)現(xiàn)方法
實(shí)現(xiàn)MVC模式的方法不止一種,例如使用Struts或jsf等MVC模式的框架,本身就是一個(gè)實(shí)現(xiàn)。下面主要來(lái)介紹一種簡(jiǎn)單的基本實(shí)現(xiàn)方法。
2.1Model的實(shí)現(xiàn)
在Model的實(shí)現(xiàn)過(guò)程中,最關(guān)鍵的地方在于定義一個(gè)具有存儲(chǔ)多個(gè)數(shù)據(jù)更新的用的監(jiān)聽(tīng)對(duì)象向量。并且根據(jù)這個(gè)向量可以編寫(xiě)出下面的兩個(gè)函數(shù),以此來(lái)分別實(shí)現(xiàn)添加數(shù)據(jù)業(yè)務(wù)時(shí)監(jiān)聽(tīng)對(duì)象的添加和發(fā)生更新時(shí)能及時(shí)把消息發(fā)送給所有的監(jiān)聽(tīng)對(duì)象:
//當(dāng)注冊(cè)模型發(fā)生修改時(shí)需通知的對(duì)象
public void addChangeListener(View cv) throwsException{
//** 1添加cv到變化監(jiān)聽(tīng)隊(duì)列
changeListeners. add(cv);
}
//觸發(fā)模型變化事件
private void fireModelChangeEvent(Objectf){
View V;
for ( int i=0; i<changeListeners. size(); i++){
try {
//將變化通知隊(duì)列中的每個(gè)視圖
System. ou.t println(dMode:l fireModelChangeEvent loopd+i);
v=(View)changeListeners. get( i);
v. handleChange(f);
}catch(Exception e){
System out println(e toString());
}
}
}
2.2View的實(shí)現(xiàn)
在視圖的實(shí)現(xiàn)過(guò)程中,關(guān)鍵的地方有三點(diǎn)。第一點(diǎn)是我們?cè)谶M(jìn)行視圖構(gòu)造函數(shù)時(shí),需要將視圖注冊(cè)到指定的模型對(duì)象中去(model addChangeListener(view));第二點(diǎn)需要做的就是定義一個(gè)能夠存放和它所關(guān)聯(lián)的控制器對(duì)象的向量,并且我們需要根據(jù)這個(gè)向量的對(duì)象,定義增加動(dòng)作監(jiān)聽(tīng)者的注冊(cè)方法(public void addUserGestureListener(Controllerb));最后,我們還得需要為視圖編寫(xiě)一個(gè)能夠依靠傳入對(duì)象的類(lèi)型來(lái)顯示不同的界面的方法。通過(guò)上面所說(shuō)的三個(gè)關(guān)鍵點(diǎn),視圖就能夠?qū)崿F(xiàn)接收模型更新的通知、發(fā)送動(dòng)作到控制器,并且能夠接受控制器對(duì)顯示界面的控制。
2.3Controller的實(shí)現(xiàn)
相對(duì)于模型的實(shí)現(xiàn)和視圖的實(shí)現(xiàn),控制器的實(shí)現(xiàn)要簡(jiǎn)單很多。因?yàn)閷?duì)于控制器來(lái)說(shuō),只需定義一個(gè)模型對(duì)象和視圖對(duì)象就能能實(shí)現(xiàn)。模型對(duì)象是為了方便在函數(shù)中進(jìn)行調(diào)用其業(yè)務(wù)的行為,視圖對(duì)象是為了方便于將控制器的動(dòng)作注冊(cè)到視圖中去,使他們可以成為該視圖的動(dòng)作接收者。
3基于MVC模式的Struts框架
所謂的基于MVC模式的STRUTS框架,實(shí)際上就是把JavaServlet、JSP、自定義標(biāo)簽(TagLib)、JavaBeans、XML和信息資源(Resource Bundles)整合到一個(gè)統(tǒng)一的框架中,由此組成了一個(gè)可復(fù)用的MVC設(shè)計(jì)。Struts框架本身帶有自己的控制器,同時(shí)還整合了其它的一些能夠?qū)崿F(xiàn)模型層和視圖層的技術(shù),而且,Struts框架提供了許多可供擴(kuò)展和定制的地方。同時(shí),Struts提供自定義標(biāo)記庫(kù),通過(guò)這些自定義標(biāo)記可以順利完成和系統(tǒng)的Model部分交互,通過(guò)使用這些自定義標(biāo)記創(chuàng)建的JSP表單,可以實(shí)現(xiàn)和Model部分中的ActionForm的映射,以此來(lái)完成對(duì)用戶(hù)數(shù)據(jù)的封裝。圖2顯示了Struts的工作流程。
(1)Struts框架總控制器(ActionServlet),作用是用來(lái)完成所有初始化工作。當(dāng)啟動(dòng)總控制器之后,首先會(huì)讀取Struts-config.xml 的配置信息,目的是為相應(yīng)的對(duì)象進(jìn)行不同的Struts模塊初始化。當(dāng)在Web容器啟動(dòng)時(shí),初始化動(dòng)作也會(huì)自動(dòng)完成,總控制器完成初始化動(dòng)作后,將通過(guò)URL匹配映射截獲所有以.do結(jié)尾的URL請(qǐng)求。
(2)用戶(hù)向Web應(yīng)用程序器提交一個(gè)請(qǐng)求的方法有兩種,一種是提交表單,另一種是調(diào)用URL,而用戶(hù)請(qǐng)求的數(shù)據(jù)會(huì)通過(guò)HTTP協(xié)議上傳給Web服務(wù)器。
(3)控制器接收HTTP請(qǐng)求,然后控制器首先會(huì)通過(guò)ActionConfig找出對(duì)應(yīng)該請(qǐng)求的Action子類(lèi),如果沒(méi)有找到對(duì)應(yīng)的Action,控制器直接會(huì)把請(qǐng)求轉(zhuǎn)發(fā)給JSP或者靜態(tài)頁(yè)面。如果有對(duì)應(yīng)的Action,并且這個(gè)Action有一個(gè)相應(yīng)的ActionForm,ActionForm首先會(huì)被控制器實(shí)例化,然后會(huì)使用HTTP請(qǐng)求的數(shù)據(jù)來(lái)填充其屬性, 然后保存在ServletContext 中,這樣就可以被其它Action對(duì)象或者JSP調(diào)用。
(4)控制器根據(jù)配置信息將請(qǐng)求切換到具體的ActionFormBean也一并傳給這個(gè)Action的execute()方法。
(5)Action一般其中只包含一個(gè)execute()方法, 它的作用是負(fù)責(zé)執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,然后會(huì)返回一個(gè)ActionForward對(duì)象, 控制器會(huì)通過(guò)這個(gè)ActionForward對(duì)象來(lái)進(jìn)行轉(zhuǎn)發(fā)工作。
(6)根據(jù)業(yè)務(wù)處理時(shí)產(chǎn)生的不同結(jié)果,Action會(huì)返回一個(gè)目標(biāo)相應(yīng)對(duì)象給總控制而這個(gè)目標(biāo)相應(yīng)對(duì)象對(duì)應(yīng)的是一個(gè)具體的JSP頁(yè)面或者另外一個(gè)Action。
(7)總控制器根據(jù)業(yè)務(wù)功能Action返回的目標(biāo)響應(yīng)對(duì)象,將HTTP請(qǐng)求轉(zhuǎn)換到這個(gè)目標(biāo)響應(yīng)對(duì)象中, 通常來(lái)說(shuō),它是一個(gè)具體的JSP頁(yè)面。
(8)目標(biāo)響應(yīng)對(duì)象(JSP)將結(jié)果頁(yè)面展現(xiàn)給用戶(hù)。
4結(jié)論
綜上所述,MVC模式已經(jīng)被廣泛的應(yīng)用于軟件開(kāi)發(fā)之中,它可以通過(guò)對(duì)復(fù)雜度的簡(jiǎn)化,使程序結(jié)構(gòu)更加直觀。軟件系統(tǒng)通過(guò)對(duì)自身基本部分分離的同時(shí)也賦予了各個(gè)基本部分應(yīng)有的功能。而使用基于MVC模式的Struts框架極大的提高了控制層的靈活性,增加了代碼的可重用性。并且由基于MVC模式的Struts框架構(gòu)建的復(fù)雜系統(tǒng)可以分離數(shù)據(jù)訪問(wèn)和數(shù)據(jù)表現(xiàn),讓開(kāi)發(fā)人員可以開(kāi)發(fā)一個(gè)可伸縮性強(qiáng)、便于擴(kuò)展的控制器,來(lái)維護(hù)整個(gè)流程。因此在結(jié)構(gòu)復(fù)雜的系統(tǒng)中基于MVC模式的Struts框架有著很大的優(yōu)勢(shì)和發(fā)展前景。
參考文獻(xiàn)
[1][美]Ivor Horton.Java 2 入門(mén)經(jīng)典 JDK5[M].潘曉雷,于浚泊,,等,譯.北京:機(jī)械工業(yè)出版社,2005:1-1058.
[2]賴(lài)英旭,劉增輝,李毛毛.MVC模式在B/S系統(tǒng)開(kāi)發(fā)中的應(yīng)用研究[J].微計(jì)算機(jī)信息,2006,22(10-3):62-64.
[3]孫衛(wèi)琴.精通Struts:基于MVC的Java Web設(shè)計(jì)與開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2004,8:7-35.
[4]菜劍,景楠. Java Web應(yīng)用開(kāi)發(fā):J2EE和Tomcat[M].2版.北京:清華大學(xué)出版社,2005,1:35-250.
[5]孫衛(wèi)琴,李洪成.Tomcat與Java.Web開(kāi)發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2004,4:29-134.
[6]殷兆麟,張永平,姜淑娟.Java網(wǎng)絡(luò)高級(jí)編程[M].北京:清華大學(xué)出版社,北京交通大學(xué)出版社,2005,5:94-235.
【關(guān)鍵詞】mvcjava應(yīng)用程序框架實(shí)踐探索
一、框架的設(shè)計(jì)
1、設(shè)計(jì)目標(biāo)
設(shè)計(jì)目標(biāo)是完成應(yīng)用程序通用的部分,這樣程序員就可以將自己的精力和注意力放在具體程序的業(yè)務(wù)邏輯上,而和業(yè)務(wù)邏輯沒(méi)有關(guān)系的部分就可以被忽略。框架使用的是MVC模式,該模式可以把數(shù)據(jù)的顯示和數(shù)據(jù)分開(kāi)。對(duì)于程序員來(lái)說(shuō),其工作就是把核心數(shù)據(jù)放到表示數(shù)據(jù)的類(lèi)之中,此外將相應(yīng)的方法添加到其中。從本質(zhì)上將,框架屬于完整的程序,因此其運(yùn)行不需要添加一行代碼。關(guān)于框架支持的應(yīng)用程序的分類(lèi):(1)單文檔單視圖。也就是說(shuō)在應(yīng)用程序中存在一個(gè)文檔。此外,只有一種類(lèi)型的一個(gè)視圖。(2)多文檔類(lèi)型。在同一個(gè)應(yīng)用程序?qū)嵗?,?yīng)用程序可以將多個(gè)文檔框架窗口打開(kāi)。
2、MVC 模式的使用
之所以使用MVC 模式,是因?yàn)槠渚哂幸韵聝?yōu)點(diǎn):(1)MVC 模式和該框架的設(shè)計(jì)目標(biāo)相符。(2)可以建立和使用多個(gè)視圖。(3)視圖與控制器的可接插性。(4)模型的可移植性。(5)MVC模式有很多的應(yīng)用,比如:java的可視化組件就對(duì)其進(jìn)行了使用。
3、類(lèi)的劃分
應(yīng)用程序框架中的類(lèi)主要包括以下幾個(gè)方面:應(yīng)用程序類(lèi)、文檔類(lèi)、視圖類(lèi)、子框架窗口類(lèi)、事件類(lèi)、框架窗口類(lèi)、狀態(tài)欄類(lèi)、工具欄類(lèi)、菜單欄類(lèi)等。
4、類(lèi)之間的關(guān)系
文檔類(lèi),視圖類(lèi)和控制類(lèi)之間的關(guān)系如圖1所示。
圖1 文檔類(lèi)、視圖類(lèi)和控制類(lèi)之間的關(guān)系
應(yīng)用程序類(lèi)和文檔管理類(lèi)的關(guān)系見(jiàn)圖2。
圖2應(yīng)用程序類(lèi)和文檔管理類(lèi)的關(guān)系
視圖類(lèi)和子框架窗口類(lèi)的關(guān)系見(jiàn)圖3。
圖3 視圖類(lèi)和子框架窗口類(lèi)的關(guān)系
二、框架中消息流程
命令消息的流程??蚣苤械拿钕⒎譃椋簲?shù)據(jù)操作命令消息和框架命令消息兩類(lèi)??蚣苊钕ⅲ涸谠伎蚣苤?,有新建文檔命令,將文檔命令打開(kāi),對(duì)文檔命令進(jìn)行保存,另存文檔命令和退出程序命令。數(shù)據(jù)操作命令消息:消息流程是:用戶(hù)操作控制類(lèi)對(duì)象框架窗口子框架窗口視圖文檔視圖。
"激活"消息流程。一定要讓視圖的視覺(jué)狀態(tài)和在框架中真實(shí)狀態(tài)一致。當(dāng)視圖處于活動(dòng)狀態(tài)時(shí),需要滿(mǎn)足以下幾個(gè)條件:(1)視圖處于接受操作的狀態(tài)。(2)和視圖有關(guān)的子框架窗口處于活動(dòng)狀態(tài)。(3)文檔管理器表示活動(dòng)文檔的成員指向該文檔。激活"消息的傳送流程設(shè)計(jì)見(jiàn)圖4。
圖4"激活"消息的傳送流程設(shè)計(jì)
1、模板功能的實(shí)現(xiàn)
可以生成某個(gè)類(lèi)實(shí)例的對(duì)象就是模板。一個(gè)模板可以生成若干個(gè)對(duì)象,也可以只生成一個(gè)對(duì)象。模板功能的實(shí)現(xiàn)思路:程序員需要先創(chuàng)建一個(gè)類(lèi)的對(duì)象,之后將其注冊(cè)到框架。在需要時(shí),框架對(duì)該對(duì)象進(jìn)行使用,這樣就可以生成其他對(duì)象。
2、文檔類(lèi)的實(shí)現(xiàn)
文檔類(lèi)對(duì)數(shù)據(jù)的公共操作包括:新建文檔,打開(kāi)文檔,另存文檔,保存文檔操作,關(guān)閉文檔操作。文檔數(shù)據(jù)的存取。文檔類(lèi)型不同,那么其中的數(shù)據(jù)也就有差異。因此,還沒(méi)有一種方法把全部種類(lèi)的文檔的數(shù)據(jù)序列化到文件,因此需要提供這兩個(gè)抽象接口。
3、視圖類(lèi)的實(shí)現(xiàn)
視圖類(lèi)的方法有:視圖更新方法,接受激活消息的方法,關(guān)閉視圖類(lèi)實(shí)例的方法。此外,視圖必須捕獲激活事件。
視圖類(lèi)子類(lèi)XxView的設(shè)計(jì)。第一步對(duì)父類(lèi)的構(gòu)造函數(shù)進(jìn)行調(diào)用,第二步對(duì)數(shù)據(jù)成員變量、可視化組件實(shí)施初始化,最后把這些組件添加到視圖之中。需要實(shí)現(xiàn)的方法是ViewMvc getInstance().
4、 文檔管理類(lèi)的設(shè)計(jì)
文檔管理類(lèi)可以被分為兩類(lèi):(1)僅僅用于單文檔模式,這一類(lèi)只管理一個(gè)文檔。(2)用于多文檔模式。這一類(lèi)可以管理多個(gè)文檔。
文檔管理類(lèi)基類(lèi) DocumentManager的設(shè)計(jì)。面對(duì)對(duì)象理論主要強(qiáng)調(diào)的是針對(duì)接口進(jìn)行編程,這樣做對(duì)于系統(tǒng)的擴(kuò)展和維護(hù)是十分有利的。在文檔管理類(lèi)的設(shè)計(jì)中使用該原則的目的是讓單文檔管理器和多文檔管理器的差異對(duì)于框架透明。我們可以可以提取這兩種管理器的共同操作,因此就可以形成一個(gè)接口。對(duì)這個(gè)接口我們命名為:DocumentManager。DocumentManager有:(1)新建文檔接口。文檔管理器主要對(duì)文檔進(jìn)行管理,比如:銷(xiāo)毀、創(chuàng)建以及初始化等。因此,框架處理用戶(hù)的"新建......"命令時(shí),需要調(diào)用文檔管理器的新建文檔接口。(2)打開(kāi)文檔接口。文檔的打開(kāi)可以說(shuō)是文檔創(chuàng)建的一種方式,因此框架在響應(yīng)用戶(hù)"打開(kāi)......"命令時(shí),也會(huì)把這一任務(wù)交給文檔管理器。此時(shí),文檔管理器就會(huì)打開(kāi)文檔。(3)關(guān)閉文檔接口。文檔的銷(xiāo)毀即文檔的關(guān)閉,因此當(dāng)響應(yīng)用戶(hù)退出程序命令時(shí),會(huì)對(duì)文檔管理器進(jìn)行委托,關(guān)掉全部的文檔。(4)接收文檔激活消息的接口。如果試圖激活,那么和試圖有關(guān)的文檔此時(shí)也會(huì)被激活。該文檔被激活的消息需要被發(fā)送到文檔管理器,這樣做的目的是方便讓文檔管理器激活這一文檔。
結(jié)束語(yǔ):
21世紀(jì)軟件工業(yè)發(fā)展的一大趨勢(shì)是軟件構(gòu)件化。目前,工業(yè)化的軟件復(fù)用已經(jīng)進(jìn)化到了面向領(lǐng)域的應(yīng)用框架。框架是一種可復(fù)用設(shè)計(jì),主要表現(xiàn)形式是:構(gòu)件實(shí)例間交互的方法。筆者對(duì)mvc的java應(yīng)用程序框架的實(shí)踐進(jìn)行了分析和探討,希望對(duì)大家有借鑒的意義。
參考文獻(xiàn):
關(guān)鍵詞:MVC模式;Struts;Web應(yīng)用
中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
傳統(tǒng)的Web應(yīng)用開(kāi)發(fā)工具(ASP、JSP)將頁(yè)面顯示、商業(yè)邏輯和數(shù)據(jù)處理大部分都集中在頁(yè)面代碼中,Web應(yīng)用擴(kuò)展維護(hù)比較困難,在大型Web應(yīng)用開(kāi)發(fā)中愈發(fā)顯得力不從心。MVC設(shè)計(jì)模式將頁(yè)面顯示、商業(yè)邏輯和數(shù)據(jù)處理相分離,最大限度地降低系統(tǒng)各部分之間的耦合性,提高代碼重用率,易于分工協(xié)作。而Struts是一個(gè)為開(kāi)發(fā)基于MVC模式的應(yīng)用架構(gòu)的開(kāi)源框架。
1MVC設(shè)計(jì)模式
MVC設(shè)計(jì)模式是一種著名的用戶(hù)界面軟件開(kāi)發(fā)設(shè)計(jì)模式,它是模型-視圖-控制器(Model-View-Controller)縮寫(xiě)。在MVC設(shè)計(jì)模式中,它把應(yīng)用程序分成了3個(gè)核心部分,原理如圖1所示。
(1) 模型(Model)。模型封裝了用戶(hù)數(shù)據(jù)和處理數(shù)據(jù)的業(yè)務(wù)邏輯,體現(xiàn)了應(yīng)用程序的當(dāng)前狀態(tài),而且可以將用戶(hù)數(shù)據(jù)狀態(tài)的變化提供給多個(gè)顯示該數(shù)據(jù)的視圖共用。
(2) 視圖(View)。視圖提供了用戶(hù)界面,是用戶(hù)和應(yīng)用程序的交互的窗口,既接受用戶(hù)輸入,也把模型數(shù)據(jù)狀態(tài)顯示給用戶(hù),但是視圖不負(fù)責(zé)任何業(yè)務(wù)邏輯處理,僅僅是將用戶(hù)輸入數(shù)據(jù)傳遞給控制器或?qū)⒛P蛿?shù)據(jù)顯示給用戶(hù)。
(3) 控制器(Controller)??刂破鬟B接了模型和視圖,根據(jù)用戶(hù)請(qǐng)求判斷將請(qǐng)求交給哪個(gè)模型來(lái)完成,然后調(diào)用視圖來(lái)顯示模型處理后的用戶(hù)請(qǐng)求結(jié)果。
MVC設(shè)計(jì)模式將應(yīng)用程序進(jìn)行了分層,提高了軟件的可擴(kuò)展性、可維護(hù)性。
2Struts框架
Struts框架繼承了MVC設(shè)計(jì)模式的特性,是J2EE體系架構(gòu)的一種輕量級(jí)實(shí)現(xiàn)。其工作原理如圖2所示:
(1) 控制器的實(shí)現(xiàn)。Struts框架中采用了ActionServlet和Action類(lèi)以及Struts-config.xml配置文件作為控制器的實(shí)現(xiàn)。其中,Struts-config.xml配置文件配置了不同用戶(hù)請(qǐng)求及對(duì)應(yīng)的具體業(yè)務(wù)邏輯組件來(lái)供ActionServlet類(lèi)查詢(xún)。ActionServlet類(lèi)是中心Servlet,負(fù)責(zé)處理所有的用戶(hù)請(qǐng)求。當(dāng)用戶(hù)提出請(qǐng)求,ActionServlet類(lèi)最先對(duì)請(qǐng)求進(jìn)行處理,它將根據(jù)Struts-config.xml配置文件將用戶(hù)請(qǐng)求映射到具體的Action類(lèi);而當(dāng)Action類(lèi)調(diào)用模型組件處理好用戶(hù)請(qǐng)求,并返回了處理結(jié)果后,仍然由ActionServlet類(lèi)根據(jù)Struts-config.xml配置文件將結(jié)果轉(zhuǎn)發(fā)到視圖提供給用戶(hù),或者轉(zhuǎn)發(fā)另外一個(gè)Action做進(jìn)一步處理。Action類(lèi)實(shí)現(xiàn)了具體的業(yè)務(wù)邏輯,它接受用戶(hù)的輸入,然后調(diào)用具體的模型組件來(lái)完成用戶(hù)請(qǐng)求。
(2) 視圖的實(shí)現(xiàn)。Struts構(gòu)架主要采用了JSP作為視圖的實(shí)現(xiàn),它提供了豐富的JSP標(biāo)簽庫(kù)支持應(yīng)用程序的開(kāi)發(fā),而且引入了ActionForm組件(實(shí)質(zhì)為JavaBean)作為用戶(hù)表單的封裝來(lái)完成數(shù)據(jù)的傳輸。
(3) 模型的實(shí)現(xiàn)。Struts框架對(duì)模型――即復(fù)雜的數(shù)據(jù)持久化層沒(méi)有提供太多的支持,但是這也就是說(shuō)開(kāi)發(fā)人員有更多自由來(lái)選擇合適量級(jí)的持久化技術(shù),比如Hibernate、EJB等。
3Struts工作流程
對(duì)于采用Struts 框架的Web應(yīng)用,其具體工作流程如下:
(1) 客戶(hù)端通過(guò)本地瀏覽器向服務(wù)器發(fā)出一個(gè)請(qǐng)求;
(2) 控制器接收請(qǐng)求,找到對(duì)應(yīng)的Action;
(3) Action類(lèi)執(zhí)行建立在模型組件基礎(chǔ)上的業(yè)務(wù)邏輯;
(4) 一旦Action類(lèi)處理完業(yè)務(wù)邏輯,它把控制權(quán)返回給ActionServlet;
(5) 當(dāng)ActionServlet把Action類(lèi)的處理結(jié)果傳送到指定的視圖中。
4Web開(kāi)發(fā)中的應(yīng)用
以一個(gè)Web考試系統(tǒng)中的考生注冊(cè)子系統(tǒng)為例,說(shuō)明Struts 在Web程序開(kāi)發(fā)中的應(yīng)用??忌谧?cè)頁(yè)面上輸入考生名、密碼等相關(guān)信息,若注冊(cè)成功,控制將轉(zhuǎn)向一個(gè)顯示注冊(cè)成功的頁(yè)面,否則控制將轉(zhuǎn)向一個(gè)顯示失敗的頁(yè)面。具體步驟如下:
(1) 項(xiàng)目建立。
(2) 實(shí)現(xiàn)視圖功能的用戶(hù)界面的設(shè)計(jì)。Struts中,JSP 頁(yè)面中利用Struts框架提供的taglib 標(biāo)記庫(kù)的標(biāo)記能夠大大提高開(kāi)發(fā)效率。在該系統(tǒng)中,其注冊(cè)頁(yè)面reguserinfo.jsp 概要如下:
…
//引用Struts bean 標(biāo)記
…
UserName:
Password:
…
(3) 實(shí)現(xiàn)模型功能的組件設(shè)計(jì)。模型部分包含了應(yīng)用程序的業(yè)務(wù)邏輯。
① 系統(tǒng)狀態(tài)組件(FormBean),即實(shí)體模型類(lèi),它繼承自ActionForm類(lèi),用來(lái)存放表單數(shù)據(jù),與注冊(cè)頁(yè)面的表單對(duì)應(yīng)的數(shù)據(jù)Bean如下:
…;
public class UserForm extends ActionForm{
…
public String getUserID(){return userID;}
public void setUserID(String userID)
{this.userld= userID;}
…
}
② 指令類(lèi)組件(ActionBean),它擴(kuò)展了Action 類(lèi),主要是用來(lái)控制應(yīng)用程序的流程,當(dāng)注冊(cè)考生按“Submit”按鈕后,來(lái)自用戶(hù)的請(qǐng)求被Servlet 送到指令類(lèi)組件RegUserAction,指令類(lèi)調(diào)用相應(yīng)的業(yè)務(wù)邏輯進(jìn)行處理,然后把請(qǐng)求轉(zhuǎn)發(fā)給相關(guān)的JSP,其程序概要為:
…;
public class RegUserAction extends Action
{
public ActionForward perform(ActionMapping
mapping, ActionForm form, HttpServletRequest
req, HttpServletResponse response) {
//獲取注冊(cè)信息,并據(jù)此做相應(yīng)操作
…
}
}
(4) 實(shí)現(xiàn)控制器功能的指令。控制器類(lèi)ActionServlet的核心是Struts-config.xml 配置文件,它包含了應(yīng)用程序的整個(gè)邏輯流程。在考生注冊(cè)信息過(guò)程中,用reguserinfo.jsp實(shí)現(xiàn)注冊(cè)頁(yè)面;用UserForm(擴(kuò)展了ActionForm)封裝了表單數(shù)據(jù);用RegUserAction實(shí)現(xiàn)了考生注冊(cè)信息并控制了應(yīng)用程序流程;而在Struts-config.xml 配置文件里實(shí)現(xiàn)了注冊(cè)頁(yè)面(reguserinfo.jsp)、數(shù)據(jù)Bean(UserForm)、邏輯Bean(RegUserAction)之間的聯(lián)系,其配置信息為:
…
name="userForm"scope="request">
…
當(dāng)在注冊(cè)頁(yè)面上單擊“Submit”按鈕時(shí),考生請(qǐng)求被提交給ActionServlet, ActionServlet 根據(jù)Struts-config.xml 中的配置信息,把/reguser.do 的URL映射到RegUserAction,把考生注冊(cè)信息封裝到UserForm,由RegUserAction 完成
注冊(cè)操作,然后轉(zhuǎn)發(fā)給“/regsuccess.jsp”。
(5) 系統(tǒng)運(yùn)行。 完成整個(gè)系統(tǒng)的功能實(shí)現(xiàn)。
5總結(jié)
Struts體系框架自從2001年7月了1.0版之后,已經(jīng)越來(lái)越得到Java開(kāi)發(fā)者的支持,實(shí)踐證明,Struts體系框架的確是一個(gè)優(yōu)秀的框架,大大縮短了Java Web應(yīng)用程序的開(kāi)發(fā)周期,提高了系統(tǒng)開(kāi)發(fā)效率。
參考文獻(xiàn):
[1] 孫衛(wèi)琴. 精通Struts:基于MVC的JavaWeb設(shè)計(jì)與開(kāi)發(fā)[M]. 北京:電子工業(yè)出版 ,2004.
[2] 閻宏. Java與模式[M].北京:電子工業(yè)出版社,2002.
[3] Ted Husteel, Cedric Dumoulin, David Wiwerfeldt, et al.《Struts in Action》[M]. ManningPublication co.2001.
Application Methods of Struts Framework Based on MVC Designed Pattern
XU Cong, WANG Ya-xuan
(Software College, Dalian University of Foreign Language, Dalian 116044, China)
關(guān)鍵詞:Ajax技術(shù);Struts框架;異步響應(yīng);JavaScript
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)34-1650-03
The Research of Web Application Framework Based on the Collaboration of Ajax Technology and MVC Pattern
HE Xi-chun, XIONG Qian-xing, WU Ting
(Department of Computer Science and Technology, Wuhan University of Technology, Wuhan 430063, China)
Abstract: There are many problems in the existing Electronic Application System with the B/S mode. For example: The user always needs to wait for a long time for the result; the server always has to be under large pressure; a large part of resources at the client-side are leaved unused and so on.. This article studies the Ajax technology at first, and then combines it with the Struts Framework based on the MVC design pattern. With the collaborative work from the two parts, we can promote the response speed of the Web applications based on the B/S mode and construct a more effective web-application framework.
Key words: Ajax technology; Struts framework; asynchronous response; JavaScript
隨著Internet的飛速發(fā)展,基于Web的諸多應(yīng)用以其豐富而生動(dòng)的界面和方便使用等特點(diǎn)在信息化的建設(shè)中發(fā)揮的作用日益顯著。隨著服務(wù)器端開(kāi)發(fā)技術(shù)的成熟,越來(lái)越多的開(kāi)發(fā)人員開(kāi)始親睞B/S(Browser/Server)的設(shè)計(jì)模式。如何克服B/S模式自身的一些問(wèn)題:例如用戶(hù)體驗(yàn)不如C/S模式;服務(wù)器端壓力過(guò)大,沒(méi)有充分利用客戶(hù)端的資源,也就成為應(yīng)用系統(tǒng)需要研究的新問(wèn)題。例如,某大型水路征稽系統(tǒng),就是一個(gè)典型的電子政務(wù)系統(tǒng)。該系統(tǒng)集征稽與管理為一體,征稽部分幫助完成用戶(hù)開(kāi)票操作,管理部分用于數(shù)據(jù)的統(tǒng)計(jì)分析和查詢(xún)。征稽部分對(duì)實(shí)時(shí)性和數(shù)據(jù)的準(zhǔn)確性要求很高,
并且用戶(hù)輸入的過(guò)程中涉及到相關(guān)數(shù)據(jù)的驗(yàn)證。綜合起來(lái),就是要求服務(wù)器既能提供相當(dāng)于本地系統(tǒng)似的響應(yīng)速度,又可以提供大量數(shù)據(jù)的統(tǒng)計(jì)查詢(xún)。
針對(duì)以上問(wèn)題,本文提出將Ajax技術(shù)與MVC模式相結(jié)合的新型web框架應(yīng)用到電子系統(tǒng)中。為了避免頁(yè)面的臃腫和維護(hù)的困難,在中間層上采用MVC的設(shè)計(jì)模式。同時(shí)利用Ajax技術(shù)實(shí)現(xiàn)瀏覽器與服務(wù)器無(wú)刷新交互,數(shù)據(jù)的按需獲取與頁(yè)面的部分加載,極大的緩解網(wǎng)絡(luò)流量。將Ajax的優(yōu)越性,與現(xiàn)有的MVC設(shè)計(jì)模式相結(jié)合,使得Web應(yīng)用不僅層次分明,可重用性強(qiáng),具有高的健壯性和可伸縮性,而且具有良好、豐富的用戶(hù)體驗(yàn)。
1 基于MVC模式的Struts框架介紹
MVC(Model-View-Control)模式,就是模型-視圖-控制器模式,其核心思想是將程序劃分
成相互獨(dú)立又能協(xié)同工作的三個(gè)部分,現(xiàn)在是web應(yīng)用程序普遍采用的開(kāi)發(fā)模式。Struts即是MVC設(shè)計(jì)模式一種實(shí)現(xiàn)。
1) 控制器:控制層,起到控制整個(gè)業(yè)務(wù)流程(Flow Control)的作用,實(shí)現(xiàn)視圖和模型部分的協(xié)同工作。在Struts中起著控制器的作用的是ActionServlet。所有的控制邏輯利用Struts一config.xml文件來(lái)配置。
2) 視圖:視圖是應(yīng)用程序中與用戶(hù)實(shí)現(xiàn)交互的界面相關(guān)的部分,即表示層,通常實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出功能。主要是由JSP來(lái)控制頁(yè)面的輸出。
3) 模式:模型是應(yīng)用程序的主體部分。模型表示業(yè)務(wù)數(shù)據(jù),或者業(yè)務(wù)邏輯,具有實(shí)現(xiàn)具體的業(yè)務(wù)邏輯、狀態(tài)管理的功能。
模型-視圖-控制器模式工作流程見(jiàn)圖1。
Struts框架優(yōu)點(diǎn)顯而易見(jiàn):可以將邏輯處理與頁(yè)面顯示清楚分開(kāi);頁(yè)面顯示可以使用JSP標(biāo)簽庫(kù),從而大大提高開(kāi)發(fā)效率;通過(guò)一個(gè)配置文件,既可以把握整個(gè)系統(tǒng)各部之間的聯(lián)系,又可以大大減少后期維護(hù)的工作量。但是在服務(wù)器端提供了良好而成熟的架構(gòu)實(shí)現(xiàn)的Struts框架,在客戶(hù)端卻沒(méi)有相應(yīng)的架構(gòu),這使Struts在一些交互性強(qiáng)的頁(yè)面應(yīng)用不理想,導(dǎo)致刷新頁(yè)面頻繁,延長(zhǎng)用戶(hù)的等待時(shí)間。在上例的系統(tǒng)中,存在很多用戶(hù)交互頻繁的頁(yè)面,這也導(dǎo)致系統(tǒng)效率低下,造成服務(wù)器資源和網(wǎng)絡(luò)資源的浪費(fèi)。
2 Ajax的工作原理
Ajax(Asynchronous JavaScript and XML)并不是一門(mén)新的語(yǔ)言或技術(shù),實(shí)際上它是幾項(xiàng)技術(shù)按一定方式的組合,在共同的協(xié)作中發(fā)揮各自的作用。
傳統(tǒng)的web應(yīng)用遵循一種請(qǐng)求/響應(yīng)的模式,對(duì)于每個(gè)請(qǐng)求都會(huì)重新加載整個(gè)頁(yè)面。Ajax的工作原理相當(dāng)于在用戶(hù)和服務(wù)器之間加了一個(gè)中間層,使用戶(hù)操作與服務(wù)器響應(yīng)異步化,從而消除了網(wǎng)絡(luò)交互過(guò)程中的“處理―等待―處理”的缺點(diǎn)[1]。每當(dāng)需要更新時(shí),客戶(hù)端Web頁(yè)面的修改是異步的和逐步增加的。并且客戶(hù)端的瀏覽器可以分擔(dān)一部分的業(yè)務(wù)邏輯,而不再僅僅是顯示內(nèi)容;服務(wù)器傳送的僅僅是數(shù)據(jù),而不是內(nèi)容。這樣,Ajax在提交Web頁(yè)面內(nèi)容時(shí)大大提高了用戶(hù)界面響應(yīng)的速度。在基于Ajax的應(yīng)用程序中沒(méi)有必要長(zhǎng)時(shí)間等待整個(gè)頁(yè)面的刷新。頁(yè)面中需要更新的那部分才進(jìn)行更改,如果可能的話,更新是在本地完成的,并且是異步的。所以基于Ajax技術(shù)的應(yīng)用程序可以給用戶(hù)提供桌面程序般的使用體驗(yàn)。基于Ajax的web模型和Ajax引擎模型見(jiàn)圖2。
由于Ajax技術(shù)本身的優(yōu)越性,基于Ajax技術(shù)的Web型框架現(xiàn)在已經(jīng)應(yīng)用到很多程序中。例如Gmail、Google Map、Google Suggest就是幾個(gè)經(jīng)典的Ajax應(yīng)用。本文中重點(diǎn)要討論的就是將Ajax技術(shù)與現(xiàn)有的MVC開(kāi)發(fā)模式相結(jié)合,應(yīng)用到項(xiàng)目開(kāi)發(fā)中。
3 Ajax技術(shù)與MVC模式相結(jié)合的web框架
綜合上面所分析的,基于MVC模式的Struts是一種框架,雖然它可以很好的將業(yè)務(wù)邏輯和表示分離,但是大多數(shù)的Struts應(yīng)用都是標(biāo)準(zhǔn)的“如同一個(gè)平面文檔Web頁(yè)面”的結(jié)構(gòu)。Ajax是一項(xiàng)技術(shù),它的優(yōu)勢(shì)是使得Web頁(yè)面看起來(lái)接近像用戶(hù)所期望的桌面應(yīng)用的動(dòng)態(tài)應(yīng)用程序,而不是一個(gè)平面的顯示文檔。將Ajax技術(shù)應(yīng)用到Struts框架中,可以充分的發(fā)揮兩者的優(yōu)點(diǎn),形成一種高效的web應(yīng)用框架。
3.1 Ajax技術(shù)與MVC相結(jié)合的方法
Ajax中實(shí)現(xiàn)異步響應(yīng)的onReadyStateChange事件具有在客戶(hù)端程序中的事件監(jiān)聽(tīng)功能。在MVC模式中,視圖相當(dāng)于用戶(hù)看到的頁(yè)面,通過(guò)內(nèi)置的Ajax對(duì)象一步方式給控制器發(fā)送請(qǐng)求,Ajax中的onReadyStateChange則開(kāi)始監(jiān)聽(tīng);控制器接受到頁(yè)面發(fā)送過(guò)來(lái)的請(qǐng)求(Get或者Post方式),通過(guò)請(qǐng)求判斷后發(fā)送給相應(yīng)的業(yè)務(wù)或者數(shù)據(jù)模型;則業(yè)務(wù)或者數(shù)據(jù)模型開(kāi)始執(zhí)行業(yè)務(wù)操作,執(zhí)行完畢后直接給頁(yè)面發(fā)送數(shù)據(jù)更新的通知。頁(yè)面中Ajax對(duì)象的onReadyStateChange接收到數(shù)據(jù)的更新通知后,根據(jù)實(shí)際的情況用DOM進(jìn)行頁(yè)面更新。從上面的結(jié)合原理上可以了解,Ajax技術(shù)與Struts框架的結(jié)合要體現(xiàn)在頁(yè)面和控制器之間,進(jìn)行異步的控制。通過(guò)分析,在Struts框架中應(yīng)用Ajax技術(shù),實(shí)際上就是加入一個(gè)Ajax引擎,這個(gè)引擎主要是用來(lái)發(fā)送Ajax異步請(qǐng)求到服務(wù)器和接收服務(wù)器的Ajax響應(yīng),并動(dòng)態(tài)更新頁(yè)面,由于采用的是Struts框架,那么無(wú)論是發(fā)送請(qǐng)求還是接收響應(yīng),都應(yīng)該完成到StrutsForm形式和StrutsAction形式的轉(zhuǎn)換。具體的結(jié)合方式可參見(jiàn)圖3中所示。
用戶(hù)的瀏覽器在執(zhí)行任務(wù)時(shí)就裝載了Ajax引擎,Ajax引擎用JavaScript語(yǔ)言編寫(xiě),它負(fù)責(zé)解釋執(zhí)行用戶(hù)界面及與服務(wù)器之的交互。Ajax引擎允許用戶(hù)與應(yīng)用軟件之間的交互過(guò)程異步進(jìn)行,獨(dú)立于用與網(wǎng)絡(luò)服務(wù)器間的交流。用JavaScript調(diào)用Ajax引擎來(lái)代替產(chǎn)生一個(gè)HTTP用戶(hù)動(dòng)作,內(nèi)存中的數(shù)據(jù)編輯、頁(yè)面導(dǎo)航、數(shù)據(jù)校驗(yàn)這些不需要重新載入,整個(gè)頁(yè)面的需求可以交給Ajax來(lái)執(zhí)行。
通過(guò)分析Ajax技術(shù)與Struts框架結(jié)合的原理,可以知道Ajax作為一項(xiàng)技術(shù),能夠很方便的融入到基于MVC模式的Struts框架中。它并不需要任何新的庫(kù)文件或者服務(wù)器代碼;只需要使用現(xiàn)有的Struts庫(kù)文件和Action類(lèi)。關(guān)鍵是在Struts的應(yīng)用中根據(jù)實(shí)際業(yè)務(wù)的需要,以模塊為單位加入Ajax的相關(guān)設(shè)置。首先需要確定哪些部分需要?jiǎng)討B(tài)顯示,然后將她們更新到Ajax的異步通信執(zhí)行。
以Ajax技術(shù)的實(shí)現(xiàn)框架DWR為例。它能夠把服務(wù)器端Java對(duì)象的方法公開(kāi)給JavaScript代碼。所以在這個(gè)引擎里,它最重要的就是提供了一個(gè)Java類(lèi)到JavaScript對(duì)象的映射機(jī)制,也即是DWRServlet。DWR是作為Web應(yīng)用程序中的Servlet部署的。而在Struts的視圖、控制和模型三個(gè)組件中,ActionServlet就是它的控制器(Controller)。那么要將兩個(gè)框架結(jié)合起來(lái),其實(shí)也就是將DWRServlet和Actionservlet結(jié)合起來(lái),作為整合框架的核心-MVC模式的新的控制器。
3.2 新型web框架的應(yīng)用
某大型的水路征稽系統(tǒng)中的開(kāi)票業(yè)務(wù)和協(xié)議簽訂業(yè)務(wù),對(duì)系統(tǒng)的響應(yīng)速度要求很高,且在運(yùn)行的過(guò)程中,需要對(duì)用戶(hù)的每一步輸入的信息進(jìn)行驗(yàn)證。這樣的需求,可以通過(guò)應(yīng)用Ajax技術(shù)和Struts架構(gòu)相結(jié)合的新型框架來(lái)滿(mǎn)足。
以統(tǒng)繳業(yè)務(wù)為例,該模塊幫助用戶(hù)完成協(xié)議的簽訂和電子協(xié)議的生成。首先需要在系統(tǒng)的web.xml文件中配置DWR和Struts這兩個(gè)Servlet以及其映射。
……
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
……
<!----以上是指定Struts的ActionServlet--->
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
……
</servlet>
<!---以上是指定DWR的DWRServlet---->
要調(diào)用的JavaBean方法需要在DWR的配置文件dwr.xml中進(jìn)行聲明,建立映射,如:
<create creator="new" javascript="getSnxyxx" scope="page">
<param name="class"
value="edu.whut.cwts.tj.xy.getSnxyxx" />
</create>
在頁(yè)面中直接調(diào)用相關(guān)的JavaBean:
function funcresult(result)
{
if(result=="1")//如果公司名稱(chēng)驗(yàn)證通過(guò),獲取該公司到目前的協(xié)議情況
{var result;
getSnxyxx.getallxxdwmc.value, dwxz.value,funcresult);
}
……}
function funcresult(result)
{//對(duì)公司協(xié)議信息的顯示
……
}
DWR允許用戶(hù)像調(diào)用JavaScript的函數(shù)一樣調(diào)用Java方法,對(duì)于Struts框架中的ActionForm類(lèi)和Action類(lèi)也可以直接通過(guò)DWR調(diào)用,只需要在dwr.xml文件根據(jù)實(shí)際業(yè)務(wù)需要,對(duì)用到的類(lèi)進(jìn)行如上的聲明即可。程序中,根據(jù)實(shí)際業(yè)務(wù)需要有的地方DWR進(jìn)行實(shí)現(xiàn),有的地方用Struts來(lái)實(shí)現(xiàn),有的需要兩者結(jié)合實(shí)現(xiàn),進(jìn)行靈活控制,開(kāi)發(fā)高效的水路電子征稽系統(tǒng)。
4 結(jié)束語(yǔ)
本文將現(xiàn)在比較流行的Ajax技術(shù)與成熟的開(kāi)發(fā)模式MVC相結(jié)合,可以充分發(fā)揮兩者的優(yōu)點(diǎn),組成更為合理高效的新型web框架。Ajax技術(shù)可以異步響應(yīng)頁(yè)面請(qǐng)求,使得頁(yè)面的展現(xiàn)更加靈活動(dòng)態(tài);基于MVC模式的Struts框架使得系統(tǒng)的開(kāi)發(fā),測(cè)試和維護(hù)更加科學(xué)合理。將這種新型web框架應(yīng)用到應(yīng)用系統(tǒng)的開(kāi)發(fā)中,有利于改善B/S模式應(yīng)用系統(tǒng)中普遍存在的問(wèn)題,充分利用客戶(hù)端的資源,減輕服務(wù)器端壓力,給用戶(hù)提供基于web的功能和桌面級(jí)的用戶(hù)體驗(yàn)。
參考文獻(xiàn):
[1] 游麗珍,郭宇春,李純喜.Ajax引擎的原理和應(yīng)用[J].微計(jì)算機(jī)信息,2006,6(9):205-207.
[2] 佘名高,吳海林,熊童滿(mǎn),等.Ajax在Struts中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007,10(17):69-72.
【關(guān)鍵詞】MVC模式;Joomla!;Web系統(tǒng);專(zhuān)家答疑組件
【中圖分類(lèi)號(hào)】G40-057 【文獻(xiàn)標(biāo)識(shí)碼】A 【論文編號(hào)】1009―8097(2009)06―0097―04
軟件開(kāi)發(fā)中,通常用耦合度和內(nèi)聚度作為衡量模塊獨(dú)立程度的機(jī)制。傳統(tǒng)的Web系統(tǒng)開(kāi)發(fā),常常圍繞著事件驅(qū)動(dòng)的界面表示層來(lái)組織開(kāi)發(fā),此開(kāi)發(fā)模式把數(shù)據(jù)處理、程序功能和界面層代碼完全雜糅在一起,不利于模塊間的復(fù)用,降低了系統(tǒng)各模塊間的獨(dú)立性,系統(tǒng)模塊間具有高耦合度。MVC模式由于把數(shù)據(jù)處理、程序輸入輸出控制和數(shù)據(jù)表示分離開(kāi)來(lái),并描述了三者之間的通訊方式,提高了系統(tǒng)各模塊間的獨(dú)立性與模塊的可復(fù)用性,很好的解決了上述傳統(tǒng)Web系統(tǒng)開(kāi)發(fā)中所遇到的問(wèn)題。
在Web系統(tǒng)開(kāi)發(fā)中,對(duì)于MVC模式的實(shí)現(xiàn)主要有三種技術(shù)框架:基于ASP.NET的框架、基于PHP的框架、基于JSP的框架?;贏SP.NET的框架的最大弱點(diǎn)是不具有跨平臺(tái)性,依賴(lài)于Window平臺(tái),安全性與穩(wěn)定性較弱且版權(quán)使用費(fèi)用昂貴;基于JSP的框架的最大弱點(diǎn)是開(kāi)發(fā)周期長(zhǎng),技術(shù)實(shí)現(xiàn)復(fù)雜,只合適大型Web系統(tǒng)項(xiàng)目應(yīng)用;而實(shí)現(xiàn)MVC模式的PHP的框架由于具有跨平臺(tái)性、安全性與穩(wěn)定性高、開(kāi)發(fā)周期短、開(kāi)源(軟件免費(fèi)使用)等特征在中小型Web系統(tǒng)開(kāi)發(fā)中得到了廣泛的應(yīng)用。作者通過(guò)文獻(xiàn)調(diào)研發(fā)現(xiàn),研究ASP.NET的框架與JSP的框架在Web系統(tǒng)開(kāi)發(fā)中應(yīng)用的文獻(xiàn) 較多,而對(duì)于實(shí)現(xiàn)MVC模式的PHP框架在Web系統(tǒng)開(kāi)發(fā)中的應(yīng)用研究則很少。
目前,基于MVC模式的PHP技術(shù)框架眾多,如Symfony、Zend Framework、Joomla!、Drupal等,開(kāi)發(fā)者依據(jù)開(kāi)發(fā)需求靈活的選擇框架,本文則選取Joomla!框架, 探討其在Web系統(tǒng)開(kāi)發(fā)中如何進(jìn)行組件擴(kuò)展開(kāi)發(fā)。首先,本文分析了基于MVC模式的Joomla!框架在Web系統(tǒng)擴(kuò)展開(kāi)發(fā)中的應(yīng)用 設(shè)計(jì)思想、技術(shù)方法;其次,重點(diǎn)分析了Joomla!框架在Web系統(tǒng)擴(kuò)展開(kāi)發(fā)中的擴(kuò)展機(jī)制;最后,以某外語(yǔ)教育出版社高等英語(yǔ)教學(xué)網(wǎng)專(zhuān)家答疑組件擴(kuò)展開(kāi)發(fā)為案例,剖析了Joomla!框架擴(kuò)展機(jī)制在Web系統(tǒng)擴(kuò)展開(kāi)發(fā)中的實(shí)現(xiàn)。
一 Joomla!框架應(yīng)用于Web系統(tǒng)的組件擴(kuò)展設(shè)計(jì)
由于Joomla!框架具有自帶的用戶(hù)注冊(cè)管理、新聞、媒體管理等組件,并且擁有優(yōu)秀的擴(kuò)展能力等優(yōu)勢(shì),提高了開(kāi)發(fā)的效率和靈活性,因此它在中小Web系統(tǒng)開(kāi)發(fā)中得到了廣泛應(yīng)用。Joomla!框架的組件概念即是完成一定功能的應(yīng)用程序。下面圍繞Joomla!框架的Web組件擴(kuò)展問(wèn)題分別對(duì)Joomla!框架應(yīng)用于Web系統(tǒng)組件擴(kuò)展開(kāi)發(fā)的設(shè)計(jì)思想、技術(shù)方法進(jìn)行探討。
1 Joomla!框架組件擴(kuò)展的MVC模式設(shè)計(jì)思想
為了克服傳統(tǒng)Web開(kāi)發(fā)中將數(shù)據(jù)處理、程序功能和界面代碼完全雜糅在一起的問(wèn)題,Joomla!框架應(yīng)用于Web系統(tǒng)組件擴(kuò)展開(kāi)發(fā)遵循MVC模式設(shè)計(jì)思想,如圖1所示,包含三個(gè)部分:模型(Model)視圖(View)和控制器(Controller) ,分別對(duì)應(yīng)于內(nèi)部數(shù)據(jù)數(shù)據(jù)表示和輸入輸出控制。
模型用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對(duì)數(shù)據(jù)的處理方法;視圖是模型的外在表示,一個(gè)模型可以對(duì)應(yīng)一個(gè)或者多個(gè)視圖,視圖是程序系統(tǒng)與外界的接口;控制器起到 溝通模型和視圖的作用,用于控制應(yīng)用程序的流程。它處理來(lái)自用戶(hù)的行為事件和數(shù)據(jù)模型的改變事件,并對(duì)事件進(jìn)行響應(yīng)。
如圖1所示,Joomla!框架遵循MVC設(shè)計(jì)思想進(jìn)行Web系統(tǒng)擴(kuò)展開(kāi)發(fā)采用如下的數(shù)據(jù)交換機(jī)制:控制器――視圖和控制器――模型方法。控制器是視圖和模型之間進(jìn)行數(shù)據(jù)交換的紐帶,在控制器――視圖方法中,控制器根據(jù)用戶(hù)輸入直接調(diào)用不同視圖改變響應(yīng)流程,或與模型交互后獲得需要顯示的數(shù)據(jù),再調(diào)用視圖改變響應(yīng)流程;而在控制器――模型方法中,控制器與模型交換,控制器將輸入數(shù)據(jù)傳遞給模型處理,控制器中也可以從模型中抽取數(shù)據(jù)。
2 Joomla!框架組件擴(kuò)展的技術(shù)方法
采用Joomla!框架進(jìn)行Web系統(tǒng)的組件擴(kuò)展開(kāi)發(fā),要求開(kāi)發(fā)者編程語(yǔ)言必須使用PHP技術(shù),數(shù)據(jù)庫(kù)使用MySQL、 Web服務(wù)器通常推薦開(kāi)源的(免費(fèi)使用)的Apache。Joomla!官方的最新框架版本采用分層架構(gòu)機(jī)制:框架層、應(yīng)用層、擴(kuò)展層,框架層由Joomla!的基本類(lèi)庫(kù)和插件組成;應(yīng)用層由應(yīng)用程序類(lèi)構(gòu)成;擴(kuò)展層由組件、模塊、模板構(gòu)成,其架構(gòu)機(jī)制如圖2所示。
Joomla!框架應(yīng)用于Web系統(tǒng)擴(kuò)展開(kāi)發(fā)的方法對(duì)于Web系統(tǒng)交互界面設(shè)計(jì)人員來(lái)說(shuō)是采取模板定制方案,將設(shè)計(jì)好的Web頁(yè)面與CSS樣式遵循Joomla!模板定制機(jī)制,將已經(jīng)設(shè)計(jì)好的模板嵌入到Joomla!框架中,依據(jù)客戶(hù)的不同需求進(jìn)行個(gè)性化Web系統(tǒng)外觀的設(shè)計(jì);對(duì)于Web系統(tǒng)編程人員來(lái)說(shuō),Joomla!框架已經(jīng)為Web系統(tǒng)中最常用的功能進(jìn)行了實(shí)現(xiàn) ,如果Web系統(tǒng)開(kāi)發(fā)有另外的功能需求,可以使用Joomla!框架進(jìn)行Web系統(tǒng)的擴(kuò)展開(kāi)發(fā),即遵循Joomla!框架擴(kuò)展開(kāi)發(fā)的規(guī)范與機(jī)制編寫(xiě)組件、模塊、插件來(lái)滿(mǎn)足Web系統(tǒng)開(kāi)發(fā)的功能需求。
二 Joomla!框架應(yīng)用于Web系統(tǒng)的組件擴(kuò)展機(jī)制
對(duì)于Web系統(tǒng)編程人員來(lái)說(shuō),應(yīng)用Joomla!框架進(jìn)行Web系統(tǒng)擴(kuò)展開(kāi)發(fā)需要遵循Joomla!框架擴(kuò)展開(kāi)發(fā)的規(guī)范與機(jī)制開(kāi)發(fā)組件、模塊、插件來(lái)滿(mǎn)足Web系統(tǒng)的功能需求。Joomla!框架最重要的擴(kuò)展機(jī)制當(dāng)屬組件擴(kuò)展機(jī)制,圖3所示為Joomla!框架的組件擴(kuò)展機(jī)制MVC模式圖。
Joomla!框架中JModelJController JView三個(gè)類(lèi)分別對(duì)應(yīng)于圖3中的ModelController View部分,其中JController類(lèi)是JModel類(lèi)和JView類(lèi)數(shù)據(jù)交換的紐帶,這三個(gè)類(lèi)與Joomla!框架中的JDispatcher類(lèi), JRoute類(lèi)等互相配合,進(jìn)行Web組件擴(kuò)展開(kāi)發(fā)。
JModel類(lèi)是Joomla!框架組件擴(kuò)展機(jī)制的事務(wù)邏輯處理模塊,其是最終負(fù)責(zé)處理客戶(hù)請(qǐng)求的模塊。它能夠處理用戶(hù)的大多數(shù)需求,快速的從數(shù)據(jù)庫(kù)中獲取請(qǐng)求數(shù)據(jù),協(xié)調(diào)事務(wù),保證應(yīng)用程序各部分間的事務(wù)組合;JController類(lèi)是Joomla!框架組件擴(kuò)展機(jī)制的控制模塊。此模塊首先接收客戶(hù)端發(fā)送的與網(wǎng)絡(luò)協(xié)議相關(guān)的請(qǐng)求,然后解析請(qǐng)求并轉(zhuǎn)換為事物邏輯模塊(JModel)的輸入?yún)?shù), 調(diào)用相應(yīng)的事務(wù)邏輯模塊進(jìn)行處理,最后根據(jù)事物邏輯模塊的處理結(jié)果調(diào)用相應(yīng)的用戶(hù)視圖模塊(JView)生成結(jié)果頁(yè)面,返回至瀏覽器;JView是Joomla!框架組件擴(kuò)展機(jī)制的用戶(hù)視圖模塊。此模塊的主要功能是根據(jù)事務(wù)邏輯模塊(JModel)處理結(jié)果生成返回至客戶(hù)端的頁(yè)面。
開(kāi)發(fā)者應(yīng)用Joomla!框架進(jìn)行組件擴(kuò)展開(kāi)發(fā),都需要繼承JModel類(lèi)、JView類(lèi)、JController類(lèi),形成如圖4所示的Joomla!框架組件擴(kuò)展開(kāi)發(fā)機(jī)制圖,開(kāi)發(fā)者借助于圖4的流程,運(yùn)用PHP編程語(yǔ)言對(duì)上述三個(gè)類(lèi)分別進(jìn)行繼承,完成Web系統(tǒng)擴(kuò)展組件的開(kāi)發(fā)。開(kāi)發(fā)者依據(jù)此模式進(jìn)行Web系統(tǒng)開(kāi)發(fā),提高了代碼的可復(fù)用程度,節(jié)省了開(kāi)發(fā)的時(shí)間,提高了開(kāi)發(fā)效率;Joomla!框架通過(guò)提供擴(kuò)展組件的方式來(lái)滿(mǎn)足Web系統(tǒng)的功能擴(kuò)展,提高了系統(tǒng)各個(gè)部分之間的獨(dú)立性,降低了Web系統(tǒng)模塊間的耦合度。
三 組件擴(kuò)展案例――高等英語(yǔ)教學(xué)網(wǎng)專(zhuān)家答疑組件
本文以某外語(yǔ)教育出版社高等英語(yǔ)教學(xué)網(wǎng)專(zhuān)家答疑組件的擴(kuò)展開(kāi)發(fā)為案例,具體闡述Joomla!框架組件擴(kuò)展機(jī)制在Web系統(tǒng)組件擴(kuò)展開(kāi)發(fā)中的應(yīng)用流程和實(shí)現(xiàn)方法。
1 專(zhuān)家答疑組件的擴(kuò)展開(kāi)發(fā)需求
為教師的教學(xué), 和學(xué)生的學(xué)習(xí)提供異步專(zhuān)家指導(dǎo);專(zhuān)家也可以發(fā)表指導(dǎo)英語(yǔ)教學(xué)和學(xué)習(xí)的文章;對(duì)于教師和學(xué)生的問(wèn)題應(yīng)分開(kāi)顯示;對(duì)于教師和學(xué)生的提問(wèn)應(yīng)有歸類(lèi)和按類(lèi)別顯示功能;支持關(guān)鍵字搜索;頁(yè)面支持圖片與附件功能;教師與學(xué)生提問(wèn)審核功能;教師與學(xué)生的提問(wèn)具有優(yōu)先功能;具有創(chuàng)建管理問(wèn)題種類(lèi)功能。
2 專(zhuān)家答疑組件的組成
Joomla!框架的擴(kuò)展組件由后臺(tái)管理與前臺(tái)顯示兩大部分構(gòu)成。專(zhuān)家答疑組件的后臺(tái)管理具有對(duì)問(wèn)題的管理分類(lèi)審核 優(yōu)先 與上傳附件功能;專(zhuān)家答疑組件的前臺(tái)顯示專(zhuān)家的指導(dǎo)和教師與學(xué)生的提問(wèn),并顯示問(wèn)題的搜索和分類(lèi)界面。
3 專(zhuān)家答疑組件的數(shù)據(jù)庫(kù)設(shè)計(jì)
Joomla!框架的組件擴(kuò)展開(kāi)發(fā)使用MySQL數(shù)據(jù)庫(kù),在已存在的數(shù)據(jù)庫(kù)中新建組件開(kāi)發(fā)所需要的表。專(zhuān)家答疑組件,在已存在的數(shù)據(jù)庫(kù)中新建專(zhuān)家答疑數(shù)據(jù)表,它包含主鍵標(biāo)識(shí)符、問(wèn)題標(biāo)題、問(wèn)題答案、問(wèn)題分類(lèi)、疑問(wèn)主體、關(guān)鍵詞、創(chuàng)建時(shí)間這些字段。通過(guò)繼承Joomla!框架中的JTable類(lèi),將得到一個(gè)專(zhuān)家答疑表類(lèi)文件存放在Tables文件夾中,它將在組件擴(kuò)展的Model部分存儲(chǔ)數(shù)據(jù)方法中得到調(diào)用。
4 專(zhuān)家答疑組件的后臺(tái)管理開(kāi)發(fā)
遵循Joomla!框架的組件擴(kuò)展開(kāi)發(fā)機(jī)制和流程,應(yīng)該包括三個(gè)部分:Model、Controller和View,進(jìn)行組件開(kāi)發(fā)的時(shí)候,通常創(chuàng)建Models文件夾存放 組建開(kāi)發(fā)中的Model文件;Controllers文件夾存放 組件開(kāi)發(fā)中的Controller文件;Views文件夾存放 組件開(kāi)發(fā)中的View文件。下面將以專(zhuān)家答疑組件為例具體闡述Model、Controller、View這三個(gè)部分的開(kāi)發(fā)。
專(zhuān)家答疑組件的Models文件夾中包含有QuestionanswersModel和QuestionanswerModel文件,它們都繼承自Joomla!框架中的Jmodel類(lèi),負(fù)責(zé)對(duì)問(wèn)題管理列表和單個(gè)問(wèn)題進(jìn)行數(shù)據(jù)邏輯處理。這兩個(gè)類(lèi)除了擁有共同的Jmodel的父類(lèi)方法,還共同擁有數(shù)據(jù)保存方法、數(shù)據(jù)刪除方法,代碼的可復(fù)用程度得到很大提高。對(duì)于 處理多個(gè)問(wèn)題列表的QuestionanswersModel類(lèi)還具有分頁(yè)方法,方便用戶(hù)進(jìn)行瀏覽。在數(shù)據(jù)保存方法中通過(guò)對(duì)專(zhuān)家答疑表類(lèi)的調(diào)用,將信息綁定到相應(yīng)的數(shù)據(jù)庫(kù)的表中,簡(jiǎn)化了開(kāi)發(fā)者對(duì)于 數(shù)據(jù)保存的處理,提高了開(kāi)發(fā)者的效率。
專(zhuān)家答疑組件的Controllers文件夾中包含QuestionanswerController文件,這個(gè)文件包含一個(gè)QuestionanswerController類(lèi),它繼承自Joomla!框架中的Jcontroller類(lèi)。除了文件夾之外,還有一個(gè)默認(rèn)的QuestionansersController類(lèi),Joomla!組件擴(kuò)展開(kāi)發(fā),通常把這個(gè)默認(rèn)的類(lèi)放在Controllers文件夾外,它的作用是默認(rèn)情況下,調(diào)用組件Views文件夾下問(wèn)題管理列表這個(gè)頁(yè)面。而QuestionanswerController類(lèi)是通過(guò)一系列方法與專(zhuān)家答疑組件中的Model類(lèi)進(jìn)行聯(lián)系,從而調(diào)用專(zhuān)家答疑組件中的對(duì)應(yīng)的單個(gè)問(wèn)題頁(yè)面將結(jié)果返回給瀏覽器。這個(gè)類(lèi)除了擁有父類(lèi)Jcontroller的方法外,還具有對(duì)于 問(wèn)題進(jìn)行編輯的方法、對(duì)于 問(wèn)題進(jìn)行保存的方法、對(duì)于 問(wèn)題進(jìn)行刪除的方法 、取消操作的方法。對(duì)于 問(wèn)題的添加和編輯方法,通過(guò)設(shè)置調(diào)用專(zhuān)家答疑組件中的相關(guān)View文件夾下的類(lèi),直接將頁(yè)面返回給瀏覽器;對(duì)于 問(wèn)題進(jìn)行保存、刪除的方法是通過(guò)調(diào)用專(zhuān)家答疑組件中的QuestionanswerModel中的數(shù)據(jù)保存和刪除方法來(lái)完成;對(duì)于 取消操作的方法是通過(guò)進(jìn)行 地址的重新定位來(lái)實(shí)現(xiàn)。在Joomla!組件開(kāi)發(fā)中,Controllers文件夾下的各個(gè)控制類(lèi)文件都擁有上述的共同方法,在開(kāi)發(fā)的時(shí)候,除了調(diào)用不同的Model和View外,其他的代碼都大致相同,代碼在很大程度上可以進(jìn)行復(fù)用。
專(zhuān)家答疑組件中的Views文件夾下有兩個(gè)子文件夾,它們分別是專(zhuān)家答疑的問(wèn)題管理顯示頁(yè)面和單個(gè)問(wèn)題顯示頁(yè)面。兩個(gè)子文件夾下都包含一個(gè)模板文件夾和對(duì)應(yīng)的View類(lèi),模板文件夾可以存放若干個(gè)模板文件,以供View類(lèi)進(jìn)行選擇調(diào)用,將所獲得的數(shù)據(jù)填入到模板文件中形成顯示頁(yè)面。它使數(shù)據(jù)處理與功能代碼與界面表示層代碼得以分離,避免了代碼的雜糅,提高了各部分間的獨(dú)立性。專(zhuān)家答疑組件擁有QuestionanswersView類(lèi)和QuestionanswerView類(lèi),它們都繼承自Joomla!框架中的Jview類(lèi)。它們通常運(yùn)用一個(gè)顯示方法將數(shù)據(jù)填入到指定的模板文件中,由于專(zhuān)家答疑組件的顯示頁(yè)面都具有單一的模板文件,所以沒(méi)有涉及到模板的選擇調(diào)用。
5 專(zhuān)家答疑組件的前臺(tái)開(kāi)發(fā)
由于專(zhuān)家答疑組件的前臺(tái)開(kāi)發(fā)和上述的后臺(tái)管理開(kāi)發(fā)方法完全一樣,所以限于篇幅不再重復(fù)敘述。但是需要指出的是前臺(tái)開(kāi)發(fā)除了多個(gè)問(wèn)題顯示和單一具體顯示功能外,還具有問(wèn)題搜索和問(wèn)題分類(lèi)顯示功 。開(kāi)發(fā)者僅僅需要在其Models文件夾、Controllers文件夾和Views文件夾增加相應(yīng)的類(lèi)文件即可,不會(huì)影響到其他部分的功能代碼,很方便為組件增加 額外的功能,提高了組件各個(gè)部分之間的獨(dú)立性,降低了系統(tǒng)之間的耦合度。
6 專(zhuān)家答疑組件的安裝
經(jīng)過(guò)上述五個(gè)步驟,就完成了專(zhuān)家答疑組件的開(kāi)發(fā),開(kāi)發(fā)者最后還需要建立一個(gè)XML文件,將專(zhuān)家答疑組件所擁有的文件按照層次順序添加到XML中,完成安裝的XML文件后, 進(jìn)行壓縮成ZIP格式的文件進(jìn)行安裝使用,專(zhuān)家答疑組件的后臺(tái)問(wèn)題管理頁(yè)面效果圖如下所示。
四 結(jié)束語(yǔ)
本文以某外語(yǔ)教育出版社高等英語(yǔ)教學(xué)網(wǎng)的專(zhuān)家答疑組件開(kāi)發(fā)為案例詳細(xì)闡述了應(yīng)用Joomla!框架進(jìn)行Web系統(tǒng)組件擴(kuò)展開(kāi)發(fā)的機(jī)制和流程,限于篇幅,對(duì)于Joomla!框架的Module和Plugin開(kāi)發(fā)沒(méi)有涉及。通過(guò)遵循Joomla!框架的MVC組件擴(kuò)展機(jī)制,我們?cè)陂_(kāi)發(fā)過(guò)程中提高了系統(tǒng)各個(gè)部分的獨(dú)立性與代碼的可復(fù)用程度,降低了系統(tǒng)各部分之間的耦合度。
參考文獻(xiàn)
[1] MVC模式研究的綜述.任中芳,張華,閆明松等 [J].計(jì)算機(jī)應(yīng)用研究,2004,10:1-2.
[2] MVC模型在Web程序中的應(yīng)用及java實(shí)現(xiàn).張瑩,許俊華,張毅, 等[J].計(jì)算機(jī)工程與應(yīng)用,2001,17:160-161.
[3] 基于的MVC設(shè)計(jì)模式的研究.林慶,朱翠苗, 等[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,1:167-168.
[4]Dan Rahmel.Professional Joomla![M].US: Wiley Publishing Inc,2007.
[5]Dan Rahmel.Beginning Joomla! [M].US: press Publishing, 2007.
[6]James Kennard. Mastering Joomla!! 1.5 Extension and Framework Development [M].Birmingham: Packt publishing, 2007.
[7]Joseph LeBlanc. Learning Joomla!!1.5 Extension Development [M].Birmingham: Packt publishing, 2007.
[8] [EB/OL].
[9] [EB/OL].
[10] [EB/OL].
[11] [EB/OL].
A Study on the Application of MVC-Based Joomla! Framework in Extension and Exploration of Web Components
HU Qian-jinCAI Yong-zhou WU Min
(University of Science and Technology of China, Center of Modern Educational Technology, Hefei Hubei, 230026)