畢業(yè)論文-基于Java EE的內(nèi)容管理系統(tǒng)
《畢業(yè)論文-基于Java EE的內(nèi)容管理系統(tǒng)》由會員分享,可在線閱讀,更多相關《畢業(yè)論文-基于Java EE的內(nèi)容管理系統(tǒng)(41頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、濟南大學畢業(yè)設計 摘 要 本設計旨在開發(fā)一款基于Java EE的內(nèi)容管理系統(tǒng)(Content Management System,簡稱CMS),系統(tǒng)面向開發(fā)人員,提供一套切實可行的內(nèi)容管理系統(tǒng)基礎開發(fā)架構(gòu)解決方案,以開放源代碼的方式為開發(fā)人員提供一套內(nèi)容管理系統(tǒng)的二次開發(fā)框架,將開發(fā)人員從繁重的前期開發(fā)過程中解放出來。 系統(tǒng)基于JavaEE平臺開發(fā),構(gòu)建在Spring框架之上,借助Spring Roo快速開發(fā)技術實現(xiàn)數(shù)據(jù)訪問層以及Service層的快速開發(fā),使用AspectJ實現(xiàn)編譯時織入訪問權(quán)限控制以及內(nèi)建聲明式緩存解決方案,實現(xiàn)了一套基本的內(nèi)容管理系統(tǒng)所應具有的基礎功能,如RB
2、AC訪問權(quán)限控制、用戶管理、內(nèi)容發(fā)布管理、公告管理、站內(nèi)信、友情鏈接等,使得開發(fā)人員在項目開發(fā)中專注于系統(tǒng)業(yè)務邏輯開發(fā),緩解開發(fā)人員的工作壓力,提高項目開發(fā)效率,縮短項目開發(fā)周期。 關鍵詞:CMS;內(nèi)容管理系統(tǒng);二次開發(fā)平臺;Spring ABSTRACT This design is to develop a Content Management System(CMS), the system is for developer, it supply a useful framework of secondary development based on Content Manag
3、ement System . This basic infrastructure solution make the developer get rid of the heavy work . The system is developed based on Java EE platform, and build with Spring framework , we take fully advantage of Spring Roo Rapid application development tool to build our data access and service layer,
4、 by using AspectJ, we weaving access control and cache solution in compile time, Implements a set of basic functions of a CMS should have, such as role based access control, user management, content publish management, announce management, blogroll management .The system make developer focus on busi
5、ness logic, Relieve the pressure on developers, improve the efficiency of project development, and shortening the project cycle and improving product quality. Key words:CMS;Secondary development platform;Spring 目錄 摘 要 I ABSTRACT II 目錄 III 1 系統(tǒng)開發(fā)背景 1 1.1 內(nèi)容管理系統(tǒng)概論 1 1.2 國內(nèi)外內(nèi)容管理系統(tǒng)發(fā)展現(xiàn)狀 2
6、1.3本文檔結(jié)構(gòu) 2 2 系統(tǒng)架構(gòu)技術及開發(fā)工具概述 4 2.1 開發(fā)工具 4 2.1.1 Spring Tool Suite 4 2.1.2 操作系統(tǒng)平臺 5 2.1.3 Spring Roo 5 2.2 開發(fā)技術概要 5 2.2.1 Java EE技術 6 2.2.2 Spring Framework 6 2.2.3 AspectJ 9 2.2.4 Hibernate 10 2.2.5 Dwr 10 2.2.6 Bootstrap 11 3 系統(tǒng)總體設計 12 3.1 需求分析 12 3.1.1 傳統(tǒng)Java EE企業(yè)架構(gòu)的不足 12 3.1.2 本系統(tǒng)開發(fā)
7、需求 13 3.1.3 性能需求 15 3.2 系統(tǒng)整體架構(gòu) 15 3.2.1 系統(tǒng)架構(gòu)模式 15 3.2.2 系統(tǒng)目錄結(jié)構(gòu) 17 3.3 系統(tǒng)核心模塊設計 20 3.3.1 基于AOP的訪問權(quán)限控制 20 3.3.2 基于Annotation的聲明式緩存方案 25 3.2.3 擴展開發(fā) 27 4 項目管理和測試 32 4.1 項目管理 32 4.1.1基于Maven的依賴管理 32 4.1.2代碼托管Github 32 4.2 系統(tǒng)測試 33 4.2.1 單元測試 33 4.2.2 系統(tǒng)運行測試 34 結(jié) 論 35 參 考 文 獻 36 致 謝
8、 37 IV 1 系統(tǒng)開發(fā)背景 1.1 內(nèi)容管理系統(tǒng)概論 網(wǎng)站內(nèi)容管理系統(tǒng), 即 Content Management System ,英文縮寫是CMS。 網(wǎng)站內(nèi)容管理系統(tǒng)具有許多基于模板的優(yōu)秀設計,可以加快網(wǎng)站開發(fā)的速度和減少開發(fā)的成本。 網(wǎng)站內(nèi)容管理系統(tǒng)的功能并不只限于文本處理,它也可以處理圖片、Flash動畫、聲像流、圖像甚至電子郵件檔案。 網(wǎng)站內(nèi)容管理系統(tǒng)其實是一個很廣泛的稱呼,從一般的博客程序,新聞發(fā)布程序,到綜合性的網(wǎng)站管理程序都可以被稱為內(nèi)容管理系統(tǒng)。 內(nèi)容管理系統(tǒng)是一個很泛的概念:從商業(yè)門戶網(wǎng)站的新聞系統(tǒng)到個人的博客都可以稱作是內(nèi)容發(fā)布系統(tǒng)。 根據(jù)不
9、同的需求,網(wǎng)站內(nèi)容管理系統(tǒng)有幾種不同的分類方法。比如,根據(jù)應用層面的不同,可以被劃分為: (1) 重視后臺管理的網(wǎng)站內(nèi)容管理系統(tǒng) (2) 重視風格設計的網(wǎng)站內(nèi)容管理系統(tǒng) (3) 重視前臺發(fā)布的網(wǎng)站內(nèi)容管理系統(tǒng) 根據(jù)系統(tǒng)的開發(fā)方式有可以劃分為: (1) 框架型:本身不包含任何的實現(xiàn),只是提供了底層的框架,開發(fā)人員可以在此基礎之上根據(jù)需求進行二次開發(fā),實現(xiàn)項目需要的功能。 (2) 應用型:本身是一個面向具體類型的應用實現(xiàn),已經(jīng)包含了新聞/評論管理,投票,論壇,WIKI等一些子系統(tǒng)。 就已經(jīng)存在的各種CMS來說,最終界面上都是大同小異,但是在編程風格與管理方式上來講卻是千差萬別。 就
10、CMS本身被設計出來的出發(fā)點來說,應該是方便一些對于各種網(wǎng)絡編程語言并不是很熟悉的用戶用一種比較簡單的方式來管理自己的網(wǎng)站。這雖然是本身的出發(fā)點,但由于各個CMS系統(tǒng)的原創(chuàng)者們自己本身的背景與對“簡單”這兩個字的理解程度的不同,就造成了沒有統(tǒng)一的標準群雄紛爭的局面。 簡而言之,CMS就是可以讓你不需要學習復雜的建站技術,不需要學習太多復雜的程序設計語言,你就能夠利用CMS構(gòu)建出一個風格統(tǒng)一功能強大的專業(yè)網(wǎng)站。 根據(jù)需求不同,內(nèi)容管理系統(tǒng)又可以被分離成以下幾個層面: 后臺業(yè)務管理子系統(tǒng):后臺管理系統(tǒng)主要包含新聞錄入、論壇管理、全文檢索等,針對不同的需求,提供不同的內(nèi)容錄入管理方式,比如所見
11、即所得的編輯界面或者是基于代碼的管理頁面,系統(tǒng)權(quán)限控制等側(cè)重于管理。 門戶系統(tǒng): 門戶系統(tǒng)是表現(xiàn)優(yōu)先的,系統(tǒng)大部分的最終輸出頁面,網(wǎng)站首頁, 子頻道,專題,新聞詳情等各種模塊的組合,這種發(fā)布組合邏輯是非常豐富的,門戶系統(tǒng)就是負責以上這些后臺子系統(tǒng)的組合表現(xiàn)管理。 前臺發(fā)布系統(tǒng): 這一部分是效率優(yōu)先的,面向最終用戶的緩存發(fā)布以及搜索引擎爬蟲和URL的設計等。 1.2 國內(nèi)外內(nèi)容管理系統(tǒng)發(fā)展現(xiàn)狀 目前不論是國內(nèi)國外,都有大量優(yōu)秀的CMS系統(tǒng),這些CMS大都專注于特定領域,當然,隨著技術的進步和發(fā)展,也有部分廠商為多數(shù)應用領域都提供了內(nèi)容管理的解決方案。 比較著名的WordPress起初只
12、是一款博客平臺,到現(xiàn)在已經(jīng)發(fā)展為了一款綜合的CMS管理平臺,當然它的主要功能還是博客,但是通過插件機制,可以很輕松的實現(xiàn)公司宣傳網(wǎng)站,作品集網(wǎng)、圖庫甚至是全功能的商業(yè)網(wǎng)站。WordPress的后端非常直觀易用,操作都是標準化的,只要你學會了一個管理模塊的操作,其它部分的操作就得心應手了,它的功能組織也非??茖W,很容易找到需要的功能,其所見即所得的編輯器功能非常強大,包括插入圖像、視頻和其它媒體,可以在HTML模式和可視化模式之間輕松來回切換。 Joomla是目前最流行的開源CMS系統(tǒng),它運行在PHP和MySQL上,后臺相對簡單易用,包括文章管理、頭版、菜單、媒體和其它內(nèi)容,下拉菜單也有許多選
13、項,Joomla有一個好用的所見即所得編輯器,支持大量的格式化選項和表情。 當然,國內(nèi)也有很多優(yōu)秀的CMS系統(tǒng),較為常見的諸如Discuz是一款老牌的論壇管理系統(tǒng),而PHPCMS則以文章發(fā)布以及二次開發(fā)等著稱。 Discuz是康盛創(chuàng)想(北京)科技有限公司(英文簡稱Comsenz)推出的一套通用的社區(qū)論壇軟件系統(tǒng),用戶可以在不需要任何編程的基礎上,通過簡單的設置和安裝,在互聯(lián)網(wǎng)上搭建起具備完善功能、很強負載能力和可高度定制的論壇服務。Discuz! 的基礎架構(gòu)采用世界上最流行的web編程組合PHP+MySQL實現(xiàn),是一個經(jīng)過完善設計,適用于各種服務器環(huán)境的高效論壇系統(tǒng)解決方案。 PHPCM
14、S采用模塊化開發(fā),支持多種分類方式,使用它可方便實現(xiàn)個性化網(wǎng)站的設計、開發(fā)與維護。它支持眾多的程序組合,可輕松實現(xiàn)網(wǎng)站平臺遷移,并可廣泛滿足各種規(guī)模的網(wǎng)站需求,可靠性高,是一款具備文章、下載、圖片、分類信息、影視、商城、采集、財務等眾多功能的強大、易用、可擴展的優(yōu)秀網(wǎng)站管理軟件。 1.3本文檔結(jié)構(gòu) 在本文檔中,將會介紹如下內(nèi)容。 在第一章中,也就是上面的章節(jié)中,介紹了什么是內(nèi)容管理系統(tǒng)以及當前國內(nèi)外內(nèi)容管理系統(tǒng)技術發(fā)展的現(xiàn)狀。 第二章將會對系統(tǒng)開發(fā)過程中使用的技術以及開發(fā)工具進行一個簡要的描述,使得在后面的文檔閱讀過程中,對文檔中提到的一些工具以及技術有一個概要性的了解,方便文檔的閱讀
15、。 第三章是對系統(tǒng)總體設計的概述,主要包含了項目開發(fā)前期的需求分析、系統(tǒng)的整體架構(gòu)以及系統(tǒng)核心模塊的設計,在閱讀完該部分后,將會對系統(tǒng)的總體架構(gòu)以及核心技術有一個簡要的了解。 第四章是對系統(tǒng)開發(fā)過程中項目管理以及系統(tǒng)測試的說明,系統(tǒng)是基于Maven進行項目管理的,因此有必要對Maven進行一些說明,同時,項目代碼托管于Github,測試作為系統(tǒng)開發(fā)的重要環(huán)節(jié),在這里也會有一個概括性的描述。 最后是結(jié)論,該部分主要描述了系統(tǒng)完成情況以及系統(tǒng)開發(fā)過程中的一些問題和今后的開發(fā)方向等。 2 系統(tǒng)架構(gòu)技術及開發(fā)工具概述 2.1 開發(fā)工具 2.1.1 Spring Tool Suite S
16、pring Tool Suite(STS)是一款基于Eclipse的IDE, 它為開發(fā)基于Spring的企業(yè)應用而產(chǎn)生,提供了最好的Eclipse開發(fā)環(huán)境,STS同時也提供了最新的基于JAVA和Spring應用開發(fā)所需要的所有工具,并且配備了最新的Eclipse版本。 STS同時也為Java企業(yè)級應用開發(fā)提供了一些其它的特性,比如基于Spring DM Server的OSGi開發(fā),以及一些其它的Spring項目支持,如Spring Roo, Spring Batch等。Spring Tool Suite如圖2.1所示。 圖2.1 Spring Tool Suite 與MyEclips
17、e等編輯器不同,STS在提供大量開發(fā)者需要的功能以及對Eclipse進行各種優(yōu)化的同時,對STS也采用了開源免費使用的策略,因此,使用STS進行JAVA甚至是Groovy等基于JVM的編程語言的開發(fā)是完全免費的,任何人都可以無限制的使用它。 當然,STS并不強制你使用完整的STS編輯器進行開發(fā),如果更喜歡原生的Eclipse IDE的話,可以通過STS的在線更新連接對Eclpse進行更新,安裝STS的插件,使得使用原生的eclipse也可以體驗STS的強大功能。 2.1.2 操作系統(tǒng)平臺 由于系統(tǒng)采用Java語言進行開發(fā),自然繼承了Java語言的跨平臺特性,不僅支持windows下的開發(fā)
18、以及部署,任何支持jvm的操作系統(tǒng)平臺都可以平穩(wěn)的運行。 2.1.3 Spring Roo Spring Roo是針對 Java 技術的一個可擴展的、基于文本的開源 RAD 工具。它是用于創(chuàng)建和管理基于 Spring 的應用程序的一個強大資源。 Spring Roo是SpringSource新的開放源碼技術,該技術主要面向企業(yè)級Java應用的開發(fā)者,該工具在不犧牲工程的完整和靈活性的基礎上,簡化了開發(fā)人員的開發(fā)工作。不管是對Java新手還是資深的架構(gòu)師,Spring Roo都可以在短短的幾分鐘內(nèi)構(gòu)建一個全面完整的工作應用。 Spring Roo是用來創(chuàng)建Spring工程的工具,它通過一
19、系列的命令快捷的建立起一個基于Spring的項目,通過不同的命令,可以完成Spring框架的大部分特性的操作。 Spring 框架于 2002 年年底發(fā)布,目的在于簡化 J2EE(目前是 JavaEE)開發(fā)。在過去 8 年中,Spring 成功完成了該使命,提供了 Java 社區(qū)框架或功能,比如 Spring Security、Spring MVC、事務管理、Spring 批處理和 Spring 集成,這都易于理解和使用。Spring 希望讓 Java 開發(fā)人員的工作更輕松、更富成效。為此,Spring 創(chuàng)建了一個名為 Spring Roo 的開發(fā)工具。 使用Spring Roo,你可以動
20、態(tài)的添加和配置JPA、Spring MVC、Spring Security等功能,使用log4j進行日志記錄,Junit進行單元測試以及jms,電子郵件等框架,僅需要在Roo shell中敲入相應的命令即可。使用Spring roo添加這些常用的功能極大的節(jié)省了開發(fā)時間,提高了開發(fā)人員的生產(chǎn)效率。Roo不能用于編寫業(yè)務邏輯,單完全可以用來管理程序的基礎結(jié)構(gòu)或者是配置。 Roo是一個開發(fā)時間工具,這意味著應用程序運行時應該獨立運行著Roo。由于Roo通過AspectJ對代碼完成了編譯時織入代碼,因此,在最終的產(chǎn)品中,并不會存在SpringRoo部分,因此,對系統(tǒng)性能和內(nèi)存開銷不會有任何影響,同
21、時也確保了最終項目不會依賴于Spring Roo,只需要幾個按鍵就可以從項目中完整的刪除Roo。 2.2 開發(fā)技術概要 在該項目的開發(fā)過程中,用到了許多技術,這一章,對主要用到的技術進行一個簡要的概括。 2.2.1 Java EE技術 Java是一種可以用來編寫跨平臺應用軟件的面向?qū)ο蟮拈_發(fā)語言,它與1995年由Sun公司開發(fā),現(xiàn)在屬于Oracle公司旗下。Java技術具有卓越的通用性、高效性、平臺移植性以及安全性,廣泛的應用于個人電腦,服務器、數(shù)據(jù)中心、高性能計算機以及智能手機和互聯(lián)網(wǎng)等各個領域,擁有全球最大得開發(fā)者專業(yè)社群。在全球云計算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著
22、的優(yōu)勢和廣闊的前景。 Java主要有四個部分組成:Java編程語言、Java類文件格式、Java虛擬機以及Java API。Java自誕生之日起,分為了三個體系:Java EE, Java SE, Java ME。 與傳統(tǒng)程序不同,Sun公司在推出Java之際將其作為了一種開放的技術。全球數(shù)以萬計的開發(fā)公司被要求設計的java軟件必須相互兼容。Java語言靠群眾力量而非公司力量是java公司的口號之一,并獲得了廣大的軟件開發(fā)商的認同。這與微軟公司所倡導的的注重精英和封閉式的模式完全不同。 Sun公司對java編程語言的解釋是:java編程語言是個簡單的、面向?qū)ο蟮摹⒎植际?、解釋性、健壯?/p>
23、安全與系統(tǒng)無關、可移植、高性能、多線程和動態(tài)的語言。 Java平臺是基于java語言的平臺。這樣的平臺非常流行。因此微軟公司推出了欲與其進行競爭并且模仿java語言的C#語言。 2.2.2 Spring Framework Sprng開發(fā)框架是一個非?;钴S的開源項目,它是一個基于IoC和AOP的Java EE系統(tǒng)框架,它不強迫你必須去使用它,而是將各種功能進行高度解耦,開發(fā)人員可以按照自己的喜好去選擇使用這些組件中的某一個或者是某幾個。 Spring框架通過IoC(控制反轉(zhuǎn)/依賴注入)實現(xiàn)了對Bean的管理,開發(fā)人員只需要關注具體業(yè)務邏輯的開發(fā),不必要花費過多的時間在Bean的管理上,
24、極大的降低了Java開發(fā)的難度,提高了開發(fā)效率,減少了開發(fā)過程中出現(xiàn)的各種問題,使得應用的開發(fā)組建更加快捷簡易。Spring IoC如圖2.2所示。 圖2.2 Spring IoC Spring是一個全功能的開發(fā)框架,從數(shù)據(jù)訪問層到事務管理,以及web層等都提供了強有力的支持,Spring建議采用面向接口開發(fā),通過接口的實現(xiàn),使得應用程序的各部分組建之間最大程度的解耦,實現(xiàn)了各個層次之間的分離。 Spring同時提供了強大的AOP支持,所謂的AOP就是面向切面編程,它通過預編譯以及運行期間代理實現(xiàn)了在不修改源代碼的情況下給程序動態(tài)統(tǒng)一的添加功能的一種技術。AOP實際上是Gof
25、設計模式的一種延續(xù),設計模式孜孜不倦的追求的是調(diào)用者與被調(diào)用者之間的解耦,AOP可以說是這種目標的一種實現(xiàn)。 AOP、OOP在字面上雖然非常類似,但卻是面向不同領域的兩種設計思想。OOP(面向?qū)ο缶幊蹋┽槍I(yè)務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效的邏輯單元劃分。 而AOP則是針對業(yè)務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。這兩種設計思想在目標上有著本質(zhì)的差異。Spring AOP代理如圖2.3所示。 圖2.3 Spring AOP代理 Spring框架是一個分層的架構(gòu),它主要有七個定義良
26、好的模塊組成。Spring模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理bean的方式。Spring功能模塊如圖2.4所示。 圖2.4 Spring功能模塊圖 Spring MVC屬于SpringFramework的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow中。Spring 框架提供了構(gòu)建Web應用程序的全功能的MVC模塊。使用 Spring 可插入的 MVC 架構(gòu),可以選擇是使用內(nèi)置的 Spring Web 框架還可以是 Struts 這樣的 Web 框架。通過策略接口,Spring 框架是高度可配置的,而且包含多種視圖技術,例如 JavaServer Pa
27、ges(JSP)技術、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的視圖,所以不會強迫您只使用 JSP 技術。Spring MVC 分離了控制器、模型對象、分派器以及處理程序?qū)ο蟮慕巧?,這種分離讓它們更容易進行定制。Spring MVC架構(gòu)如圖2.5所示。 圖2.5 Spring MVC架構(gòu) 2.2.3 AspectJ AspectJ是一個面向切面的框架,它擴展了Java語言。AspectJ定義了AOP語法所以它有一個專門的編譯器用來生成遵守Java字節(jié)編碼規(guī)范的Class文件。 AspectJ的動機是發(fā)現(xiàn)那些使用傳統(tǒng)編程方法
28、無法很好處理的問題。考慮一個應用中的安全策略問題。安全性始終貫穿與系統(tǒng)的所有模塊之間,每個模塊都需要安全機制才能保證整個系統(tǒng)的安全性,這里的安全策略實際上就是一個橫切關注點,使用傳統(tǒng)的編程解決此問題是相當困難并且很容易產(chǎn)生各種差錯,這就是AOP發(fā)揮作用的時候了。@AspectJ使用了Java5的注解,可以將切面聲明為普通的java類。 在傳統(tǒng)的面向?qū)ο缶幊讨校恳粋€單元就是一個類,而類似于安全性這方面的問題,它們通常不能集中在一個類中處理,因為他們橫切多個類,這就導致了代碼無法重用,可以維護性差而產(chǎn)生了大量的代碼冗余,這是我們都不喜歡看到的。 面向方面編程的出現(xiàn)正好給處于黑暗中的我們帶來了
29、光明,它針對于這些橫切關注點進行處理,就好像面向?qū)ο缶幊烫幚硪话愕年P注點一樣。而作為AOP的具體實現(xiàn)之一的AspectJ,它向Java中加入了連接點(Join Point)這個新概念,其實它也只是現(xiàn)存的一個Java概念的名稱而已。它向Java語言中加入少許新結(jié)構(gòu):切點(pointcut)、通知(Advice)、類型間聲明(Inter-type declaration)和方面(Aspect)。切點和通知動態(tài)地影響程序流程,類型間聲明則是靜態(tài)的影響程序的類等級結(jié)構(gòu),而方面則是對所有這些新結(jié)構(gòu)的封裝。 2.2.4 Hibernate Hibernate是一種Java語言下的對象關系映射解決方案。
30、 它是使用GNU寬通用公共許可證發(fā)行的自由、開源的軟件。它為面向?qū)ο蟮念I域模型到傳統(tǒng)的關系型數(shù)據(jù)庫的映射,提供了一個使用方便的框架。Hibernate也是目前Java開發(fā)中最為流行的數(shù)據(jù)庫持久層框架,現(xiàn)已歸JBOSS所有。 它的設計目標是將軟件開發(fā)人員從大量相同的數(shù)據(jù)持久層相關編程工作中解放出來。無論是從設計草案還是從一個遺留數(shù)據(jù)庫開始,開發(fā)人員都可以采用Hibernate。 Hibernate不僅負責從Java類到數(shù)據(jù)庫表的映射(還包括從Java數(shù)據(jù)類型到SQL數(shù)據(jù)類型的映射),還提供了面向?qū)ο蟮臄?shù)據(jù)查詢檢索機制,從而極大地縮短的手動處理SQL和JDBC上的開發(fā)時間。Hibernate技
31、術架構(gòu)如圖2.6所示。 圖2.6 Hibernate技術架構(gòu) 2.2.5 Dwr Dwr(Direct Web Remoting)是一個允許基于java的服務端應用程序和基于javascript的瀏覽器之間以盡可能簡單的方式進行直接交互的java類庫。它可以幫助開發(fā)人員開發(fā)出包含Ajax技術的網(wǎng)站。Dwr概述如圖2.7所示。 Dwr主要包含兩個部分: (1) 允許Javascript從web服務器上一個遵循了ajax原則的Servlet中獲取數(shù)據(jù)。 (2) 幫助web開發(fā)人員輕松的獲取數(shù)據(jù)動態(tài)改變網(wǎng)站內(nèi)容。 圖2.7 Dwr概述 2.2.6 Boots
32、trap Bootstrap是快速開發(fā)Web應用程序的前端工具包。它是一個CSS和HTML的集合,它使用了最新的瀏覽器技術,給你的Web開發(fā)提供了時尚的版式,表單,buttons,表格,網(wǎng)格系統(tǒng)等等。 3 系統(tǒng)總體設計 3.1 需求分析 本系統(tǒng)是一款基于Java EE平臺,建立在Spring MVC之上的一款方便二次開發(fā)的內(nèi)容管理系統(tǒng)(CMS)。本系統(tǒng)是一款基于B/S架構(gòu)的內(nèi)容管理系統(tǒng),用戶以及管理人員通過網(wǎng)絡瀏覽器對服務器上的系統(tǒng)進行訪問,不需再安裝任何客戶端軟件。 3.1.1 傳統(tǒng)Java EE企業(yè)架構(gòu)的不足 在傳統(tǒng)的Java EE開發(fā)過程中,通常我們會將整個系統(tǒng)分為四個層次
33、: 表現(xiàn)層、業(yè)務層、持久層、平臺層。JavaEE架構(gòu)分層如圖3.1所示。 圖3.1 Java EE架構(gòu)分層 由于平臺層處于最底層,作為JavaEE架構(gòu)的運行環(huán)境,在這里我們不需要太多關注,在傳統(tǒng)的開發(fā)過程中,開發(fā)人員關系最密切的往往是持久層、業(yè)務層、表現(xiàn)層。 對于每一個項目而言,我們需要開發(fā)它的持久層、業(yè)務層、表現(xiàn)層,但是在大量的開發(fā)實踐過程中,我們會發(fā)現(xiàn),持久層所做的事情都是比較類似的,無外乎對實體關系進行映射,完成對數(shù)據(jù)庫的操作,常見的持久層我們通常會使用JPA、Hibernate或者是iBatis。由于在不同的項目中,持久層總是非常相似的,開發(fā)人員需要定義各種實體,然后
34、添加需要的數(shù)據(jù)表對應的字段,為這些字段添加相對應的get/set方法,而在DAO層,需要實現(xiàn)對各個實體的增刪改查操作,一旦數(shù)據(jù)表的數(shù)量增大,給開發(fā)人員造成的開發(fā)工作量是很大也很繁瑣的。分層架構(gòu)如圖3.2所示。 圖3. 2 分層架構(gòu) 3.1.2 本系統(tǒng)開發(fā)需求 本系統(tǒng)旨在建立一套基于Java EE企業(yè)架構(gòu)的內(nèi)容管理系統(tǒng),通過這樣一套系統(tǒng)能夠極大的減輕開發(fā)人員開發(fā)工作量,開發(fā)人員不需要關注底層如果實現(xiàn),只需要按照預定的規(guī)范進行開發(fā),同時,系統(tǒng)將提供基于eclipse的模板,極大的減輕開發(fā)過程中需要手寫代碼的工作量。 本系統(tǒng)采用了Spring Roo技術,通過AspectJ的編譯
35、時織入的強大功能,可以在項目編譯時完成很多需要手動完成的操作,以往的持久層開發(fā)往往需要定義字段、添加get/set方法、添加DAO層等一系列的步驟,但是使用了SpringRoo之后,開發(fā)人員可以通過命令或者是手動的寫入文件并加以相關注解的方式實現(xiàn)實體以及相關的get/set方法,對數(shù)據(jù)的增刪改查操作以及復雜的查詢操作等。 對于表現(xiàn)層來說,常見的開發(fā)技術室采用Jsp進行開發(fā),當然也可以使用JSF以及Freemarker等模板技術,在使用Jsp開發(fā)過程中,我們往往需要編寫大量的html以及javascript代碼以實現(xiàn)需要的功能,大量的html以及javascrit充斥著整個web的前端系統(tǒng),造
36、成開發(fā)人員代碼維護難度增大,而且,往往大部分開發(fā)人員對已頁面設計等并不關注,因此,很難做出符合要求以及合適的頁面,為了解決這個問題,在本系統(tǒng)的開發(fā)過程中,封裝了大量的標簽,組成一套專注于系統(tǒng)后臺開發(fā)的標簽庫,幫助開發(fā)人員完成頁面的開發(fā),基本事件處理,頁面布局,各種控件的增強,文件上傳等。 業(yè)務邏輯層往往是開發(fā)人員專注的領域,因此,開發(fā)人員可以通過在Service層結(jié)合Controller層完成系統(tǒng)開發(fā)任務。 系統(tǒng)需要提供一套完善的基于角色的訪問控制系統(tǒng)(RBAC),以及在系統(tǒng)開發(fā)過程中常用的組件: (1)基于角色的訪問控制系統(tǒng) 實現(xiàn)一套完善的基于角色的訪問控制系統(tǒng),能夠?qū)芾碛脩舭凑战?/p>
37、色進行授權(quán),只有授權(quán)用戶才能訪問相應的模塊,提供對角色的增刪改查操作,提供對系統(tǒng)權(quán)限的控制,用戶管理(包含增刪改查操作),當然,對一套基于角色的訪問控制系統(tǒng)而言,菜單的管理以及自動生成也是至關重要的,通過對菜單的管理,為每個角色可以分配不同的菜單。 (2)緩存方案 提供一套切實可行的緩存方案,減少緩存操作代碼量,以最簡化的方式實現(xiàn)緩存,主要提供基于內(nèi)存和基于磁盤文件的兩種緩存實現(xiàn),后續(xù)考慮實現(xiàn)基于memcached的分布式緩存。 (3)友情鏈接管理 友情鏈接在一般網(wǎng)站中都作為基本組件提供,因此,系統(tǒng)很有必要提供一套友情鏈接管理功能,能夠?qū)崿F(xiàn)對友情鏈接的排序,分組,以及上傳鏈接圖片等操作
38、。 (4)公告管理 作為一款內(nèi)容發(fā)布系統(tǒng),公告管理是不可或缺的,因此,系統(tǒng)需要提供一套公告管理系統(tǒng),能夠方便管理人員發(fā)布公告,設定公告有效時間等。 (5)內(nèi)容發(fā)布管理 內(nèi)容發(fā)布作為系統(tǒng)的主要功能,需要完成對文章內(nèi)容的管理,主要包含內(nèi)容分類管理,內(nèi)容發(fā)布管理,內(nèi)容緩存以及內(nèi)容模型的定制。 (6)廣告管理 實現(xiàn)站點廣告的管理,能夠?qū)V告進行分類,提供廣告圖片上傳,通過對廣告的分類,實現(xiàn)廣告位的管理等。 (7)消息管理 消息管理主要實現(xiàn)站內(nèi)信的管理,網(wǎng)站用戶之間的交流。 (8)站點配置 站點管理部分主要是完成對站點的基本配置。 (9)其它擴展功能 提供提供擴展功能,通過擴展,
39、可以為系統(tǒng)提供更多的擴展功能。 (10)代碼模板 提供常用代碼的eclipse模板,通過使用基于eclpse的IDE,可以迅速生成代碼,只需要做簡單的修改即可投入使用。 3.1.3 性能需求 本系統(tǒng)采用Spring Roo進行持久層以及Service層部分代碼開發(fā),由于Spring Roo采用了AspectJ的編譯時代碼織入功能,因此,在最終的產(chǎn)品代碼中,Spring Roo以及AspectJ的切面等代碼是不會存在的,在編譯過程中,這些代碼都被寫入了相應的類的二進制字節(jié)碼文件中,避免了調(diào)用額外代碼所產(chǎn)生的開銷。 系統(tǒng)采用獨立開發(fā)的緩存技術,通過AOP思想以及AspectJ的動態(tài)織入功
40、能,完成聲明式的緩存方案。 緩存技術的采用,使得系統(tǒng)運行過程中對數(shù)據(jù)庫的依賴減小,用少量內(nèi)存開銷換取了數(shù)據(jù)IO開銷,大幅度提高系統(tǒng)的運行效率。 3.2 系統(tǒng)整體架構(gòu) 本部分對系統(tǒng)的整體架構(gòu)進行簡要的描述,系統(tǒng)采用Spring Roo技術,在Spring Tool Suite IDE上完成開發(fā)。 3.2.1 系統(tǒng)架構(gòu)模式 系統(tǒng)基于Spring MVC開發(fā),拋棄了傳統(tǒng)開發(fā)中復雜的Model-Dao-Service-Web模式,而是在Dao層采用了Activity Record模式,簡化了數(shù)據(jù)持久層的開發(fā)。系統(tǒng)架構(gòu)如圖3.3所示。 圖3.3 系統(tǒng)架構(gòu) 系統(tǒng)主要包含五部分,分
41、別對應著系統(tǒng)五個主要的功能點,主要包括核心部分、擴展部分、直接遠程訪問部分、公開服務部分、前端站點部分。 其中核心部分是系統(tǒng)運行過程中必須的部分,該部分作為系統(tǒng)的基礎,支撐著整個系統(tǒng)的運行,擴展部分中,可以通過自定義添加不同的功能對框架功能進行擴展,實現(xiàn)支撐項目業(yè)務邏輯的模塊。直接遠程訪問部分允許使用Dwr、Hprose技術或者是其它技術完成直接遠程訪問,公開服務部分主要提供了常用的一些服務,如驗證碼、文件上傳等獨立于系統(tǒng)的服務。前端站點用戶向最終用戶展現(xiàn)網(wǎng)站內(nèi)容,屬于展現(xiàn)層的范疇。功能模塊劃分如圖3.4所示。 圖3.4 功能模塊劃分 3.2.2 系統(tǒng)目錄結(jié)構(gòu) 由于系統(tǒng)是支
42、持二次開發(fā)的,因此,很有必要在此描述一下系統(tǒng)的目錄結(jié)構(gòu),在了解了目錄結(jié)構(gòu)后,可以方便的對系統(tǒng)進行擴展開發(fā)。 整個系統(tǒng)的目錄結(jié)構(gòu)劃分的比較明確,不同目錄對應著不同的功能,正是清晰的目錄結(jié)構(gòu)劃分,才使得系統(tǒng)的模塊化變得更加清晰明確。源碼包結(jié)構(gòu)如圖3.5所示。 圖3.5 源碼包結(jié)構(gòu) 系統(tǒng)源碼部分目錄結(jié)構(gòu)主要分為核心部分、擴展部分、直接遠程訪問、開放服務、前端站點以及實用工具、助手類部分。 (1) 核心部分 核心部分包含了整個系統(tǒng)運行過程中必備的一些基本組件,如系統(tǒng)自定義的annotation,控制器/表單基類,數(shù)據(jù)字典,統(tǒng)一異常處理,主控制器,以及RBAC權(quán)限控制系統(tǒng)等 該部
43、分是系統(tǒng)的基礎組成部分,實現(xiàn)了系統(tǒng)運行所需的核心功能。 (2) 擴展部分 擴展部分對系統(tǒng)各個模塊的功能進行了劃分,盡最大程度保證了各個模塊之間的獨立性,該部分實現(xiàn)了系統(tǒng)需要實現(xiàn)的擴展功能,如公告管理,友情鏈接管理,內(nèi)容發(fā)布管理等等。 如果需要對系統(tǒng)功能進行擴展,可以在該包下建立相應的擴展包,實現(xiàn)自己的業(yè)務邏輯以及領域?qū)ο?。系統(tǒng)的RBAC權(quán)限控制系統(tǒng)在權(quán)限控制以及菜單管理方面會根據(jù)控制器所提供的annotation自動檢測到相應的功能實現(xiàn),只需要在后臺進行簡單的配置即可使用。 (3) 直接遠程訪問 該部分提供了兩種直接遠程訪問的實現(xiàn),一種是dwr技術,另一種是hprose技術,兩種技術
44、在這里都可以直接使用,當然,如果希望使用其他的實現(xiàn)技術的話,可以在這里手動添加。 系統(tǒng)后臺管理部分在頁面展現(xiàn)層和控制層之間的數(shù)據(jù)交互采用的了dwr技術實現(xiàn),因此,dwr實現(xiàn)作為系統(tǒng)默認直接遠程訪問實現(xiàn)是起著舉足輕重的作用的。 (4) 開放服務 該部分一般是對外完全開放的服務,事實上,該部分也是控制器實現(xiàn),只不過在AOP訪問控制方面,并沒有對該部分進行限制,因此,對于所有的瀏覽者來說,該部分是完全開放的,可以注意到,文件上傳部分也屬于開放服務,這是因為系統(tǒng)當前將上傳模塊獨立,通過對上傳資源的限制,以及上傳表單令牌機制,對該部分的安全性進行了管理,因此,該部分是安全的。 如果需要增加額外的
45、開放服務模塊,可以在這里增加,一般情況下,該部分的服務僅僅是提供內(nèi)容處理的,一般不包含頁面渲染。 (5) 前端站點 該部分用來預留該前端站點開發(fā),為了簡化前端開發(fā)模式,該部分采用了自定義的CmsDispatcherServlet進行管理,并將Spring上下文注入到前端模塊,因此,該部分是一個獨立的Spring Web模塊實現(xiàn)。 同時,該部分主要使用了核心模塊中提供的@Module和@FormModule注解。 1) @Module 該annotation的作用類似于傳統(tǒng)javaEE體系中的service層,該注解標注的類將作為前端Service,為前端標簽庫標簽提供數(shù)據(jù)訪問服務。
46、 2) @FormModule 該annotation的作用類似于web層,主要是完成前端標簽庫標簽的表單數(shù)據(jù)提交處理,提供站點普通用戶與系統(tǒng)之間的交互。 系統(tǒng)前端建議完全采用系統(tǒng)內(nèi)置的或者是開發(fā)人員自定義的JSP標簽開發(fā)。 (6) 實用工具、助手類 實用工具部分提供了系統(tǒng)常用的一些功能類如加解密、Json格式轉(zhuǎn)換、消息構(gòu)建器等。 助手類部分提供了系統(tǒng)的緩存方案以及方便權(quán)限和菜單管理的反射工具集。 3.3 系統(tǒng)核心模塊設計 本部分主要對系統(tǒng)中用到的核心模塊進行簡要的描述。 3.3.1 基于AOP的訪問權(quán)限控制 在傳統(tǒng)的Java EE應用程序中,采取的訪問控制往往是采用過濾器機
47、制實現(xiàn),通過過濾器攔截進站的web請求,然后再根據(jù)用戶要訪問的web地址進行分析,如果用戶擁有對該URL地址的訪問權(quán)限,則對用戶放行,這種實現(xiàn)有一個先天性的缺陷是只能夠?qū)eb層進行安全控制,無法很好的實現(xiàn)對任意方法的執(zhí)行進行權(quán)限控制,同時,過濾器的使用對系統(tǒng)運行性能也會產(chǎn)生一定的影響。 另外一種實現(xiàn)權(quán)限控制的方法是將角色權(quán)限的檢查的相關方法放在Controller類中,導致所有的訪問控制代碼分散在應用的各個部分,與業(yè)務邏輯代碼緊緊的耦合在一起,這就導致了程序的可重用性低,調(diào)試和維護代碼變得十分繁瑣,非常不利于軟件的開發(fā)。 針對以上兩種情況的弊端,在本系統(tǒng)中,將訪問控制模塊作為了一個橫切關
48、注點通過引入一個Aspect,將用戶角色訪問控制的相關代碼抽取出來,形成一個單獨的切面,通過AspectJ的編譯器在項目編譯時將訪問控制代碼織入到各個功能模塊中,有效的分離了功能模塊和訪問控制模塊,使得系統(tǒng)得以盡可能大的解耦。AOP實現(xiàn)權(quán)限控制原理如圖3.6所示。 圖3.6 AOP權(quán)限控制原理 為了開發(fā)過程中的方便,系統(tǒng)實現(xiàn)的權(quán)限控制系統(tǒng)支持開發(fā)者模式,在開發(fā)模式下,系統(tǒng)會對所有的方法訪問放行,因此,可以不用處處驗證是否有權(quán)限進行操作,方便開發(fā)調(diào)試系統(tǒng),當然,系統(tǒng)同樣支持超級管理員用戶,超級管理員用戶的賬號和密碼均采用sha256加密算法混淆加密后存儲在配置文件中,用戶登錄時,系統(tǒng)會判
49、斷是否是超級管理員登錄,如果是,則所有權(quán)限對超級管理員均開發(fā),可以方便在系統(tǒng)上線運行過程中,需要對系統(tǒng)進行相應的權(quán)限管理配置等。
在權(quán)限控制的過程中,通常會有一些方法是我們希望對所有用戶開放,任何人都可以直接訪問的或者是只允許匿名用戶訪問(如登錄/注冊等不希望已登錄用戶訪問),因此,系統(tǒng)提供了公開控制方法和匿名控制方法配置,通過對配置文件簡單的配置,可以完成控制器方法甚至是整個控制器的開放。權(quán)限控制執(zhí)行流程如圖3.7所示。
52、行管理,同時,在該Advice中,加入了對控制層異常的處理,因此,控制層中的操作如果出現(xiàn)異常,可以直接拋出甚至是不需要處理,權(quán)限控制Aspect會根據(jù)方法命名規(guī)范采取相應的錯誤提示信息,如以ajax形式或者是直接以錯誤頁面的形式。 系統(tǒng)為權(quán)限控制定義了四個Pointcut,通過這三個Pointcut相互約束,完成了對控制器方法的權(quán)限控制織入。 (1) execution(public * name.orionis.cms.core..*.*(..)) (2) execution(public * name.orionis.cms.extensions..*.*(..)) (3) @an
53、notation(org.springframework.web.bind.annotation.RequestMapping) (4) within(@org.springframework.stereotype.Controller *) 圖3.7 權(quán)限控制執(zhí)行流程 上面主要講述了權(quán)限控制的過程,系統(tǒng)不僅使用AOP完成了訪問權(quán)限的控制,還實現(xiàn)了一套完整的基于角色的訪問控制系統(tǒng)(RBAC)與AOP的權(quán)限控制相結(jié)合,從而更加靈活的對訪問權(quán)限,用戶角色進行管理。RBAC權(quán)限控制與AOP結(jié)合如圖3.8所示。 圖3.8 RBAC權(quán)限控制與AOP相結(jié)合 在RBAC中,
54、權(quán)限與角色相關聯(lián),用戶通過獲取適當?shù)慕巧@取該角色的所有權(quán)限。這樣極大的簡化了權(quán)限的管理。在這一組織中,角色是為了完成各種工作而創(chuàng)建的,用戶依據(jù)他們的職責和資格被授予相應的角色,根據(jù)用戶角色的不同從而在系統(tǒng)中擁有不同的功能。而權(quán)限也可以根據(jù)角色的不同進行回收。 系統(tǒng)通過對Rbac的引入以及實現(xiàn),靈活的完成了多用戶的管理,下面是表結(jié)構(gòu)。RBAC系統(tǒng)表結(jié)構(gòu)關系如圖3.9所示。 圖3.9 RBAC系統(tǒng)表結(jié)構(gòu)關系 系統(tǒng)在基本RBAC系統(tǒng)的基礎上進行了擴展,增加了對菜單的管理,這樣,就實現(xiàn)了不同用戶登錄系統(tǒng)后的菜單是不同的,增強了系統(tǒng)的可定制性。菜單定制如圖3.10所示。
55、圖3.10 菜單定制 3.3.2 基于Annotation的聲明式緩存方案 通常,在大型系統(tǒng)以及并發(fā)訪問量比較大的系統(tǒng)中,為了減少對數(shù)據(jù)庫以及其它I/O資源所造成的耗時操作,減輕系統(tǒng)的壓力,對于常用的,不經(jīng)常發(fā)生變化的資源進行緩存,而傳統(tǒng)的緩存方案無外乎創(chuàng)建緩存對象,判斷是否存在當前對象緩存,如果存在,則返回,否則則緩存新的對象后再返回,對于每一次的緩存操作,這樣一個過程必不可少,因此,系統(tǒng)中難免會分散著各種重復的緩存代碼,這就造成了開發(fā)人員需要不斷地復制粘貼相應的緩存代碼,在進行一定的修改后使用,但是這樣造成了一旦某一天希望換一種緩存實現(xiàn)的時候,程序很難解耦。因此很有必要有一種更加方便,
56、更低侵入性的緩存實現(xiàn)方案。 本系統(tǒng)自主實現(xiàn)了一套基于注解的聲明式緩存解決方案,與權(quán)限控制部分相似,為了提高系統(tǒng)的效率,緩存方案同樣采取了AOP機制,使用AspectJ進行編譯時織入緩存代碼。被緩存方法調(diào)用如圖3.11所示。 圖3.11 被緩存方法調(diào)用 系統(tǒng)實現(xiàn)的緩存方案默認通過方法簽名對方法返回值進行緩存,當方法參數(shù)不同時,會分別進行不同的緩存。當然也可以手動指定緩存使用的簽名或者是緩存主鍵使用的參數(shù)列表。不僅如此,該緩存方案還支持基于緩存時間的緩存,通過在@Cached注解上增加緩存有效期,可以實現(xiàn)緩存過期等。 系統(tǒng)默認提供了兩種緩存方式: (1) 基于內(nèi)存的緩存實
57、現(xiàn)。 (2) 基于文件系統(tǒng)的緩存方式實現(xiàn)。 如果這兩種方式仍然不能滿足開發(fā)者的需求,開發(fā)者可以實現(xiàn)自己的緩存方案,比如如果開發(fā)者需要使用memcached分布式key-value緩存方案,可以自定義緩存類,該類只需要實現(xiàn)ICache接口,同時在Spring配置文件中或者是通過@Component注解標注為Spring管理的bean即可。 public interface ICache { public void put(String key , Object value); public void put(String key, Object value, long expira
58、tion); public Object get(String key); public boolean isExist(String key); public void remove(String key, boolean lazy); public void setDevMode(boolean devMode); public boolean isSupportExpiration(); } 圖3.12是緩存方法的執(zhí)行過程圖解: 圖3.12 緩存方法執(zhí)行過程 3.2.3 擴展開發(fā) 擴展系統(tǒng)功能是相當簡單的,一般情況下,對于比較簡單的功能,可以快速的生
59、成,這里,以公告發(fā)布管理為例,簡述一下開發(fā)過程。 首先需要創(chuàng)建公告數(shù)據(jù)表,假設公告數(shù)據(jù)表是如下結(jié)構(gòu): 表3.1 Announce表結(jié)構(gòu) 字段名 類型 約束 注釋 Id Long 主鍵,自增 主鍵 Version Int Hibernate用于做樂觀鎖 Title varchar 公告標題 Content longtext 公告內(nèi)容 Create_date Datetime 創(chuàng)建時間 Publish_time Datetime 發(fā)布時間 Publisher Varchar 發(fā)布者 Updator Varcha
60、r 更新者 Start_time Datetime 生效時間 End_time Datetime 截止時間 Hits Int 點擊量 (1) 創(chuàng)建數(shù)據(jù)表實體 創(chuàng)建數(shù)據(jù)表實體,在Activity Record 模式下,也就相當于DAO層的創(chuàng)建,在Spring Roo環(huán)境下,我們可以簡單執(zhí)行下面幾條命令完成實體創(chuàng)建。 entity jpa --class ~.extensions.announce.model.Announce field string --fieldName title --sizeMin 1 --sizeMax 50 --notN
61、ull field string --fieldName content --sizeMin 0 --sizeMax 1000 field date --fieldName createDate --type java.util.Date field date --fieldName publishTime --type java.util.Date field string --fieldName publisher --sizeMax 30 field date --fieldName startTime --type java.util.Date --dateTimeFo
62、rmatPattern
field number --fieldName hits --type int --value 0
(2) 創(chuàng)建實體對應的表單
創(chuàng)建表單類的目的是用于接收通過頁面提交的表單數(shù)據(jù),Spring會將表單項映射到表單實體的屬性上,可以通過annotation的方式方便的完成表單驗證以及格式轉(zhuǎn)換。
public class AnnounceForm extends Form
63、 private String title; @Size(min = 0, max = 1000, message="Content length must not more than 1000.") private String content; @Temporal(TemporalType.TIMESTAMP) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date publishTime; @Temporal(TemporalType.TIMESTA
64、MP) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date startTime; @Temporal(TemporalType.TIMESTAMP) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date endTime; @Override public boolean validate(){ if(endTime.before(startTime)){
65、 errorMessages = "The end time must after start time!"; return false; } return true; } @Override public Announce toEntity() { Announce ann = new Announce(); ann.setTitle(title); ann.setContent(content); ann.setCreateDate(new Date()); ann.setStartTime
66、(startTime); ann.setEndTime(endTime); ann.setPublishTime(publishTime); return ann; } .……(get/set方法省略) } 需要注意的是,表單實體需要繼承Form類以獲取表單額外驗證以及轉(zhuǎn)換為數(shù)據(jù)實體的能力,F(xiàn)orm類是一個泛型類,內(nèi)部包含兩個方法,validate和toEntitiy方法,分別用來添加額外的表單驗證邏輯和將表單轉(zhuǎn)換為數(shù)據(jù)實體。在最簡單的情況下,也就是這里,我們只需要實現(xiàn)toEntity方法,轉(zhuǎn)換表單對象為實體即可。 (3) 創(chuàng)建service 創(chuàng)建Service層是相當簡單的,只需要簡單的執(zhí)行一條命令就可以完成service層的創(chuàng)建,service會自動的實現(xiàn)所有的對數(shù)據(jù)實體的增刪改查操作。 service --interface ~.extensions.announce.service.AnnounceService --entity ~.extensions.announce.model.Announce (4) 創(chuàng)建控制器 對于控制
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新人教版九年級數(shù)學下冊課件:273-位似-第2課時
- 新人教版《科學之旅》-課件
- 會計觀念的創(chuàng)新課件
- 代謝綜合征臨床評估與危險因素防治
- 產(chǎn)品質(zhì)量處理辦法
- 文明單位申報材料-powerpoint__演示文稿
- 遷安市某中學七年級數(shù)學上冊第三章整式及其加減專題練習三整式的化簡與計算課件新版北師大版
- 分時線洗盤的三種常見方式課件
- 寫出事物的特點課件
- 《百善孝為先》教學ppt課件
- 五年級數(shù)學下冊期中復習卡--------課件
- 走進美妙的色彩世界
- 五年級數(shù)學上冊課件梯形的面積人教版2
- 計算機繪圖0113章
- Ch2 顧客價值、滿意度、關系管理