基于J2EE的新天地美食點評推薦網(wǎng)_第1頁
基于J2EE的新天地美食點評推薦網(wǎng)_第2頁
基于J2EE的新天地美食點評推薦網(wǎng)_第3頁
基于J2EE的新天地美食點評推薦網(wǎng)_第4頁
基于J2EE的新天地美食點評推薦網(wǎng)_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

PAGE8PAGEv-PAGEv-題目:基于J2EE的新天地美食點評推薦網(wǎng)摘要本論文的目的旨在設(shè)計一個新天地美食城的生活消費平臺,為中大學(xué)生提供新天地的美食消費指南,同時也為新天地商戶提供一個展示自身特色從而吸引顧客的平臺,主要功能包括用戶評論、瀏覽商家信息、用戶推薦、商家排名、用戶升級、商家推菜、查看評論等。系統(tǒng)開發(fā)基于J2EE架構(gòu)、SSH框架和MVC設(shè)計模式,并以JSP、CSS、JS作為表現(xiàn)層技術(shù)、java作為后臺開發(fā)語言。論文主要內(nèi)容包括:(1)網(wǎng)站的背景和意義、開發(fā)現(xiàn)狀分析、網(wǎng)站的目標(biāo)和范圍。(2)網(wǎng)站開發(fā)用的技術(shù),包括SSH框架、MVC設(shè)計模式、JSP、CSS、JS等。(3)使用UML建模語言對網(wǎng)站進(jìn)行需求建模,對系統(tǒng)進(jìn)行功能行概述,形成系統(tǒng)的用例圖、領(lǐng)域模型、功能圖,并用核心用例來進(jìn)行具體的說明。(4)網(wǎng)站的架構(gòu)及設(shè)計原理、網(wǎng)站的數(shù)據(jù)庫設(shè)計、包圖、模塊視圖、數(shù)據(jù)視圖等,對核心用例如用戶點評、商家推菜、用戶推薦、查看評論使用時序圖進(jìn)行具體的說明。(5)對網(wǎng)站的主要模塊進(jìn)行具體說明,包括登陸注冊模塊、用戶點評模塊、商家推菜模塊、瀏覽商家信息模塊、用戶推薦模塊等,介紹模塊的設(shè)計思路和涉及到的算法和實現(xiàn)。(6)網(wǎng)站的運行環(huán)境和運行時的一些注意事項,選取主要的一些界面對網(wǎng)站的操作與輸入輸出進(jìn)行一些簡要介紹。(7)總結(jié)系統(tǒng)的優(yōu)勢、劣勢等方面的內(nèi)容,并提出系統(tǒng)的改進(jìn)方案。關(guān)鍵詞: UML建模,SSH,J2EE,MVC,點評推薦網(wǎng),

AbstractThepurposeofthispaperistodesignaplatformwhichwillprovideusers(mainlythestudentsofSunYat-senUniversity)informationaboutGoGoNewWorldPlazaFoodCenter,atthesametime,theplatformwillofferthevendorsofthecentertoprovideaplatformtodisplaytheircharacteristicsinordertoattractcustomers.Themainfeaturesaremakingreviews,viewingvendorinformation,viewingusers’recommendations,viewingvendors’rankinglist,theupgradingofusers,publishingdishesandviewcommentsforvendors.

TheWebsiteisdevelopedusingJ2EEarchitecture,usingtheSSHframeworkandtheMVCdesignpattern,usingJSP、CSSandJSpresentationlayertechnologies,inaddition,usingJavaasthedevelopmentlanguageofthebackendofthewebsite.Thepapersummarizestheentiredevelopmentprocessofthesystem,themaincontentsofthepaperarelistedasfollows:(1)Theprefacedescribesthebackgroundandsignificanceofthedevelopingthesystem,developmentstatusanalyzing,theobjectivesandscopeofthesystem.(2)Thedominatingtechnicalprinciples,includingSSHframework,MVCdesignpatterns,JSP,CSS,JS,andsoon.(3)Intherequirementmodelingpart,useUMLmodelinglanguagetoaccomplishtherequirementmodel,completeafunctionaloverviewofthesystem,formthesystemusecasediagram、thedomainmodelandthefunctionaldiagram,andusethecoreusecasesforspecificinstructions.(4)Thearchitectureanddesignprinciplesofthewebsite,databasedesign,packagediagram,moduleview,dataview,furthermore,usesequencediagramtospecifythecoreusecases,suchasuserreviews,thedishpublishing,Viewingthecomments.(5)Thesite'smainmodulewillbespecificallydescribed,includinglandingregistrationmodule,userreviewsmodule,dishmanagementmodule,viewingvendorsinformationmodule,usersrecommendationmodule,introducethedesignideasandrelatedalgorithmimplementationofthesemodules.(6)Introducestheoperatingenvironmentofthesiteandthemattersandattentions.Selectssomeofthemaininterfacestomakeabriefintroductiontotheinputandoutputoftheoperation.(7)Analyzesthesystemandsummarizestheadvantagesandweaknessesofthesystem,andproposessomereasonablemethodstoimprovethesystem.Keywords:UMLmodeling,SSH,J2EE,MVC,ReviewandrecommendationwebsitePAGE8目錄TOC\o"1-3"第一章 前言 11.1項目的背景和意義 11.2研究開發(fā)現(xiàn)狀分析 21.3項目的目標(biāo)和范圍 31.4論文結(jié)構(gòu)簡介 3第二章 技術(shù)與原理 52.1 MVC設(shè)計模式 52.2 Struts2 72.3 Spring 82.4 Hibernate 102.5 JSP 11第三章 需求建模 133.1 系統(tǒng)需求概述 133.1.1 功能性需求概述 133.1.2 系統(tǒng)模塊劃分 133.2 領(lǐng)域模型 153.3 系統(tǒng)用例模型 163.3.1 用例圖 163.3.2 用例列表 173.3.3 核心用例分析 18第四章 架構(gòu)設(shè)計 234.1 系統(tǒng)架構(gòu)及原理 234.2 業(yè)務(wù)用例的實現(xiàn) 244.2.1 添加點評 244.2.2 查看用戶推薦排行 254.2.3 添加菜品 264.3 數(shù)據(jù)庫設(shè)計 284.3.1數(shù)據(jù)庫概念設(shè)計 284.3.2數(shù)據(jù)庫物理設(shè)計 29第五章 模塊設(shè)計 315.1 點評模塊 315.1.1模塊功能概述 315.1.2接口和算法 315.1.3 主要界面 375.2菜品管理模塊 375.2.1模塊功能概述 375.2.2接口和算法 385.2.3主要界面: 40第六章 部署與應(yīng)用 426.1 系統(tǒng)部署圖 426.2 系統(tǒng)運行環(huán)境 426.3 項目部署 426.4 主要界面展示 43第七章結(jié)論 46參考文獻(xiàn) 48PAGE47-前言1.1項目的背景和意義互聯(lián)網(wǎng)正在經(jīng)歷一個蓬勃發(fā)展的時期,在互聯(lián)網(wǎng)時代的最近十年,日新月異的互聯(lián)網(wǎng)發(fā)展給人們的生活方式帶來了深刻的變化,眾多的互聯(lián)網(wǎng)應(yīng)用在很大程度上將人們的生活從線下轉(zhuǎn)移到線上,一個嶄新的線上生活平臺正在引領(lǐng)一個時代的來臨,人們將會在線上生活平臺獲得不一樣的生活體驗。點評網(wǎng)正是眾多的線上生活應(yīng)用中的一個,基于口碑相傳的生活消費類點評網(wǎng)站,在互聯(lián)網(wǎng)時代正遍地開花,打造出一個豐富多彩的生活消費平臺,給眾多的網(wǎng)絡(luò)用戶提供餐飲、購物、休閑娛樂以及生活服務(wù)等商業(yè)服務(wù)領(lǐng)域的商戶信息,并同時提供給大家一個可以發(fā)布消費評價、自由交流的平臺,旨在幫助網(wǎng)友發(fā)現(xiàn)最優(yōu)質(zhì)的服務(wù)和消費體驗。GoGo新天地美食城是最近一年在中大生活區(qū)附近興起的一個擁有眾多商戶、提供多種口味的美食城,但是里面的商家質(zhì)量良莠不齊,有的可口美味,有的則不太好吃,傳統(tǒng)的一些大型點評類網(wǎng)站如大眾點評等,只是羅列了新天地里面一些很少的商家,提供的信息很不全面,大家在去一個新的餐館就餐之前,很難知道那家店的口碑如何,提供的是不是優(yōu)質(zhì)的服務(wù),我們需要有一個能給出大家意見的消費指南。出于這樣的考慮,新天地美食點評推薦網(wǎng),基于本地,旨在為廣大大學(xué)城學(xué)子提供有關(guān)新天地的詳細(xì)美食地圖和就餐指南,給大家的選擇提供參考依據(jù),讓大家可以在新天地發(fā)現(xiàn)真正的美味。因此有了這樣的一個平臺,有了這樣一個豐富多彩的平臺,用戶可以在上面自由交流:可以查看其它人的評論,可以添加自己對某家餐館的評論,可以查看用于推薦排行,可以瀏覽商家的信息,用戶可以添加自己的推薦等等,這些都可以幫助用戶做出最好的選擇,同時這個平臺也給商家提供了一個展示自我的機(jī)會,商家可以添加自己的菜品,包括菜名、描述、圖片等,可以查看用戶的評論,用戶的一些評論可以幫助商家更好地了解自己的不足之處以及要從哪些方面進(jìn)行提高,另一方面,這個平臺為商家提供了有效的口碑宣傳載體,隨著餐飲業(yè)的競爭日趨激烈,商家對于宣傳的重視度日益提升,然而受地域、規(guī)模等限制,往往缺乏有效的宣傳載體,而且新天地美食城的眾多商戶很多都是小本經(jīng)營很難花費大量的金錢用于宣傳,新天地美食點評網(wǎng)匯聚的眾多的前人留下的點評信息,對于眾多“好則褒之”餐館來說,是一個低成本、輻射廣的口碑載體,而這個“口碑營銷”也能夠?qū)⒎稚⒌挠脩魠R集起來,將他們也變成一個有消費力的群體。綜上所述,通過對項目背景和意義的介紹,可以判斷出新天地美食點評推薦系統(tǒng)具有較為現(xiàn)實的使用性和應(yīng)用的緊迫性,同時大學(xué)城的眾多學(xué)子使得網(wǎng)站擁有巨大的潛在用戶群體和市場,在給大家提供一個點評交流平臺的同時也會催生出一些商業(yè)利益和一些可行性收益。1.2研究開發(fā)現(xiàn)狀分析互聯(lián)網(wǎng)領(lǐng)域是一個催生了很多新生事物的領(lǐng)域,尤其是最近二十年更是呈現(xiàn)出井噴之勢,本地化信息網(wǎng)站是近些年涌現(xiàn)出并取得了快速發(fā)展的新生事物,是人們獲取本地生活資訊信息的主要渠道。點評類網(wǎng)站是本地化信息網(wǎng)站的一種類型,是本地生活消費平臺,也是獨立的第三方消費點評平臺,這類網(wǎng)站的主要特點就是通過“第三方點評模式”來將網(wǎng)友的本地生活信息和經(jīng)驗匯聚到一起,為廣大用戶提供一個客觀的生活服務(wù)消費信息的發(fā)布平臺,同時也給廣大用戶提供一個氛圍自由的社交平臺,現(xiàn)在國內(nèi)在這一塊做得比較好的網(wǎng)站有,如:大眾點評、口碑網(wǎng)、飯統(tǒng)網(wǎng)、新浪生活頻道、豆瓣等知名站點。以大眾點評為例,大眾點評致力于為網(wǎng)友提供餐飲、購物、休閑娛樂及生活服務(wù)等領(lǐng)域的商戶信息、消費優(yōu)惠以及發(fā)布消費評價的互動平臺,將人們的生活從線下轉(zhuǎn)到線上,同時大眾點評網(wǎng)亦為中小商戶提供一站式精準(zhǔn)營銷解決方案,包括電子優(yōu)惠券、關(guān)鍵詞推廣、團(tuán)購等。另繼網(wǎng)站之后,大眾點評已經(jīng)成功在移動互聯(lián)網(wǎng)布局這一模式,大眾點評移動客戶端已經(jīng)成為本地生活必備工具??梢哉f大眾點評網(wǎng)在傳統(tǒng)互聯(lián)網(wǎng)領(lǐng)域和移動互聯(lián)網(wǎng)領(lǐng)域都取得不錯的成績,眾多的、門類齊全的信息和大量的用戶、自由活躍的社交已經(jīng)成為大眾點評網(wǎng)的標(biāo)簽。但是,作為一個擁有龐大數(shù)據(jù),覆蓋大半個中國的大生活平臺,大眾點評網(wǎng)搜羅的信息不可能會很細(xì)致,而且大眾點評繁多的信息分類會讓人感覺到無從下手。新天地美食點評推薦網(wǎng),以細(xì)小的切入點切入,以新天地美食城為商家的集中來源,可以提供給廣州大學(xué)城的學(xué)子一個更為實用生活消費平臺。系統(tǒng)借鑒輕博客的風(fēng)格,更為簡潔,用戶使用起來會很舒服,所以本系統(tǒng)的開發(fā)具有一定的實際意義,會帶給人一種不同的感受。1.3項目的目標(biāo)和范圍本系統(tǒng)旨在給大學(xué)城廣大學(xué)子提供一個新天地美食城的生活消費平臺,面向的用戶主要為廣州大學(xué)城的學(xué)子和新天地美食城的商戶,主要是為了解決一些大型的點評網(wǎng)站提供的新天地美食城美食信息很少的問題,幫助大家發(fā)現(xiàn)新天地真正的美味,同時也給新天地的商戶一個平臺發(fā)布菜品信息。本系統(tǒng)采用B/S結(jié)構(gòu),消費者可通過瀏覽器訪問本網(wǎng)站,在注冊成為本網(wǎng)站的用戶后用戶可以查看很多的點評信息,也可以發(fā)表自己的點評,用戶亦可以任意瀏覽商家信息和其他用戶的評論和推薦,同時,商家也可以注冊成為本系統(tǒng)的用戶,商家在成為用戶后可以發(fā)布新的菜品、修改已有菜品、查看用戶評論等。本網(wǎng)站的開發(fā)環(huán)境是Win7,使用Myeclipse、Mysql數(shù)據(jù)庫、Tomcat本地服務(wù)器來進(jìn)行開發(fā),使用SSH框架、MVC模式、java語言和JSP頁面技術(shù),并在Tomcat-7.0服務(wù)器上部署發(fā)布。1.4論文結(jié)構(gòu)簡介本論文旨在呈現(xiàn)一個完整的系統(tǒng)設(shè)計開發(fā)過程,開發(fā)一個為大學(xué)城學(xué)生提供生活消費指南的推介平臺。本論文一共包含七部分,從項目開發(fā)背景、相關(guān)技術(shù)原理、需求建模、架構(gòu)設(shè)計、模塊設(shè)計及部署應(yīng)用和項目總結(jié)七個方面對新天地美食推薦網(wǎng)進(jìn)行了詳盡的闡述,各章大體內(nèi)容如下::前言,這部分包括介紹項目背景和意義、研究與現(xiàn)狀分析、項目的目標(biāo)和范圍以及論文的結(jié)構(gòu)簡介。在這部分中,介紹了項目的背景和來源、開發(fā)的動機(jī)、系統(tǒng)開發(fā)的使用性和意義,同時界定了項目的目標(biāo)和范圍,簡介了論文結(jié)構(gòu)。:技術(shù)與原理,這部分主要介紹系統(tǒng)開發(fā)所使用的相關(guān)技術(shù)和原理,簡明扼要地介紹了MVC設(shè)計模式、SSH框架、JSP等相關(guān)技術(shù)原理。:需求建模,這部分主要是在分析項目的需求后,對系統(tǒng)進(jìn)行功能性概述,并使用規(guī)范的UML建模語言對系統(tǒng)需求進(jìn)行建模,包括系統(tǒng)的領(lǐng)域模型、系統(tǒng)用例圖、用例表,對核心的用例使用活動圖等進(jìn)行具體描述。:架構(gòu)設(shè)計,這部分主要是對系統(tǒng)的整體架構(gòu)進(jìn)行詳細(xì)的描述,使用包圖描述系統(tǒng)的組織架構(gòu)、通過時序圖對主要用例的進(jìn)行詳細(xì)說明,使用ER圖進(jìn)行數(shù)據(jù)的設(shè)計和核心數(shù)據(jù)表的介紹。:模塊設(shè)計,對系統(tǒng)主要模塊進(jìn)行詳細(xì)設(shè)計,分模塊對主要類進(jìn)行一些說明,說明該類提供的接口以及主要類關(guān)鍵方法,使用程序流程圖描述功能模塊的工作流程,同時對模塊相應(yīng)的做出初步的界面設(shè)計。:部署與應(yīng)用,利用系統(tǒng)部署圖說明系統(tǒng)的部署,描述了系統(tǒng)的運行環(huán)境,并選擇一些重要的界面說明系統(tǒng)的重要輸入/輸出。:結(jié)論,對開發(fā)過程中存在的種種不足加以總結(jié),并針對系統(tǒng)的不足之處提出系統(tǒng)的改進(jìn)方案并對前景進(jìn)行展望。技術(shù)與原理MVC設(shè)計模式MVC是三個英語單詞的首字母縮寫,他們分別是Model(模型)、View(視圖)、Controller(控制器),MVC設(shè)計模式是基于J2EE的WEB應(yīng)用開發(fā)的首選模式,當(dāng)前許多流行的框架也都是基于MVC設(shè)計模式的,其職責(zé)大致如圖2-1所示:圖2-1MVC框架圖模型層:負(fù)責(zé)表達(dá)和訪問數(shù)據(jù),執(zhí)行業(yè)務(wù)邏輯和操作。也就是說,這一層就是現(xiàn)實生活中功能的軟件模擬;在模型層變化的時候,它將通知視圖層并提供后者訪問自身狀態(tài)的能力,同時控制層也可以訪問其功能函數(shù)以完成相關(guān)的任務(wù)。視圖層:負(fù)責(zé)顯示模型層的內(nèi)容。它從模型層取得數(shù)據(jù)并指定這些數(shù)據(jù)如何被顯示出來。在模型層變化的時候,它將自動更新。另外視圖層也會將用戶的輸入傳送給控制器??刂茖樱贺?fù)責(zé)定義應(yīng)用程序的行為。它可以分派用戶的請求并選擇恰當(dāng)?shù)囊晥D以用于顯示,同時它也可以解釋用戶的輸入并將它們映射為模型層可執(zhí)行的操作;在一個圖形界面中,常見的用戶輸入包括點擊按鈕和菜單選擇。在Web應(yīng)用中,它包括對Web層的HTTPGET和POST的請求;控制層可以基于用戶的交互和模型層的操作結(jié)果來選擇下一個可以顯示的視圖,一個應(yīng)用程序通常會基于一組相關(guān)功能設(shè)定一個控制層的模塊,甚至一些應(yīng)用程序會根據(jù)不同的用戶類型具有不同的控制層設(shè)定,這主要是由于不同用戶的視圖交互和選擇也是不同的[1]。MVC體系結(jié)構(gòu)如圖2-2所示:圖2-2MVC體系結(jié)構(gòu)圖從設(shè)計模式的角度來看,MVC模式非常類似了觀察者模式,但與觀察者模式存在少許差別:觀察者模式下觀察者和被觀察者可以是兩個相互對等的對象,但對于MVC模式,被觀察者往往只是單純的數(shù)據(jù)體,而觀察者則是單純的視圖頁面。概括起來,MVC有如下特點:多個視圖可以對應(yīng)一個模型,按照MVC設(shè)計模式,一個模型對應(yīng)多個視圖,可以減少代碼的復(fù)制及代碼的維護(hù)量,一旦模型發(fā)生改變,也易于維護(hù)。模型返回的數(shù)據(jù)與顯示邏輯分離,模型數(shù)據(jù)可以應(yīng)用任何的顯示技術(shù),例如使用JSP頁、Velocity模版或者直接產(chǎn)生EXCEL文檔等,同時由于數(shù)據(jù)和商務(wù)邏輯的分開,在新的數(shù)據(jù)源加入和數(shù)據(jù)顯示變化的時候,數(shù)據(jù)處理也會變得更簡單。應(yīng)用被分隔為三層,降低了各層之間的耦合,提供了應(yīng)用的可擴(kuò)展性,MVC更符合軟件工程化管理的精神,不同的層各司其職,每一層的組件具有相同的特征,有利于通過工程化和工具化產(chǎn)生管理程序代碼[2]。Struts2Struts是MVC的一種實現(xiàn),它將Servelet和JSP標(biāo)記(屬于J2EE規(guī)范)用作實現(xiàn)的一部分,struts繼承了MVC的各項特性,并根據(jù)J2EE的特點,做了相應(yīng)的變化與擴(kuò)展。而本系統(tǒng)也是用struts2.2作為MVC框架,struts2.2以struts1.x和WebWork為基礎(chǔ),迅速成長為MVC框架中新的王者,一經(jīng)推出,立即贏得了廣泛的市場支持,本系統(tǒng)的一些的超鏈接和表單提交等,都不再直接發(fā)送到表現(xiàn)層JSP頁面,而是必須發(fā)給Struts的aciton,由這些acition來控制所有請求的處理和轉(zhuǎn)發(fā),同時在另一方面,通過Struts攔截所有的請求有個好處:將所有的JSP頁面放入WEB-INF/路徑下,可以避免用戶直接訪問JSP頁面,從而提高系統(tǒng)的安全性。一個常見的Struts2應(yīng)用的開發(fā)步驟:在web.xml文件中定義核心Filter來攔截用戶請求。由于web應(yīng)用是基于請求/相應(yīng)架構(gòu)的應(yīng)用,所以不管哪個MVCweb框架,都需要在web.xml中配置該框架的核心servlet或者是filter.如果需要用post方式提交請求,則定義包含表單數(shù)據(jù)的JSP頁面,如果僅僅只是以get的方式來發(fā)送請求,則無需經(jīng)過這一步。定義處理用戶請求的Action類,這個Action就是MVC中的C,也就是控制器,該控制器負(fù)責(zé)調(diào)用Model里的方法來處理請求。配置Action,通常使用XML文件來配置管理,配置action就是指定哪個請求對應(yīng)哪個action進(jìn)行處理,從而讓核心控制器根據(jù)配置來創(chuàng)建合適的action實例,并調(diào)用該Action的業(yè)務(wù)控制方法。配置處理結(jié)果和物理視圖資源之間的對應(yīng)關(guān)系。當(dāng)Action處理用戶的請求后,通常會返回一個處理結(jié)果(通常使用簡單的字符串就可以了),我們可以認(rèn)為該名稱是邏輯視圖名,這個邏輯視圖需要和指定的物理視圖資源關(guān)聯(lián)才有價值,物理視圖通常是視圖層的JSP頁面。編寫視圖資源,如果Action需要把數(shù)據(jù)傳給視圖資源,則可以借助于OGNL表達(dá)式[3]。SpringSpring是一個開源框架,它由RodJohnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本JavaBean來完成以前只可能由EJB完成的事情,但是其用途不僅限于服務(wù)器端的開發(fā)。從簡單性、松耦合、可擴(kuò)展性、可維護(hù)性的角度而言,spring框架為很多的java應(yīng)用提供了很多的便利[4]。Spring容器現(xiàn)在已經(jīng)成為企業(yè)軟件主流的技術(shù),spring是一個龐大的體系,它的一個重大特性是輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的,Spring應(yīng)用中的對象不依賴于Spring的特定類【5】。在本次Spring框架的分析中主要是分析一下Spring的兩個核心部分:IoC(控制反轉(zhuǎn),也稱依賴注入DI)和AOP(面向切面編程),這兩個核心模塊是spring其他模塊實現(xiàn)的基礎(chǔ),對這兩個核心模塊工作原理和運作機(jī)制的理解,對深入理解spring框架具有決定性的作用,在本系統(tǒng)的開發(fā)過程中主要用到了spring的IoC,在這里著重介紹Spring的IoC.Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合,當(dāng)我們使用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進(jìn)來,而不是這個對象自己創(chuàng)建或者查找依賴對象,IOC實現(xiàn)把控制權(quán)從具體的業(yè)務(wù)對象手中轉(zhuǎn)交到框架中。在spring中,那些應(yīng)用程序的主體(backbone)及由SpringIoC容器所管理的對象,被稱之為bean。簡單的講,bean就是由Spring容器初始化、裝配及管理對象,除此之外,bean就與應(yīng)用程序中的其他對象沒有區(qū)別,而bean定義以及bean相互間的依賴關(guān)系將通過配置元數(shù)據(jù)來描述。在Spring框架中,org.springframework.beans.factory.BeanFactory是SpringIoC容器的實際代表者,IoC容器負(fù)責(zé)容納此前所描述的bean,并對bean進(jìn)行管理。在Spring中,Beans作為核心組件,BeanFactory是IoC容器的核心接口。它的職責(zé)包括:實例化、定位、配置應(yīng)用程序中的對象及建立這些對象間的依賴【6】。BeanFactroy是一個Spring容器,用于創(chuàng)建,配置,管理bean,bean之間的依賴關(guān)系也由BeanFactory負(fù)責(zé)維護(hù)。Spring通過BeanFactory來靈活配置、管理bean,提供bean的實例化以及依賴注入,并通過BeanFactory來對bean進(jìn)行訪問。BeanFactory是最頂層的接口實現(xiàn),其下一層包括有ListableBeanFactory、Hierarchic-alBeanFactory和AutowireCapableBeanFactory三個子接口。這三個子接口繼續(xù)往下,組合成更多實現(xiàn)具體細(xì)節(jié)的子類,最終得到的是名為DefaultListableBeanFactory的默認(rèn)實現(xiàn)類,這個類則實現(xiàn)了所有的父接口。這樣的分層繼承實現(xiàn)的主要目的在于區(qū)分在Spring內(nèi)部在操作過程中對象的傳遞和轉(zhuǎn)化過程中,對對象的數(shù)據(jù)訪問所做的限制,其關(guān)系如圖2-3所示。圖2-3bean工廠類關(guān)系圖Spring為我們提供了很多易用的BeanFactory實現(xiàn),XmlBeanFactory就是最常用的一個。該實現(xiàn)將以XML方式描述組成應(yīng)用的對象以及對象間的依賴關(guān)系。XmlBeanFactory類將獲取XML配置元數(shù)據(jù),并用它來構(gòu)建一個完全可配置的系統(tǒng)和應(yīng)用。 典型的企業(yè)應(yīng)用不會只由單一的對象(或Spring的術(shù)語bean)組成。毫無疑問,即使最簡單的系統(tǒng)也需要多個對象共同來展示給用戶一個整體的應(yīng)用。接下來的內(nèi)容除了闡述如何單獨定義一系列bean外,還將描述如何讓這些bean對象一起協(xié)同工作來實現(xiàn)一個完整的真實應(yīng)用。依賴注入(DI)背后的基本原理是對象之間的依賴關(guān)系(即是一起工作的其它對象)只會通過以下幾種方式來實現(xiàn):構(gòu)造器的參數(shù)、工廠方法的參數(shù),或給由構(gòu)造函數(shù)或者工廠方法創(chuàng)建的對象設(shè)置屬性。因此,容器的工作就是創(chuàng)建bean時注入那些依賴關(guān)系。相對于由bean自己來控制其實例化、直接在構(gòu)造器中指定依賴關(guān)系或者類似服務(wù)定位器(ServiceLocator)模式這3種自主控制依賴關(guān)系注入的方法來說,控制從根本上發(fā)生倒轉(zhuǎn),這也正是控制反轉(zhuǎn)(InversionofControl,IoC)名字的由來。應(yīng)用DI原則后,代碼將更加清晰。而且當(dāng)bean自己不再擔(dān)心對象之間的依賴關(guān)系(甚至不知道依賴的定義指定地方和依賴的實際類)之后,實現(xiàn)更高層次的松耦合將易如反掌。DI主要有兩種注入方式,即Setter注入和構(gòu)造器注入[7]。HibernateHibernate是輕量級的JavaEE應(yīng)用的持久層解決方案,hibernate不僅管理Java類到數(shù)據(jù)庫表的映射(包括Java數(shù)據(jù)類型到SQL數(shù)據(jù)類型的映射),還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度縮短使用JDBC處理數(shù)據(jù)持久化的時間【8】。目前主流的數(shù)據(jù)庫依然是關(guān)系數(shù)據(jù)庫,而Java語言則是面向?qū)ο蟮木幊陶Z言,當(dāng)把二者結(jié)合在一起使用時相當(dāng)?shù)穆闊?,而hibernate則減少了這個問題的困擾,它完成對象模型和基于SQL的關(guān)系模型的映射關(guān)系,使得應(yīng)用開發(fā)者可以完全采用面向?qū)ο蟮姆绞絹黹_發(fā)應(yīng)用程序,因為有了hibernate的支持,使得JavaEE應(yīng)用的OOA(面向?qū)ο蠓治觯?、OOD(面向?qū)ο笤O(shè)計)和OOP(面向?qū)ο缶幊蹋┤齻€過程一脈相承,成為一個整體【9】。對象關(guān)系映射:對象關(guān)系映射(ObjectRelationalMapping,ORM)可理解成為一種規(guī)范,完成面向?qū)ο蟮木幊陶Z言到關(guān)系數(shù)據(jù)庫的映射。當(dāng)ORM框架完成映射后,既可以利用面向?qū)ο蟪绦蛟O(shè)計語言的簡單易用性,又可利用關(guān)系數(shù)據(jù)庫的技術(shù)優(yōu)勢。將程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中。一般情況下,一個持久化類和一個表對應(yīng)。類的每個實例對應(yīng)表中的一條記錄,類的每個屬性對應(yīng)表的每個字段。在本系統(tǒng)中,使用hibernate注解來實現(xiàn)映射。POJO類:POJO(PureOldJavaObject,原始Java對象)是一種原始的Java類,有一些private的參數(shù)作為對象的屬性。然后針對每個參數(shù)定義get()和set()作為訪問接口。POJO對象大量應(yīng)用于表現(xiàn)現(xiàn)實中的對象。對象持久化:在一定周期內(nèi)保持不變就是持久化(PO),它是針對時間來說的,只要不刪除或修改,數(shù)據(jù)庫中的數(shù)據(jù)就是持久化數(shù)據(jù)。對象序列化的過程是對象持久化的方法之一,用于把對象保存到文件中。持久層(PersistenceLayer)即專注于實現(xiàn)數(shù)據(jù)持久化應(yīng)用領(lǐng)域的某個特定系統(tǒng)的一個邏輯層面,將數(shù)據(jù)使用者和數(shù)據(jù)實體相關(guān)聯(lián)。MVC模式實現(xiàn)了架構(gòu)上將表現(xiàn)層和數(shù)據(jù)處理層的分離,而持久化設(shè)計則實現(xiàn)了數(shù)據(jù)處理層內(nèi)部的業(yè)務(wù)邏輯和數(shù)據(jù)邏輯的分離。Hibernate使用java反射技術(shù)來持久化對象,它可以比較輕松地處理大量不同類型的持久化對象。Hibernate的核心接口如下,通過這些接口不僅可以存取持久化對象,還能夠控制事務(wù)。Session接口:負(fù)責(zé)執(zhí)行被持久化對象的CRUD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫的交流,包含了很多常見的SQL語句)。SessionFactory接口:負(fù)責(zé)初始化Hibernate,充當(dāng)了數(shù)據(jù)存儲源的代理,并負(fù)責(zé)創(chuàng)建Session對象。Configuration接口:負(fù)責(zé)配置并啟動Hibernate,創(chuàng)建SessionFactory對象。Transaction接口:負(fù)責(zé)事務(wù)相關(guān)的操作。Query和Criteria接口:負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫查詢,可以使用HQL語言或SQL語句兩種表達(dá)方式【10】。JSPJSP是由SunMicrosystems公司倡導(dǎo)、許多公司參與一起建立的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn),JSP技術(shù)是用Java語言作為腳本語言,JSP網(wǎng)頁為整個服務(wù)器端的Java庫單元提供了一個接口來服務(wù)于HTTP的應(yīng)用程序【11】。在傳統(tǒng)的網(wǎng)頁HTML中加入Java程序片段和JSP標(biāo)記,就構(gòu)成了JSP網(wǎng)頁,web服務(wù)器在遇到訪問JSP網(wǎng)頁的請求時,首先執(zhí)行其中的程序片段,然后將執(zhí)行結(jié)果以HTML格式返回給客戶,程序片段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁以及發(fā)送E-mail等,這就是建立動態(tài)網(wǎng)站所需要的功能。使用JSP技術(shù),Web頁面開發(fā)人員可以使用HTML或者XML標(biāo)識來設(shè)計和格式化最終頁面。使用JSP標(biāo)識或者小腳本來生產(chǎn)頁面上的動態(tài)內(nèi)容。生成內(nèi)容的邏輯被封裝在標(biāo)識和JavaBeans組件中,并且捆綁在小腳本中,所有的腳本都在服務(wù)器端運行。如果核心邏輯被封裝在標(biāo)識和Bean中,那么其他人,如Web管理人員和頁面設(shè)計者,能夠編輯和使用JSP頁面,而不影響內(nèi)容的生成【12】。生成可重用的組件。絕大多數(shù)JSP頁面依賴于可重用的、跨平臺的組件(JavaBean或者EnterpriseJavaBeansTM組件)來執(zhí)行應(yīng)用程序所要求的更為復(fù)雜的處理。開發(fā)人員能夠共享和交換執(zhí)行普通操作的組件,或者使得這些組件為更多的使用者或者客戶團(tuán)體所使用?;诮M件的方法加速了總體開發(fā)過程,并且使得各種組織在他們現(xiàn)有的技能和優(yōu)化結(jié)果的開發(fā)努力中得到平衡JSP的優(yōu)點如下:對于用戶界面的更新,其實就是由webserver進(jìn)行的,所以給人的感覺更新很快所有的應(yīng)用都是基于服務(wù)器的,所以它們可以時刻保持最新版本客戶端的接口不是很繁瑣,對于各種應(yīng)用易于部署、維護(hù)和修改【13】。需求建模本章使用UML統(tǒng)一建模語言進(jìn)行系統(tǒng)的需求建模,首先對系統(tǒng)的功能性需求進(jìn)行概述,得出系統(tǒng)的領(lǐng)域模型和用例圖,最后選取核心的用例進(jìn)行詳細(xì)的建模,使用usecase和活動圖描述用例的事件流。系統(tǒng)需求概述功能性需求概述功能需求定義一個軟件系統(tǒng)或組件的功能,也是一個系統(tǒng)需提供的功能及服務(wù)。功能可以用一組輸入、行為及輸出的組合來表示,功能需求以非功能性需求(或是品質(zhì)需求)為其基礎(chǔ)【14】。在上文分析了本系統(tǒng)的背景意義以及目標(biāo)后,針對顧客和商家的實際需求,針對兩類不同的用戶,新天地美食點評推薦網(wǎng)提供不同的功能,對于顧客主要有以下一些功能:注冊成為會員、登陸系統(tǒng)、查看系統(tǒng)的所有商家列表、瀏覽商家信息(包括商家的介紹、商家推出的菜品、用戶對商家的評價)、添加對商家的點評、查看用戶自己的歷史點評、查看用戶推薦、用戶自薦、刪除已有評論、退出系統(tǒng)等功能;而對于店家,主要有以下一些功能:添加產(chǎn)品(包括產(chǎn)品名、菜品描述、上傳菜品圖片)、查看所有已添加的菜品、刪除菜品、更新菜品信息、查看用戶對自己的所有評論、退出系統(tǒng)等功能。系統(tǒng)模塊劃分本系統(tǒng)主要劃分為如下幾個功能模塊:用戶管理模塊功能結(jié)構(gòu)如圖3-1所示:圖3-1用戶管理功能圖點評模塊:其對應(yīng)的功能結(jié)構(gòu)如圖3-2所示:圖3-2點評功能圖菜品管理模塊其對應(yīng)的功能結(jié)構(gòu)如圖3-3所示:圖3-3菜品管理圖瀏覽商家模塊:其對應(yīng)的功能結(jié)構(gòu)如圖3-4所示:圖3-4瀏覽商家功能圖系統(tǒng)的整體功能結(jié)構(gòu)如圖3-5所示:圖3-5系統(tǒng)整體功能圖領(lǐng)域模型領(lǐng)域模型是OO分析中最重要的和經(jīng)典的模型,其是對領(lǐng)域內(nèi)的概念類或現(xiàn)實世界中對象的可視化表示,應(yīng)用UML表示法,領(lǐng)域模型被描述為一組沒有定義操作(方法的特征標(biāo)記)的類圖,它提供了概念透視圖,可以展示:領(lǐng)域?qū)ο蠡蛘吒拍铑惛拍铑愔g的關(guān)聯(lián)概念類的屬性【15】本系統(tǒng)的領(lǐng)域模型如圖3-6所示:圖3-6系統(tǒng)領(lǐng)域模型圖系統(tǒng)用例模型用例圖本系統(tǒng)的用例模型如圖3-7所示:圖3-7系統(tǒng)用例模型圖用例列表本系統(tǒng)的用例列表如表3-1所示:表3-1系統(tǒng)用例列表用例編號用例名稱描述參與者UC01用戶注冊系統(tǒng)用戶填寫注冊信息顧客、商家UC02登陸系統(tǒng)用戶憑用戶名密碼登陸系統(tǒng)顧客、商家UC03退出系統(tǒng)退出系統(tǒng)顧客、商家UC04添加點評顧客添加點評顧客UC05查看商家顧客瀏覽商家信息顧客UC06搜索商家顧客搜索商家顧客UC07刪除點評顧客刪除已有的點評信息顧客UC08查看用戶推薦排行顧客查看用戶的推薦排行顧客UC09查看我的推薦顧客查看自己的點評歷史顧客UC10查看用戶點評顧客查看用戶對某商家的所有點評顧客UC11添加菜品商家添加新的菜品商家UC12刪除菜品商家刪除已有的菜品商家UC13更新菜品商家更新已有的菜品商家UC14查看評論商家查看用戶對自己的所有評論商家核心用例分析現(xiàn)選取系統(tǒng)的核心用例進(jìn)行具體的建模:Usecase04添加點評:Usecase04添加點評Description:顧客登陸進(jìn)入系統(tǒng),添加對某商家的點評PrimaryActor:顧客scope:新天地美食點評推薦網(wǎng)Level:用戶級別StakeholdersandInterests:顧客—進(jìn)入系統(tǒng),點擊我要點評進(jìn)行點評或者瀏覽商家信息完成后添加對該商家的點評Precondition:顧客進(jìn)入了該系統(tǒng)MinimalGuarantee:服務(wù)器正常啟動,顧客可以登錄進(jìn)入系統(tǒng)SuccessGuarantee:單擊“我要點評”,填寫點評后點評可以被正常提交MainSuccessScenario:顧客登錄進(jìn)入本系統(tǒng)在導(dǎo)航欄上點擊我要點評進(jìn)入添加點評的頁面填寫點評信息填寫完成后點擊確定,保存點評信息點評信息保存成功Extensions:2a.顧客可以在瀏覽商家信息頁面時,添加對該商家的點評6a.點評信息的填寫不正確,提示用戶重新填寫添加點評的活動圖如3-8所示:圖3-8添加點評活動圖Usecase05查看商家:Usecase05添加點評Description:顧客登陸進(jìn)入系統(tǒng),瀏覽商家信息PrimaryActor:顧客scope:新天地美食點評推薦網(wǎng)Level:用戶級別StakeholdersandInterests:顧客—進(jìn)入系統(tǒng),點擊商家信息瀏覽商家信息Precondition:顧客進(jìn)入了該系統(tǒng)MinimalGuarantee:服務(wù)器正常啟動,顧客可以登錄進(jìn)入系統(tǒng)SuccessGuarantee:單擊“商家信息”頁面被正常顯示MainSuccessScenario:顧客登錄進(jìn)入本系統(tǒng)在導(dǎo)航欄上點擊商家信息進(jìn)入商家信息瀏覽頁面查看商家推出的所有菜品和對其的點評Extensions:4a.如果該用戶還未添加任何菜品,系統(tǒng)會對用戶進(jìn)行提示查看商家的活動圖如3-9所示:圖3-9查看商家活動圖Usecase11添加菜品:Usecase11添加菜品Description:商家登陸進(jìn)入系統(tǒng),添加菜品PrimaryActor:商家scope:新天地美食點評推薦網(wǎng)Level:用戶級別StakeholdersandInterests:商家—進(jìn)入系統(tǒng),點擊商家信息瀏覽商家信息Precondition:商家進(jìn)入了該系統(tǒng)MinimalGuarantee:服務(wù)器正常啟動,商家可以登錄進(jìn)入系統(tǒng)SuccessGuarantee:單擊添加菜品,頁面被正常顯示MainSuccessScenario:商家登錄進(jìn)入本系統(tǒng)在導(dǎo)航欄上點擊添加菜品輸入菜品信息點擊確定,提交填寫的數(shù)據(jù)菜品添加成功Extensions:4a.如果填寫的信息不符合要求,會提示用戶重新填寫活動圖如3-10所示:圖3-10添加菜品活動圖架構(gòu)設(shè)計系統(tǒng)架構(gòu)及原理本系統(tǒng)采用嚴(yán)格的JavaEE應(yīng)用結(jié)構(gòu),采用MVC設(shè)計模式,采用功能分層模式,每個層負(fù)責(zé)所有業(yè)務(wù)的某一方面的功能。共有4層:Action層,Service層,DAO層、Model層,在Service和DAO層中還采用了抽象接口分離的軟件設(shè)計原則,增加了系統(tǒng)的可擴(kuò)展性。在每個層之間即Action層和Service層、Service和DAO層之間采用了Spring的IoC設(shè)計原則,降低了系統(tǒng)的耦合度,這也符合OCP設(shè)計,本系統(tǒng)采用貧血模式設(shè)計,系統(tǒng)中的model層實際上就是一些簡單的javabean類,并未提供任何的業(yè)務(wù)邏輯方法,所有的業(yè)務(wù)邏輯方法由系統(tǒng)的業(yè)務(wù)邏輯組件來提供。分層的包圖如圖4-1所示:圖4-1系統(tǒng)分層包圖對于本系統(tǒng)的整體架構(gòu),如圖4-2所示:圖4-2系統(tǒng)整體架構(gòu)圖業(yè)務(wù)用例的實現(xiàn)在本節(jié)中,將介紹系統(tǒng)的主要用例的實現(xiàn)步驟并使用順序圖來進(jìn)行說明。添加點評添加點評用例的實現(xiàn)步驟如下所示:用戶進(jìn)入系統(tǒng)的登陸界面,系統(tǒng)在顧客登陸成功后將顧客id和userName放在session中,進(jìn)入顧客主頁customerHome.jsp。顧客在主頁導(dǎo)航欄上面點擊添加點評,跳轉(zhuǎn)到addComment.jsp頁面用戶填寫表單數(shù)據(jù)(包括商家店鋪名、點評內(nèi)容、星級),點擊提交,將數(shù)據(jù)提交到CommentAction類中的addComment.action.系統(tǒng)首先調(diào)用validateAdd函數(shù)對表單提交的數(shù)據(jù)進(jìn)行驗證,如果不符合要求,返回addCommenta.jsp并給出錯誤提示。addComment.action獲取表單提交的數(shù)據(jù)并從session中獲取顧客的userName,通過customerService調(diào)用findByCustomerName方法,vendorService調(diào)用findByShopName。findByshopName和findByCustomerName方法分別調(diào)用VendorDao、CustomerDao中的相應(yīng)方法findByshopName和findByCustomerNamefindByshopName和findByCustomerName分別調(diào)用hibernate的find函數(shù)在數(shù)據(jù)庫中查找到相應(yīng)的用戶和商家,依次返回上一級調(diào)用函數(shù)。在addCommment中,新建一個Comment對象,并用表單傳過來的參數(shù)和customerService以及vendorService調(diào)用函數(shù)返回的customer和vendor對其進(jìn)行初始化。調(diào)用CommentService的add方法,參數(shù)是新建的comment對象。CommentService調(diào)用CommentDAO的save方法,參數(shù)是傳遞過去的新建的comment對象。Save函數(shù)調(diào)用hibernateTemplate的save方法,將comment存進(jìn)數(shù)據(jù)庫中。根據(jù)以上對用例的實現(xiàn)步驟的描述,得到的順序圖4-3所示:圖4-3添加點評時序圖查看用戶推薦排行用戶進(jìn)入系統(tǒng)的登陸界面,系統(tǒng)在顧客登陸成功后將顧客的id和userName放在session中,進(jìn)入顧客主頁customerHome.jsp。顧客在主頁導(dǎo)航欄上面點擊用戶推薦,跳轉(zhuǎn)到ranklistComment.action調(diào)用CommentService的orderByStarLevel函數(shù)在orderByStarLevel函數(shù)中調(diào)用CommentDAO中的listOrderBy函數(shù)listOrderBy函數(shù)調(diào)用Hibernate的createQuery函數(shù)對數(shù)據(jù)進(jìn)行按字段排序并返回排序結(jié)果。CommentService調(diào)用setRecomComments函數(shù)為recomComments賦值,并將結(jié)果傳遞給customerHome.jspcustomerHome.jsp將搜索結(jié)果顯示給用戶。根據(jù)以上的描述,得到該用例的順序圖4-4所示:圖4-4查看用戶點評順序圖添加菜品商家進(jìn)入系統(tǒng)的登陸界面,系統(tǒng)在商家登陸成功后將商家的id和vendorName放在session中,進(jìn)入商家主頁vendorHome.jsp。商家在主頁導(dǎo)航欄上面點擊添加菜品,跳轉(zhuǎn)到addDish.jsp頁面商家填寫表單數(shù)據(jù)(包括菜品名字、菜品描述、選擇上傳菜品的圖片),點擊提交,將數(shù)據(jù)提交到DishManageAction類的addDish.action.系統(tǒng)首先會調(diào)用validateAdd函數(shù)對提交的數(shù)據(jù)進(jìn)行驗證,如不合要求,給出錯誤提示并返回addDish.jsp頁面。addDish.action獲取表單提交的數(shù)據(jù)并從session中獲取商家的vendorName和id,通過vendorService調(diào)用findByVendorName方法。findByVendorName方法分別調(diào)用VendorDao相應(yīng)方法findByVendorName。findByVendorName調(diào)用hibernate的find函數(shù)在數(shù)據(jù)庫中查找到相應(yīng)商家并返回。在addDish中,新建一個Dish對象newDish,并用表單傳過來的參數(shù)和返回的vendor對其進(jìn)行初始化。調(diào)用DishService的add方法,參數(shù)是新建的Dish對象newDish。DishService調(diào)用DishDAO的save方法,參數(shù)是傳遞過去的新建的Dish對象newDishSave函數(shù)調(diào)用hibernateTemplate的save方法,將newDish存進(jìn)數(shù)據(jù)庫中。根據(jù)以上對該用例的描述,得到的順序圖如圖4-5所示:圖4-5商家添加菜品順序圖數(shù)據(jù)庫設(shè)計通過使用Hibernate持久層,可以避免使用傳統(tǒng)的JDBC方式來操作數(shù)據(jù)庫,通過利用Hibernate提供的注解功能,從而允許使用面向?qū)ο蟮姆绞絹聿僮麝P(guān)系數(shù)據(jù)庫,保證了整個軟件開發(fā)過程中以面向?qū)ο蟮姆绞竭M(jìn)行,即面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計、面向?qū)ο缶幊獭?.3.1數(shù)據(jù)庫概念設(shè)計面向?qū)ο蠓治?,是指根?jù)系統(tǒng)需求提取應(yīng)用中的對象,將這些對象抽象成類,再抽取出需要持久化保持的類,這些需要持久化保持的類就是持久化對象(PO),本系統(tǒng)在開發(fā)的時候沒有預(yù)先設(shè)計數(shù)據(jù)庫,而是完全從面向?qū)ο蟮姆治鲩_始,設(shè)計了4個持久化類。Customer:對應(yīng)于系統(tǒng)的顧客信息,包括用戶名、密碼、介紹、圖片等信息。Vendor:對應(yīng)于系統(tǒng)的商家信息,包括商鋪名稱、店家昵稱、密碼、介紹、圖片等信息Comment:對應(yīng)于與系統(tǒng)的點評信息,包括發(fā)表點評的用戶、點評指向的商戶、點評的內(nèi)容、星級、發(fā)表時間等信息Dish:對應(yīng)于系統(tǒng)的菜品信息,包括菜品的名稱、菜品的描述、菜品的圖片信息、菜品對應(yīng)的商家等信息。在本系統(tǒng)中,使用貧血模式來設(shè)計它們,所以他們不提供任何業(yè)務(wù)邏輯方法。以上的類不是孤立存在的,在使用注解進(jìn)行自動建表的過程中為他們指定了對應(yīng)關(guān)系,還自動生成了一些其他表,通過對數(shù)據(jù)庫反向操作得到的類似ER圖如圖4-6:圖4-6數(shù)據(jù)庫類ER圖4.3.2數(shù)據(jù)庫物理設(shè)計數(shù)據(jù)庫的物理模型指的是概念模型在特定數(shù)據(jù)庫中的實現(xiàn)。物理模型是與具體數(shù)據(jù)庫相關(guān)的。同一個概念模型,對應(yīng)于不同的數(shù)據(jù)庫,就有不同的物理模型。物理模型是對概念模型的實現(xiàn),而概念模型是對物理模型的抽象。由于本系統(tǒng)的數(shù)據(jù)庫概念模型中實體與實體之間只有1:N關(guān)系,所以概念模型轉(zhuǎn)化成物理模型的規(guī)則是:如果A與B的關(guān)系為1:N,則表A的主鍵加入到表B中并成為表B的外鍵【16】。根據(jù)以上原則,各個數(shù)據(jù)表具體的內(nèi)容如下:Customer表如4-7所示,id為主鍵,沒有外鍵圖4-7customer表截圖Vendor表如圖4-8所示,id為主鍵,:圖4-8vendor表截圖Comment表如圖4-9所示,id為主鍵,customer_id和vendor_id為外鍵:圖4-9comment表截圖Dish表如圖4-10所示,id為主鍵,vendor_id為外鍵:圖4-10dish表截圖

模塊設(shè)計在需求建模部分,對系統(tǒng)的模塊進(jìn)行了一個劃分,本系統(tǒng)包含的主要模塊有用戶管理模塊,點評模塊,菜品管理模塊和瀏覽商家信息模塊,在本章中選取點評模塊、菜品管理、瀏覽商家信息模塊進(jìn)行說明。點評模塊5.1.1模塊功能概述在點評模塊中,主要包含以下一些功能:顧客添加點評、顧客查看用戶推薦、顧客查看自己的歷史點評、顧客自己的推薦、商家查看用戶點評。顧客可以點擊我要點評,直接輸入商家店鋪名字、評論內(nèi)容、店家的星級,提交保存到數(shù)據(jù)庫中,顧客可以有自己的推薦,可以查看別人的推薦,而對于商家在其個人主頁中可以查看其它用戶對自己的評價。5.1.2接口和算法點評模塊主要由CommentAction這個類來實現(xiàn),這個類中封裝了很多方法來實現(xiàn)多個功能,類包含的主要成員和方法如圖5-1所示:圖5-1類CommentAction接口截圖該類從session中獲取顧客或者商家的登錄信息,要實現(xiàn)的具體功能,都調(diào)用底層的函數(shù)來實現(xiàn),因為使用分層設(shè)計和MVC模式,該類需要使用CustomerService、VendorService和CommentService對象,來調(diào)用方法處理用戶的請求和提交過來的數(shù)據(jù),通過一層一層地調(diào)用,通過CustomerService、VendorService和CommentService對象調(diào)用其對應(yīng)的service里面實現(xiàn)對應(yīng)功能的函數(shù),然后對應(yīng)service里對應(yīng)的函數(shù)再調(diào)用其對應(yīng)DAO.impl里面的方法,DAO.impl里面的方法再調(diào)用框架封裝好的一些函數(shù)來實現(xiàn)功能?,F(xiàn)對該模塊包含的用戶添加點評和查看用戶推薦排行榜兩個核心用例所涉及到的一些主要函數(shù)和工作流程圖進(jìn)行介紹:用戶添加評論add函數(shù)如圖5-2所示:圖5-2CommentAction的add函數(shù)add函數(shù)首先從session獲取通過session傳遞過來的當(dāng)前登錄系統(tǒng)的顧客的userName,然后使用ICustomerDAO的對象customerService調(diào)用函數(shù)findByCustomerName函數(shù),findByCustomerName調(diào)用commentDAO中的函數(shù)findByCustomerName來根據(jù)獲取的userName來從數(shù)據(jù)庫中找到對應(yīng)的customer并返回;對于用戶輸入的數(shù)據(jù)shopName,使用IvendorDAO的對象vendorService來調(diào)用函數(shù)findByShopName,findByShopName調(diào)用VendorDao中的函數(shù)findByShopName來找到該商家并返回,生成一個新的comment對象,使用表單提交的一些數(shù)據(jù)和findByCustomerName以及findByShopName返回的對象來對心生成的newComment進(jìn)行初始化,最后調(diào)用CommentService的add函數(shù),add函數(shù)調(diào)用DAO層的save函數(shù)完成評論的保存,到此一條評論成功添加。service層的findByCustomerName和dao層的findByCustomerName函數(shù)分別如圖5-3和5-4所示:圖5-3service層中的函數(shù)findByCustomerName函數(shù)圖5-4dao層中的函數(shù)findByCustomerName函數(shù)在service層中,直接調(diào)用dao層的相應(yīng)方法,最后通過hibernate的提供的方法完成對數(shù)據(jù)的查詢。對于顧客添加點評功能,其工作流程如圖5-5所示:圖5-5顧客點評流程圖查看用戶推薦排行函數(shù)ranklist如圖5-6所示:圖5-6CommentAction類中的函數(shù)ranklist該函數(shù)通過commentService對象來調(diào)用對應(yīng)service層的函數(shù)orderByStarLevel,orderByStarLevel調(diào)用相應(yīng)DAO層里面的函數(shù)listOrderBy函數(shù)來完成對星級字段的排序并返回排序后的對象列表,listOrderBy函數(shù)如圖5-7所示:圖5-7dao層中的listOrderBy函數(shù)listorderBy調(diào)用hibernate提供的createQuery函數(shù)使用Hql語句對某個字段進(jìn)行排序,并返回排序后的列表。最后調(diào)用setRecomComments函數(shù)對recomComments進(jìn)行賦值,recomComments在ranklist函數(shù)執(zhí)行成功后會保存在值棧中,可以在JSP頁面獲取該變量,進(jìn)而列出排行榜。查看用戶排行榜的流程圖如圖5-8所示:圖5-8查看用戶排行榜的流程圖主要界面添加評論主界面如圖5-9所示:圖5-9用戶評論頁面截圖用戶推薦排行的界面如圖5-10所示:圖5-10用戶推薦排行榜界面截圖5.2菜品管理模塊5.2.1模塊功能概述在這一個模塊中,主要的功能有:商家添加菜品、商家查看所有的菜品、商家刪除菜品、商家更新菜品。商家點擊添加菜品,可以輸入菜品名字、菜品描述、上傳菜品圖片,點擊提交可以添加一道菜品,商家可以查看所有的已經(jīng)推出的菜品,商家也可以對已有的菜品進(jìn)行更新也可以刪除已有的菜品。5.2.2接口和算法菜品管理主要由DishManageAction類來實現(xiàn),該類從session中獲取商家的登錄信息,要實現(xiàn)的具體功能,都調(diào)用底層的函數(shù)來實現(xiàn),該類需要使用VendorService對象和DishService對象,來調(diào)用方法處理用戶的請求和提交過來的數(shù)據(jù),這個對象在beans.xml中已經(jīng)聲明,我們通過一層一層地調(diào)用,通過VendorService和DishService對象調(diào)用其對應(yīng)的service里面實現(xiàn)對應(yīng)功能的函數(shù),然后對應(yīng)service里對應(yīng)的函數(shù)再調(diào)用其對應(yīng)DAO.impl里面的方法,DAO.impl里面的方法再調(diào)用框架封裝好的一些函數(shù)來實現(xiàn)功能。下面選取添加菜品來做詳細(xì)的說明。添加菜品ValidateAdd函數(shù):該函數(shù)自動完成對商家的添加菜品提交的表單信息的驗證,在add()函數(shù)執(zhí)行前系統(tǒng)會自動調(diào)用Validate函數(shù)完成對表單數(shù)據(jù)的校驗,如圖5-11所示。圖5-11DishManageAction類中的validateAdd函數(shù)add函數(shù):add函數(shù)首先從session中獲取當(dāng)前登錄的商家信息,即是分別獲取商家的vendorId和vendorName.vendorId是用來對每個商家在服務(wù)器建立專屬的文件夾目錄用于上傳自己的圖片.add函數(shù)調(diào)用vendorService的findByVendorName函數(shù),findByVendorName調(diào)用dao層中相應(yīng)的函數(shù),最后調(diào)用底層函數(shù)完成對數(shù)據(jù)庫的查詢并返回查找到的vendor對象,用返回的vendor對象和表單傳過來的一些參數(shù)對新生成的Dish對象進(jìn)行初始化,然后調(diào)用service層的add函數(shù),add函數(shù)調(diào)用相應(yīng)的dao層中的save方法將該dish保存進(jìn)數(shù)據(jù)庫中。代碼如下:publicStringadd()throwsIOException{ HttpSessionsession=ServletActionContext.getRequest().getSession(); StringvendorName=session.getAttribute("vendorName").toString(); StringvendorId=session.getAttribute("vendorId").toString(); DishnewDish=newDish(); session.setAttribute("dishId",newDish.getId()); Vendorvendor=newVendor(); vendor=vendorService.findByVendorName(vendorName); InputStreamin=newFileInputStream(getUpload()); Stringpath=ServletActionContext.getServletContext().getRealPath( "/Resources/Image"); path=path+vendorId; Filefile=newFile(path); if(!file.isDirectory()){ file.mkdirs(); } dishUrl="Resources/Image"+vendorId+"/"+uploadFileName; OutputStreamout=newFileOutputStream(path+"/"+uploadFileName); this.setDishUrl(dishUrl); byte[]buffer=newbyte[BUFFER_SIZE]; while(in.read(buffer)>0){ out.write(buffer); } in.close(); out.close(); newDish.setDishName(dishName); newDish.setDescription(description); newDish.setVendor(vendor); newDish.setDishUrl(dishUrl); service.add(newDish); return"listDishes"; }添加菜品的流程圖如圖5-12所示:圖5-12添加菜品流程圖5.2.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論