何永太
(安徽水利水電職業(yè)技術(shù)學(xué)院,安徽 合肥 231600)
CMS全稱為內(nèi)容管理系統(tǒng),是一種將數(shù)據(jù)(網(wǎng)頁中的內(nèi)容)與數(shù)據(jù)的表現(xiàn)形式(網(wǎng)頁的顯示效果與格式)進(jìn)行分離,并提供對數(shù)據(jù)進(jìn)行有效管理的應(yīng)用系統(tǒng).內(nèi)容管理系統(tǒng)的應(yīng)用使得基于信息發(fā)布類的網(wǎng)站建設(shè)的技術(shù)門檻變得更低、建設(shè)周期變短,網(wǎng)站的運行維護(hù)變得更加高效、安全、簡單、快捷,網(wǎng)站的前端頁面重構(gòu)也變得更加容易.
目前,用于網(wǎng)站建設(shè)的CMS系統(tǒng)主要以基于ASP和PHP技術(shù)的居多,如PHPMyWind.這些系統(tǒng)有著其本身不可逾越的局限性,如語言的純解釋性執(zhí)行、服務(wù)器端腳本與前端腳本混和在一起從而不利于后期的系統(tǒng)維護(hù)、安全性不夠等,從而使得應(yīng)用它們開發(fā)的網(wǎng)站性能不夠高、安全性不強(qiáng)、網(wǎng)站可擴(kuò)展性不足.JAVA技術(shù)有性能高、安全性高、跨平臺、面向?qū)ο?、多線程等優(yōu)秀特點,在企業(yè)應(yīng)用開發(fā)中成為首選的技術(shù)平臺.本文論述了將MVC思想引入CMS系統(tǒng)的開發(fā)中,并使用基于JAVA技術(shù)的優(yōu)秀開源框架Spring MVC進(jìn)行開發(fā)的解決方案.
MVC模式最初是由挪威計算機(jī)專家Trygve M.H.Reenskau提出,該模式將應(yīng)用系統(tǒng)分成三個部分:Model、Controller和View[1].其中,Model用于封裝應(yīng)用狀態(tài)和業(yè)務(wù)邏輯,View用于可視化界面的顯示并捕獲用戶的操作動作,View會將捕獲到的用戶操作傳遞給Controller.Controller會根據(jù)接收到的用戶操作請求決定是否要調(diào)用Model完成相關(guān)業(yè)務(wù)邏輯的處理,并決定選擇相應(yīng)的View來響應(yīng)用戶的操作.MVC三個部分的關(guān)系如圖1所示[2,3].
圖1 Model-View-Controller三者之間的交互
Spring MVC是使用JAVA技術(shù)、基于MVC模式而開發(fā)的輕量級的企業(yè)Web應(yīng)用開發(fā)框架,相比目前其他眾多的MVC框架(如Struts2)而言,Spring MVC更具擴(kuò)展性和靈活性.Spring MVC框架在Web應(yīng)用中的處理流程如圖2所示[4].
圖2 Spring MVC框架在Web應(yīng)用中的處理流程
DispatcherServlet充當(dāng)MVC模式中Controller,是整個框架的控制轉(zhuǎn)發(fā)中心,由Spring MVC框架自動完成,View與MVC中View對應(yīng).圖2中的Controller(自定義控制器)、Service、DAO三部分對應(yīng)于MVC中的Model,用于處理復(fù)雜的業(yè)務(wù)邏輯功能.業(yè)務(wù)邏輯處理采用三層結(jié)構(gòu)設(shè)計,Controller層對請求響應(yīng)進(jìn)行具體化,由DispatcherServlet進(jìn)行調(diào)用;Service層提供更細(xì)單元的操作實現(xiàn),由Controller層進(jìn)行調(diào)用;DAO層一般用于實現(xiàn)對具體數(shù)據(jù)的讀寫訪問,如數(shù)據(jù)庫訪問、文件讀寫等,由Service進(jìn)行調(diào)用.這種分層設(shè)計更易于代碼的模塊化處理與分離,有利于團(tuán)隊開發(fā)過程中的分工與協(xié)作,有利于代碼的自動化測試.
通過以上分析,可知應(yīng)用Spring MVC框架開發(fā)CMS系統(tǒng),開發(fā)關(guān)注點集中在Controller、Service、DAO及View幾個部分的合理設(shè)計.
CMS系統(tǒng)應(yīng)能夠?qū)崿F(xiàn)數(shù)據(jù)內(nèi)容與其顯示相分離,因此一個功能完備的CMS系統(tǒng)應(yīng)由兩大部分構(gòu)成:后臺數(shù)據(jù)管理和前臺頁面訪問處理.
后臺數(shù)據(jù)管理主要完成的功能有:
(1)站點管理.完成站點基本信息的管理、數(shù)據(jù)分類管理、導(dǎo)航管理、鏈接管理等;
(2)用戶管理.完成對后臺管理用戶的添加、刪除、修改操作,以及對用戶進(jìn)行權(quán)限分配與回收的管理等;
(3)站點各類數(shù)據(jù)的管理.完成對各類數(shù)據(jù)的添加、刪除及修改操作,實現(xiàn)對文件的上傳與下載的管理等;
(4)站點前臺頁面管理與配置.所有前臺使用的頁面要通過后臺管理進(jìn)行注冊登記,這樣前臺訪問的入口控制器才能識別它.每一個頁面要顯示(使用)的動態(tài)數(shù)據(jù)以配置頁面變量的方式進(jìn)行設(shè)置.
為了實現(xiàn)前臺的數(shù)據(jù)與其顯示相分離的目的,前臺頁面訪問處理應(yīng)要實現(xiàn)2個基本功能:(1)如何取得需要的數(shù)據(jù);(2)如何決策由哪個頁面模板來顯示取得的數(shù)據(jù).
后臺管理的操作界面是相對固定的,為提高用戶的操作體驗,使用Ajax方式提交命令及數(shù)據(jù),實現(xiàn)流程如圖3所示.
圖3 后臺管理設(shè)計實現(xiàn)
圖3中,所有以Controller結(jié)尾的類為自定義控制器類,其內(nèi)部定義了眾多的方法,以響應(yīng)不同的頁面操作請求.MySqlDao、SqlServerDao、OracleDao是實現(xiàn)了 DAO接口的類,用于實現(xiàn)對不同類型的數(shù)據(jù)庫的統(tǒng)一訪問,這樣CMS系統(tǒng)可以在不同的數(shù)據(jù)庫系統(tǒng)之上進(jìn)行移植,以滿足不同的系統(tǒng)環(huán)境需求.
如前面2所述,為使訪問前臺頁面所需的2個功能順利實現(xiàn).設(shè)計一個統(tǒng)一入口的自定義控制器,所有前臺頁面的訪問必須經(jīng)過該入口控制器,并附帶幾個參數(shù):
w——要訪問的站點id.省略時,代表訪問主站點;
v——視圖(View)的名稱,即用于顯示內(nèi)容的對應(yīng)前臺頁面文件名(不帶擴(kuò)展名);此參數(shù)省略時默認(rèn)使用主頁面視圖;
i——要顯示數(shù)據(jù)的標(biāo)識值,一般為數(shù)據(jù)在數(shù)據(jù)庫中的主鍵,一般不能省略;
p——如果顯示的是數(shù)據(jù)列表,則表示數(shù)據(jù)列表分頁的頁號,省略時代表顯示第1頁;否則可以省略此參數(shù);
s——如果顯示的是數(shù)據(jù)列表,則表示數(shù)據(jù)列表分頁的頁大小,省略時由后臺參數(shù)設(shè)定;否則可以省略該參數(shù);
a——作為附加的額外數(shù)據(jù)使用,一般情況下該參數(shù)被忽略.
頁面中要顯示的數(shù)據(jù)通過后臺管理進(jìn)行配置,可以對一個頁面配置多個數(shù)據(jù)變量,利用JSP的EL和JSTL技術(shù)進(jìn)行數(shù)據(jù)的提取填充.
入口控制器的處理主流程如圖4所示.
圖4 前臺頁面訪問入口控制器的處理流程
至此,前臺頁面訪問的視圖動態(tài)選擇和數(shù)據(jù)的提取問題均已解決.
CMS系統(tǒng)已經(jīng)逐漸成為網(wǎng)站建設(shè)的主流趨勢,具有非常好的發(fā)展前景和應(yīng)用市場.本文提出的基于Spring MVC框架開發(fā)CMS系統(tǒng)的解決方案,充分利用了JAVA平臺技術(shù)的高性能、高安全性、跨平臺性等特點,使得開發(fā)出來的CMS系統(tǒng)相對于使用其他技術(shù)的同類系統(tǒng)具有更出色的優(yōu)勢,適用于訪問率高、網(wǎng)站集群的應(yīng)用需求.應(yīng)用本文提出的方案所開發(fā)的CMS系統(tǒng),在安徽水利水電職業(yè)技術(shù)學(xué)院網(wǎng)站建設(shè)、運行維護(hù)過程中,應(yīng)用效果良好.
〔1〕黃偉.基于MVC架構(gòu)的Web應(yīng)用系統(tǒng)設(shè)計[J].微型計算機(jī)與應(yīng)用,2004(3):13-15.
〔2〕蔣金楠.ASP.NET MVC4框架揭秘[M].北京:電子工業(yè)出版社,2013.1.
〔3〕曾巧明,肖孟,湯偉.MVC模式在CMS中的應(yīng)用及其PHP實現(xiàn)[C].第十三屆全國青年通信學(xué)術(shù)會議,2008.
〔4〕陳雄華,林開雄.Spring 3.x企業(yè)應(yīng)用開發(fā)實戰(zhàn)[M].北京:電子工業(yè)出版社,2012.11.