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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

模塊設計在需求建模部分,對系統(tǒng)的模塊進行了一個劃分,本系統(tǒng)包含的主要模塊有用戶管理模塊,點評模塊,菜品管理模塊和瀏覽商家信息模塊,在本章中選取點評模塊、菜品管理、瀏覽商家信息模塊進行說明。點評模塊5.1.1模塊功能概述在點評模塊中,主要包含以下一些功能:顧客添加點評、顧客查看用戶推薦、顧客查看自己的歷史點評、顧客自己的推薦、商家查看用戶點評。顧客可以點擊我要點評,直接輸入商家店鋪名字、評論內容、店家的星級,提交保存到數據庫中,顧客可以有自己的推薦,可以查看別人的推薦,而對于商家在其個人主頁中可以查看其它用戶對自己的評價。5.1.2接口和算法點評模塊主要由CommentAction這個類來實現,這個類中封裝了很多方法來實現多個功能,類包含的主要成員和方法如圖5-1所示:圖5-1類CommentAction接口截圖該類從session中獲取顧客或者商家的登錄信息,要實現的具體功能,都調用底層的函數來實現,因為使用分層設計和MVC模式,該類需要使用CustomerService、VendorService和CommentService對象,來調用方法處理用戶的請求和提交過來的數據,通過一層一層地調用,通過CustomerService、VendorService和CommentService對象調用其對應的service里面實現對應功能的函數,然后對應service里對應的函數再調用其對應DAO.impl里面的方法,DAO.impl里面的方法再調用框架封裝好的一些函數來實現功能?,F對該模塊包含的用戶添加點評和查看用戶推薦排行榜兩個核心用例所涉及到的一些主要函數和工作流程圖進行介紹:用戶添加評論add函數如圖5-2所示:圖5-2CommentAction的add函數add函數首先從session獲取通過session傳遞過來的當前登錄系統(tǒng)的顧客的userName,然后使用ICustomerDAO的對象customerService調用函數findByCustomerName函數,findByCustomerName調用commentDAO中的函數findByCustomerName來根據獲取的userName來從數據庫中找到對應的customer并返回;對于用戶輸入的數據shopName,使用IvendorDAO的對象vendorService來調用函數findByShopName,findByShopName調用VendorDao中的函數findByShopName來找到該商家并返回,生成一個新的comment對象,使用表單提交的一些數據和findByCustomerName以及findByShopName返回的對象來對心生成的newComment進行初始化,最后調用CommentService的add函數,add函數調用DAO層的save函數完成評論的保存,到此一條評論成功添加。service層的findByCustomerName和dao層的findByCustomerName函數分別如圖5-3和5-4所示:圖5-3service層中的函數findByCustomerName函數圖5-4dao層中的函數findByCustomerName函數在service層中,直接調用dao層的相應方法,最后通過hibernate的提供的方法完成對數據的查詢。對于顧客添加點評功能,其工作流程如圖5-5所示:圖5-5顧客點評流程圖查看用戶推薦排行函數ranklist如圖5-6所示:圖5-6CommentAction類中的函數ranklist該函數通過commentService對象來調用對應service層的函數orderByStarLevel,orderByStarLevel調用相應DAO層里面的函數listOrderBy函數來完成對星級字段的排序并返回排序后的對象列表,listOrderBy函數如圖5-7所示:圖5-7dao層中的listOrderBy函數listorderBy調用hibernate提供的createQuery函數使用Hql語句對某個字段進行排序,并返回排序后的列表。最后調用setRecomComments函數對recomComments進行賦值,recomComments在ranklist函數執(zhí)行成功后會保存在值棧中,可以在JSP頁面獲取該變量,進而列出排行榜。查看用戶排行榜的流程圖如圖5-8所示:圖5-8查看用戶排行榜的流程圖主要界面添加評論主界面如圖5-9所示:圖5-9用戶評論頁面截圖用戶推薦排行的界面如圖5-10所示:圖5-10用戶推薦排行榜界面截圖5.2菜品管理模塊5.2.1模塊功能概述在這一個模塊中,主要的功能有:商家添加菜品、商家查看所有的菜品、商家刪除菜品、商家更新菜品。商家點擊添加菜品,可以輸入菜品名字、菜品描述、上傳菜品圖片,點擊提交可以添加一道菜品,商家可以查看所有的已經推出的菜品,商家也可以對已有的菜品進行更新也可以刪除已有的菜品。5.2.2接口和算法菜品管理主要由DishManageAction類來實現,該類從session中獲取商家的登錄信息,要實現的具體功能,都調用底層的函數來實現,該類需要使用VendorService對象和DishService對象,來調用方法處理用戶的請求和提交過來的數據,這個對象在beans.xml中已經聲明,我們通過一層一層地調用,通過VendorService和DishService對象調用其對應的service里面實現對應功能的函數,然后對應service里對應的函數再調用其對應DAO.impl里面的方法,DAO.impl里面的方法再調用框架封裝好的一些函數來實現功能。下面選取添加菜品來做詳細的說明。添加菜品ValidateAdd函數:該函數自動完成對商家的添加菜品提交的表單信息的驗證,在add()函數執(zhí)行前系統(tǒng)會自動調用Validate函數完成對表單數據的校驗,如圖5-11所示。圖5-11DishManageAction類中的validateAdd函數add函數:add函數首先從session中獲取當前登錄的商家信息,即是分別獲取商家的vendorId和vendorName.vendorId是用來對每個商家在服務器建立專屬的文件夾目錄用于上傳自己的圖片.add函數調用vendorService的findByVendorName函數,findByVendorName調用dao層中相應的函數,最后調用底層函數完成對數據庫的查詢并返回查找到的vendor對象,用返回的vendor對象和表單傳過來的一些參數對新生成的Dish對象進行初始化,然后調用service層的add函數,add函數調用相應的dao層中的save方法將該dish保存進數據庫中。代碼如下: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論