時(shí)曉青
北方工業(yè)大學(xué)軟件工程實(shí)驗(yàn)室 北京 100144
內(nèi)容管理系統(tǒng)的基本思想是分離內(nèi)容的管理和設(shè)計(jì)。頁(yè)面設(shè)計(jì)存儲(chǔ)在模板里,而內(nèi)容存儲(chǔ)在數(shù)據(jù)庫(kù)或獨(dú)立的文件中。當(dāng)一個(gè)用戶請(qǐng)求頁(yè)面時(shí),各部分聯(lián)合生成一個(gè)標(biāo)準(zhǔn)的HTML 頁(yè)面。理解了內(nèi)容和表現(xiàn)之間的差別,也就理解了內(nèi)容管理的價(jià)值。回顧過去,從靜態(tài)網(wǎng)站到動(dòng)態(tài)網(wǎng)站:早期的網(wǎng)站由純粹的HTML頁(yè)面組成,每一個(gè)頁(yè)面,都是由設(shè)計(jì)師將內(nèi)容與設(shè)計(jì)進(jìn)行整合,然后合成一個(gè)頁(yè)面。后來動(dòng)態(tài)網(wǎng)站技術(shù)的出現(xiàn),人們將內(nèi)容本身保存在關(guān)系數(shù)據(jù)庫(kù)里,然后當(dāng)用戶瀏覽時(shí)再動(dòng)態(tài)地從數(shù)據(jù)庫(kù)中取出內(nèi)容,使用程序生成HTML傳達(dá)給用戶。純粹的靜態(tài)技術(shù)過分強(qiáng)調(diào)內(nèi)容的表現(xiàn)形式,從而使得效率低下,而動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)則因?yàn)榘容^高的技術(shù)含量,以及受限于技術(shù),從而忽略了內(nèi)容的表現(xiàn)。內(nèi)容管理系統(tǒng)中通過模板技術(shù)來解決這個(gè)矛盾。內(nèi)容的存儲(chǔ)使用關(guān)系數(shù)據(jù)庫(kù),而使用模板來合成最終的頁(yè)面。模板讓設(shè)計(jì)師的才能發(fā)揮到極致,而又不影響效率。
本系統(tǒng)屬于框架性的內(nèi)容管理系統(tǒng),可以作為二次開發(fā),此系統(tǒng)作為一個(gè)發(fā)布平臺(tái),包括內(nèi)容模塊(新聞?lì)l道、論壇頻道、分享頻道、相冊(cè)頻道、個(gè)人中心頻道),資源模塊(圖片管理、css管理、js管理),工具模塊(在線幫助、安裝軟件),功能模塊(新聞發(fā)布、欄目管理、上傳下載、用戶管理、角色管理)。
本系統(tǒng)采用ssh框架,結(jié)合freemarke模板引擎技術(shù)?;贐/S結(jié)構(gòu)的WEB層包括視圖表現(xiàn)層、業(yè)務(wù)邏輯層、持久化層和數(shù)據(jù)庫(kù)層,采用Struts框架來實(shí)現(xiàn)表示層,Spring實(shí)現(xiàn)業(yè)務(wù)層,Hibernate實(shí)現(xiàn)持久層,這三種技術(shù)相結(jié)合實(shí)現(xiàn)WEB的四層結(jié)構(gòu),構(gòu)成一個(gè)開放框架。基于這種框架結(jié)構(gòu)有利于內(nèi)容管理系統(tǒng)的開發(fā)和管理,有利于系統(tǒng)業(yè)務(wù)的重用和改動(dòng),而Hibernate高速緩存技術(shù)的使用,使數(shù)據(jù)的存儲(chǔ)和讀寫速度得到大大提高,還有使用相關(guān)的組件,大大加快開發(fā)進(jìn)程。
Struts為Java Web應(yīng)用提供了現(xiàn)成的通用框架。如果沒有Struts.開發(fā)人員將不得不花大量時(shí)間和精力來設(shè)計(jì)、開發(fā)自己的框架。如果在Web應(yīng)用中恰到好處的使用它,開發(fā)人員可以節(jié)省很多時(shí)間,把精力集中在如何解決實(shí)際業(yè)務(wù)上。
Spring也是一個(gè)完善獨(dú)立的框架,但是它的出現(xiàn)帶來了諸如事務(wù)管理之類的核心中間層概念的標(biāo)準(zhǔn)化,同時(shí)雖然Spring是一個(gè)單層框架,但是它提供了一個(gè)以統(tǒng)一的、高效的方式構(gòu)造整個(gè)應(yīng)用,并且可以將單層框架以最佳的組合揉合在一起建立一個(gè)連貫的體系。
Hibernate實(shí)現(xiàn)持久層,基于MVC的Web應(yīng)用的數(shù)據(jù)層和與業(yè)務(wù)邏輯層之間有持久層,這也是應(yīng)用中最容易出現(xiàn)錯(cuò)誤的地方。開發(fā)者通常低估持久層框架在自己的Web應(yīng)用中的作用,所以往往不被重視。一個(gè)效率好的持久層需要花費(fèi)大量的開發(fā)時(shí)間,而且很容易產(chǎn)生缺乏功能和難以管理的現(xiàn)象。目前有許多開源的關(guān)系映射(ORM)框架,其中Hibernate更是因?yàn)樗霰姷男阅鼙籮ava社區(qū)廣泛使用。Hibernate是Java應(yīng)用和關(guān)系數(shù)據(jù)庫(kù)之間的橋梁,它負(fù)責(zé)Java對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間的映射。Hibernate內(nèi)部封裝了通過JDBC訪問數(shù)據(jù)庫(kù)的操作,向上層應(yīng)用提供了面向?qū)ο蟮臄?shù)據(jù)訪問API。
在這種架構(gòu)下,使得程序有很強(qiáng)的擴(kuò)展性,在現(xiàn)有基礎(chǔ)上增加新的功能的難易程度降低到最低。整個(gè)系統(tǒng)的架構(gòu)模型圖如圖1所示。
圖1 系統(tǒng)架構(gòu)圖
本系統(tǒng)充分利用架構(gòu)優(yōu)勢(shì),從頁(yè)面層跳轉(zhuǎn)到action層,通過spring注入,又跳轉(zhuǎn)到Service層,進(jìn)行業(yè)務(wù)邏輯的處理,將業(yè)務(wù)處理的方法提取出來作為一個(gè)接口層提供給上層來使用。最后到Dao層進(jìn)行增加刪除修改查看的編寫,并將各種服務(wù)提取出來作為一個(gè)接口層提供給上層。采用這種設(shè)計(jì)方法的目的,是為了盡可能的提高可維護(hù)性和強(qiáng)擴(kuò)展性。同時(shí)將數(shù)據(jù)層進(jìn)行持久化處理,方便數(shù)據(jù)庫(kù)的變化。
此內(nèi)容管理系統(tǒng)作為一個(gè)信息發(fā)布平臺(tái),前端包括資訊頻道,論壇頻道,分享頻道,相冊(cè)頻道,個(gè)人中心,應(yīng)用頻道。前端框圖如圖2所示。
圖2 系統(tǒng)框圖
在資訊頻道采用luence作為全文檢索的搜索引擎,基于二分詞的方法建立索引,通過boost因子改變?cè)u(píng)分機(jī)制,同時(shí)改進(jìn)高亮器算法,原來Highlighter 要在查詢出的結(jié)果數(shù)據(jù)再一次分詞,然后檢索關(guān)鍵字,再給關(guān)鍵字前后附上指定的前綴后綴 ,現(xiàn)在重構(gòu)Highlighter ,接受document參數(shù),設(shè)置高亮顯示。同時(shí)系統(tǒng)添加拼音詞庫(kù),提供拼音自動(dòng)提示功能方便用戶查找信息。
在論壇頻道,分享頻道,相冊(cè)頻道,個(gè)人中心都采用模板管理機(jī)制,內(nèi)容管理系統(tǒng)的一個(gè)很大的優(yōu)點(diǎn)是,使用模板機(jī)制,我們只需要在文檔中使用模板代碼,然后就可以集中精力在設(shè)計(jì)內(nèi)容上了,要改變網(wǎng)站的外觀,我們只需要修改模板,而不用修改一個(gè)一個(gè)單獨(dú)的頁(yè)面,從而減輕了我們的工作量,加速了開發(fā)過程。
內(nèi)容管理系統(tǒng)的后臺(tái)支撐了前端的顯示,后臺(tái)包括用戶管理,角色管理,上傳下載,欄目管理,發(fā)布管理,資源管理,模板管理。同時(shí)各個(gè)模塊以組件的形式進(jìn)行封裝,為其他外部系統(tǒng)提供良好的接口,具有很強(qiáng)的擴(kuò)展性和靈活性。其用例圖如圖3所示。
圖3 系統(tǒng)用例圖
系統(tǒng)管理員可以管理用戶,管理角色,管理數(shù)據(jù)字典,從而保證用戶的權(quán)限及功能。
普通用戶登錄系統(tǒng)后,可以修改其賬戶密碼以及一些基本信息。點(diǎn)擊資源管理,進(jìn)入資源管理界面,可以查看資源管理的信息,包括圖片管理,css管理,js管理,插件管理。同時(shí)用戶還可以上傳資料,管理模板,從而對(duì)系統(tǒng)資源進(jìn)行有效的管理。
用戶進(jìn)入發(fā)布管理模塊以后,點(diǎn)擊我要發(fā)布,可以選擇發(fā)布信息歸屬的欄目,采用的模板,使用ckeditor富文本編輯器編寫發(fā)布的內(nèi)容信息,可以自由選擇發(fā)布的路徑。充分體現(xiàn)了系統(tǒng)的靈活性。
作為一個(gè)二次開發(fā)平臺(tái)的內(nèi)容管理系統(tǒng),當(dāng)外部系統(tǒng)調(diào)用組件時(shí),系統(tǒng)快速定位到相關(guān)模塊的頁(yè)面,根據(jù)用戶輸入的參數(shù),為其提供服務(wù)。從而大大的提高了用戶的開發(fā)速度,節(jié)約了資源。系統(tǒng)提供的接口畫面如圖4所示。
圖 4 組件接口圖
與其他的內(nèi)容管理系統(tǒng)相比較,此系統(tǒng)的開發(fā)有很多自己的特點(diǎn)。該系統(tǒng)選用的是目前比較流行的開源框架,成熟度較高,系統(tǒng)各層問耦合度低,很好的處理了業(yè)務(wù)邏輯和持久性邏輯和Ul組件很好的耦合,內(nèi)容管理系統(tǒng)選用模板化輸出頁(yè)面,分離了代碼和應(yīng)用的表現(xiàn)部分,極大地方便了程序員和內(nèi)容制作者的工作。高速緩存的使用又使性能得到很大提高。系統(tǒng)有如下的特點(diǎn):
(1) 分層設(shè)計(jì),耦合度低
該系統(tǒng)最大的特點(diǎn)在于采用分層結(jié)構(gòu)并配合時(shí)下流行的組合框架Struts、Spring和Hibernate來進(jìn)行開發(fā)。良好的框架自然地形成代碼分離的原則,更為重要的是,框架把業(yè)務(wù)邏輯和持久性邏輯分開能減輕了開發(fā)人員從頭構(gòu)建持久層代碼的精力,從而集中精力來處理邏輯問題。分層的另一大好處是,模塊的刪除和增加都比較方便,對(duì)以后系統(tǒng)的升級(jí)和維護(hù)帶來很大的好處。
(2) 頁(yè)面模板化輸出
模板化輸出最大的好處在于,它分離了代碼(或程序邏輯)和表現(xiàn)(輸出)。由于這種分離,可以修改程序邏輯而不必?fù)?dān)心輸出的效果如何。模板把程序員從混合了大量文本信息的雜亂代碼中解放出來;使得制作文本內(nèi)容的人無需面對(duì)程序邏輯,就可以輕松地編寫和修改內(nèi)容。模板的另一個(gè)優(yōu)點(diǎn)是它保護(hù)了系統(tǒng),避免了有意或無意帶來危險(xiǎn)的代碼。
(3) 高速緩存的使用優(yōu)化性能
利用Hibernate的緩存技術(shù),把數(shù)據(jù)庫(kù)數(shù)據(jù)的拷貝存放在緩存中,可以減少直接訪問數(shù)據(jù)庫(kù)的頻率,從而提高應(yīng)用的性能。
(4) luence高亮算法
利用重構(gòu)Highlighter ,接受document參數(shù),設(shè)置高亮顯示。
(5) 拼音自動(dòng)提示功能
提供拼音詞庫(kù),提供自動(dòng)提示功能。
(6) 各個(gè)應(yīng)用組件化,提供接口,未其他系統(tǒng)服務(wù)。
[1] 趙文.什么是內(nèi)容管理Enl.光明日?qǐng)?bào).2002.
[2] 張嬋,羅佳.企業(yè)內(nèi)容管理綜述[J].現(xiàn)代計(jì)算機(jī).2005.
[3] 干鈞.內(nèi)容管理系統(tǒng)分析.蕪湖職業(yè)技術(shù)學(xué)院學(xué)報(bào).2006.
[4] 李剛.Struts2權(quán)威指南.電子工業(yè)出版社.2007.
[5] 夏昕,曹曉剛,唐勇.深入淺出Hibernate.電子工業(yè)出版社.2005.
[6] 石雪松.內(nèi)容管理的真正內(nèi)涵.北京:中國(guó)計(jì)算機(jī)用戶.2003.
[7] 韓嘯,曹輝.內(nèi)容管理的關(guān)鍵技術(shù)[J].中國(guó)傳媒科技.2004.
[8] 羅時(shí)飛.精通SPRINQ北京:電子工業(yè)出版社.
[9] Bruce Eckel.Thinking in Java(3th)[M].Person.2002.
[10] Rob Harrop and Jan Machacek.Pro Spnng[M].Apress.2005.