王海燕,吳 潔
(1.商丘師范學(xué)院 計(jì)算機(jī)與信息技術(shù)學(xué)院,河南 商丘 476000;2.河南信息工程學(xué)校 河南 鄭州 450000)
隨著Internet的豐富和發(fā)展,促成了數(shù)字化信息內(nèi)容的迅速成長(zhǎng)。但同時(shí)很多網(wǎng)站卻不能迅速跟進(jìn)大量信息衍生及業(yè)務(wù)模式變革的腳步,尤其是遇到網(wǎng)站擴(kuò)充或整合的時(shí)候,需要花費(fèi)很多時(shí)間和精力去更新信息,人們的工作變得異常復(fù)雜,而網(wǎng)站內(nèi)容管理系統(tǒng)的出現(xiàn)有效的解決了這個(gè)問(wèn)題。這里我們對(duì)內(nèi)容管理系統(tǒng)的現(xiàn)狀和存在的問(wèn)題進(jìn)行了闡述,并給出了架構(gòu)設(shè)計(jì)。
處在科技高速發(fā)展的時(shí)代,網(wǎng)絡(luò)技術(shù)給人們的生活和工作帶來(lái)了深刻的變革,信息化、網(wǎng)絡(luò)化、數(shù)字化正滲透到社會(huì)的各個(gè)角落,企業(yè)對(duì)于通過(guò)互聯(lián)網(wǎng)來(lái)收集、處理和傳遞數(shù)據(jù)的依賴性越來(lái)越強(qiáng)。面對(duì)越來(lái)越大的信息處理量,我們也面臨著許多問(wèn)題,如建站困難、大量信息堆積及信息更新不及時(shí),服務(wù)功能不健全、手工處理效率低下、發(fā)布的信息無(wú)時(shí)效價(jià)值;改版工作量大,系統(tǒng)的擴(kuò)展能力差等。
對(duì)于上述問(wèn)題,如何來(lái)有效管理各種數(shù)據(jù)信息和維護(hù)這些信息內(nèi)容,全面提升管理水平,真正達(dá)到快捷、準(zhǔn)確、實(shí)時(shí)的發(fā)布信息,解決用戶網(wǎng)站建設(shè)與信息發(fā)布中常見(jiàn)的問(wèn)題,以適應(yīng)各級(jí)企業(yè)不斷增長(zhǎng)的需求,就成為一個(gè)耗費(fèi)人力、物力、時(shí)間的工作,基于這樣的目的,一套專業(yè)的網(wǎng)站內(nèi)容管理系統(tǒng)應(yīng)運(yùn)而生。
新一代的內(nèi)容管理平臺(tái)的發(fā)展應(yīng)著重以下幾個(gè)方面:
1)強(qiáng)健的架構(gòu)、良好的集成擴(kuò)展性,方便進(jìn)行維護(hù)和管理
新一代的內(nèi)容管理系統(tǒng)必須基于優(yōu)良穩(wěn)定的體系結(jié)構(gòu),具有更高的安全性,易于集成和功能的擴(kuò)展,可以提供方便的管理維護(hù)功能或工具,并可以快速部署[1]。
2)系統(tǒng)管理和內(nèi)容業(yè)務(wù)分離,更強(qiáng)的業(yè)務(wù)獨(dú)立性和靈活性
網(wǎng)站內(nèi)容管理的復(fù)雜度和靈活性要大大高于一般的業(yè)務(wù)系統(tǒng),因此網(wǎng)站內(nèi)容管理必須能夠提供更強(qiáng)的業(yè)務(wù)獨(dú)立性和靈活性[2]。
3)表現(xiàn)和內(nèi)容分離,用戶體驗(yàn)和內(nèi)容質(zhì)量的和諧統(tǒng)一
內(nèi)容表現(xiàn)和內(nèi)容本身需要盡可能的獨(dú)立,用戶無(wú)需過(guò)多的關(guān)注內(nèi)容表現(xiàn)形式的制作,由系統(tǒng)提供預(yù)設(shè)可選的模板來(lái)展現(xiàn)內(nèi)容[3]。
該內(nèi)容管理系統(tǒng)使用了標(biāo)準(zhǔn)的三層體系結(jié)構(gòu),在框架設(shè)計(jì)中需要考慮很多問(wèn)題:怎樣建立用戶接口;在哪里處理業(yè)務(wù)邏輯;怎樣持久化數(shù)據(jù);怎樣設(shè)計(jì)能松散耦合還能靈活改變,應(yīng)用程序如何做各種級(jí)別的業(yè)務(wù)處理。為了使系統(tǒng)的各個(gè)應(yīng)用層保持一致,讓每個(gè)層在一種松散耦合的方式彼此作用而不用考慮低層的技術(shù)細(xì)節(jié),為此選擇一個(gè)主流技術(shù)架構(gòu)Struts2+freemarker+Spring2+Hibernate3,將應(yīng)用功能分成表現(xiàn)層、邏輯層和數(shù)據(jù)層,Struts2+freemarker主要是解決表現(xiàn)層的問(wèn)題,Spring主要是解決應(yīng)用邏輯層問(wèn)題。Hibernate主要是解決數(shù)據(jù)庫(kù)持久的問(wèn)題。系統(tǒng)完整的處理過(guò)程如圖1所示。
圖1 三層架構(gòu)處理過(guò)程Fig.1 Three layer software architecture
這是一種先進(jìn)的協(xié)同應(yīng)用程序開(kāi)發(fā)模型,各層是邏輯的,而不是實(shí)際的物理上的,這種三層架構(gòu)具有很多優(yōu)勢(shì):
1)安全性
通過(guò)應(yīng)用三層結(jié)構(gòu),使中間邏輯應(yīng)用層和前臺(tái)界面、后臺(tái)數(shù)據(jù)庫(kù)分開(kāi)。利用功能層有效地隔離開(kāi)表示層和數(shù)據(jù)層,未授權(quán)的用戶難以繞過(guò)功能層而利用數(shù)據(jù)庫(kù)工具或黑客手段非法地訪問(wèn)數(shù)據(jù)層,這就為嚴(yán)格的安全管理奠定了堅(jiān)實(shí)的基礎(chǔ),整個(gè)系統(tǒng)的管理層次也更加合理和可控制[4]。
2)便于升級(jí)、維護(hù)
三層結(jié)構(gòu)技術(shù)是一個(gè)基于組件的開(kāi)發(fā)模式,是根據(jù)業(yè)務(wù)涉及的數(shù)據(jù)和處理流程、不同的行業(yè)特性設(shè)計(jì)成屬性、方法并獨(dú)立封裝,使業(yè)務(wù)工作對(duì)象化。當(dāng)用戶需求發(fā)生變化時(shí),只要修改相應(yīng)的對(duì)象就可以了。
3)獨(dú)立性
合理地劃分三層結(jié)構(gòu)的功能,使之在邏輯上保持相對(duì)獨(dú)立性,從而使整個(gè)系統(tǒng)的邏輯結(jié)構(gòu)更為清晰,能提高系統(tǒng)和軟件的可維護(hù)性和可擴(kuò)展性[5]。
在該內(nèi)容關(guān)系系統(tǒng)中,第一層是表示層,作為應(yīng)用的用戶接口部分,它擔(dān)負(fù)著用戶與應(yīng)用間的對(duì)話功能。中間邏輯層由功能對(duì)象和應(yīng)用邏輯組成。它提供定義良好的接口,使表示層可以方便地存取數(shù)據(jù),從而適應(yīng)于服務(wù)中的各種請(qǐng)求,第三層是數(shù)據(jù)層,封裝了對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)功能。
文中內(nèi)容管理系統(tǒng)的視圖層提供給用戶視覺(jué)上的界面,負(fù)責(zé)面向最終用戶的信息發(fā)布,與用戶進(jìn)行交互。用戶輸入的信息通過(guò)該層傳輸給邏輯層,并負(fù)責(zé)邏輯層提取數(shù)據(jù)呈現(xiàn)給用戶。Struts2可以非常簡(jiǎn)單地使用FreeMarker模板作為視圖技術(shù),對(duì)于傳統(tǒng)的JSP頁(yè)面而言,F(xiàn)reeMarker是一個(gè)絕佳的替代方案。
展示數(shù)據(jù)的實(shí)現(xiàn)過(guò)程是:由java程序準(zhǔn)備好要顯示的數(shù)據(jù),由FreeMarker生成頁(yè)面[6],通過(guò)模板顯示準(zhǔn)備的數(shù)據(jù)如圖2所示。
圖2 Freemarker流程圖Fig.2 Freemarker flow chart
為了在Struts2應(yīng)用中使用FreeMarker模板技術(shù),我們需要在Struts.xml文件中進(jìn)行配置。雖然FreeMarker自己提供了一些FTL指令,可以對(duì)數(shù)據(jù)模型中的數(shù)據(jù)進(jìn)行迭代輸出,也提供了一定的條件判斷能力。但Struts2提供的標(biāo)簽遠(yuǎn)不止于此,它還提供了一系列的表現(xiàn)標(biāo)簽,例如form標(biāo)簽等。因此,還是需要在FreeMarker模板中使用Strut2標(biāo)簽.
在內(nèi)容管理系統(tǒng)的持久層的上方是業(yè)務(wù)邏輯層,在該層中主要負(fù)責(zé)企業(yè)信息內(nèi)容的業(yè)務(wù)管理,包括欄目、新聞信息等。
業(yè)務(wù)邏輯層在代碼中主要體現(xiàn)在Service層,Service層大多時(shí)候都是簡(jiǎn)單的調(diào)用DAO里面的方法,但沒(méi)有它又不行,因?yàn)橛行?fù)雜的業(yè)務(wù)邏輯就需要在Service層完成,否則易造成業(yè)務(wù)代碼和底層的代碼混亂,對(duì)以后功能的修改帶來(lái)災(zāi)難性的影響,而且Service層也是Spring實(shí)現(xiàn)事務(wù)控制的地方。
Service層設(shè)計(jì)的時(shí)候首先需要對(duì)上層使用到的對(duì)象定義一系列接口,所有與業(yè)務(wù)層有交互的代碼都應(yīng)該通過(guò)這些接口實(shí)現(xiàn)。對(duì)于由Spring負(fù)責(zé)管理的對(duì)象,可以通過(guò)依賴注入加以實(shí)現(xiàn)。在Service層還不得不提到的一點(diǎn)就是 Spring處理的事務(wù)管理,Spring提供兩種事務(wù)處理的方法:聲明式事務(wù)和編程式事務(wù)。聲明式事務(wù)是借助于Spring AOP模塊來(lái)實(shí)現(xiàn),是系統(tǒng)級(jí)的事務(wù)管理,在內(nèi)容管理系統(tǒng)開(kāi)發(fā)中也用到了該事務(wù)管理方法.另外在內(nèi)容管理系統(tǒng)設(shè)計(jì)時(shí)還要額外注意事務(wù)邊界的劃分,例如在處理聲明式事務(wù)管理功能時(shí),那就需要將事務(wù)控制在方法層面,這樣可以將多次的調(diào)用封裝在同一個(gè)事務(wù)之中.使用 Spring的聲明式事務(wù)管理,業(yè)務(wù)接口的方法就是事務(wù)的邊界。
數(shù)據(jù)庫(kù)持久層的設(shè)計(jì)目標(biāo)是為整個(gè)項(xiàng)目提供一個(gè)高層、統(tǒng)一、安全和并發(fā)的層設(shè)計(jì)的好壞很大程度上決定了是否能完成該項(xiàng)目。此時(shí)可以考慮采用數(shù)據(jù)持久層框架,本項(xiàng)目采用了Hibernate,它提供了數(shù)據(jù)訪問(wèn)方法,能夠使其它程序數(shù)據(jù)持久機(jī)制,程序員避免手工編寫程序訪問(wèn)數(shù)據(jù)持久層,使其專注于業(yè)務(wù)邏輯的開(kāi)發(fā),并且能夠在不同項(xiàng)目中重用映射框架,大大簡(jiǎn)化了數(shù)據(jù)增、刪、改、查等功能的開(kāi)發(fā)過(guò)程,同時(shí)又不喪失多層結(jié)構(gòu)的天然優(yōu)勢(shì),集成延續(xù)JAVAEE特有的可伸縮性和可擴(kuò)展性[6]。
內(nèi)容管理系統(tǒng)數(shù)據(jù)庫(kù)表主要包含:用戶信息部分、權(quán)限部分、模板部分。在設(shè)計(jì)數(shù)據(jù)庫(kù)表時(shí)要遵守規(guī)范式的設(shè)計(jì)要求,已達(dá)到數(shù)據(jù)庫(kù)表設(shè)計(jì)的合理化。同時(shí)為了保證數(shù)據(jù)庫(kù)的一致性和完整性,要為數(shù)據(jù)庫(kù)表設(shè)計(jì)相應(yīng)的關(guān)鍵字、識(shí)別、缺省等信息。Struts+Spring+Hibernate,實(shí)現(xiàn)了系統(tǒng)層次的松散耦合,框架把業(yè)務(wù)邏輯和持久性邏輯分開(kāi)能減輕了開(kāi)發(fā)人員從頭構(gòu)建持久層代碼的精力,從而集中精力來(lái)處理邏輯問(wèn)題,分層的另一大好處是,對(duì)日后系統(tǒng)的升級(jí)和維護(hù)帶來(lái)很大的好處。在分層的基礎(chǔ)上進(jìn)一步實(shí)現(xiàn)是下一步的目標(biāo)。
[1]熊文,方亮,張淑芳.三層web體系結(jié)構(gòu)的特點(diǎn)與比較[J].計(jì)算機(jī)應(yīng)用與研究,2006:61-63.XIONG Wen,F(xiàn)ANG Liang,ZHANG Shu-fang.The characteristics and comparation of the three-tier web architecture[J].Application Research of Computers,2006:61-63.
[2]李發(fā)英,朱海濱.基于Struts+Hibernate的Web應(yīng)用的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2009(4):91-94.LI Fa-ying,ZHU Hai-bin.Design and implementation of Web applications based on Struts+Hibernate[J].Technology and Development of Computers,2009(4):91-94.
[3]李邵平,彭志平.一種Web應(yīng)用框架及其實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2009(8):117-119.LI Shao-ping,PENG Zhi-ping.An implementation of the Web application framework[J].Technology and Development of Computers,2009(8):117-119
[4]潘春華,李悅,唐茂元.基于Spring框架的北京林業(yè)大學(xué)圖書館門戶系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代情報(bào),2008(4):169-172.PAN Chun-hua,LI Yue,TANG Mao-yuan.The library portal system design and implementation of the Beijing Forestry University based on the spring framework[J].Modern Information,2008(4):169-172.
[5]徐博藝,姜麗紅,董理.一種基于J2EE的軟件架構(gòu)的研究與應(yīng)用[J].計(jì)算機(jī)應(yīng)用研究,2006,23(9):146-148 XU Bo-yi,JIANG Li-hong,DONG Li.Research and application of a kind of software architecture based on J2EE[J].Application Research of Computers,2006,23(9):146-148.
[6]JIANG Zi-jing.The analysis and design of the content management system based on J2EE[EB/OL].(2009)http://www.dco88.com/p-199579990680.html