基于SSM技術(shù)的分布式銷售平臺設(shè)計與實現(xiàn)計算機專業(yè)_第1頁
基于SSM技術(shù)的分布式銷售平臺設(shè)計與實現(xiàn)計算機專業(yè)_第2頁
基于SSM技術(shù)的分布式銷售平臺設(shè)計與實現(xiàn)計算機專業(yè)_第3頁
基于SSM技術(shù)的分布式銷售平臺設(shè)計與實現(xiàn)計算機專業(yè)_第4頁
基于SSM技術(shù)的分布式銷售平臺設(shè)計與實現(xiàn)計算機專業(yè)_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本科論文目錄TOC\o"1-3"\h\u15009摘要 I4817Abstract II134521緒論 188081.1課題研究背景與意義 1107171.2國內(nèi)外研究現(xiàn)狀 14651.2.1國外研究現(xiàn)狀 1191171.2.2國內(nèi)研究現(xiàn)狀 2273641.3本章小結(jié) 2216782工程開發(fā)技術(shù)介紹 392732.1Web前端技術(shù)棧 3286892.1.1HTML&CSS 3136482.1.2jQuery 388772.1.3JSP 3156072.2服務端開發(fā)技術(shù)棧 3148262.2.1MCV開發(fā)模式 3181292.2.2SSM框架 480112.3項目平臺框架相關(guān)技術(shù) 5145872.4數(shù)據(jù)庫 6247042.5本章小結(jié) 6129023系統(tǒng)分析 7124873.1可行性分析 7125733.2功能需求分析 7303673.2.1前端功能模塊 7265583.2.2后端功能模塊 7204483.2.3數(shù)據(jù)庫分析 819663.3本章小結(jié) 8291064系統(tǒng)設(shè)計 953444.1總體業(yè)務流程 9238964.2系統(tǒng)總體框架設(shè)計 9114794.3業(yè)務模塊的設(shè)計 10181334.4ER圖設(shè)計 1155934.5數(shù)據(jù)庫表的設(shè)計 11282874.6本章小結(jié) 14321045系統(tǒng)實現(xiàn) 1521255.1系統(tǒng)開發(fā)環(huán)境 15312795.2系統(tǒng)工程結(jié)構(gòu) 151355.3系統(tǒng)主要模塊實現(xiàn) 16241855.3.1SSO單點登錄系統(tǒng)設(shè)計與實現(xiàn) 1689305.3.2網(wǎng)站內(nèi)容管理模塊的設(shè)計與實現(xiàn) 17264545.3.3商品管理模塊設(shè)計與實現(xiàn) 2080935.3.4全文搜索系統(tǒng)設(shè)計與實現(xiàn) 21301605.3.5訂單管理模塊設(shè)計與實現(xiàn) 2416215.3.6購物車模塊設(shè)計與實現(xiàn) 25109735.4本章小結(jié) 28196266系統(tǒng)測試 29263556.1測試目的 29178366.2系統(tǒng)功能測試 29275266.3系統(tǒng)性能測試 30107136.4本章小結(jié) 3215721結(jié)論 3315498致謝 3424937參考文獻 35本科論文摘要在科技發(fā)達的今天,網(wǎng)上購物打破了傳統(tǒng)銷售的模式,實現(xiàn)了一站式的消費理念。網(wǎng)上購物的優(yōu)勢:商品種類齊全可以買到本地所缺的商品、價格便宜、節(jié)省時間并且提供送貨上門的服務,大大提高了購物效率,使用戶的購物體驗提高。相對于傳統(tǒng)市場的零售模式,商家的租賃費用大大減少,商品倉庫儲的費用和人工費用也都相對的減少了很多。本文主要以學習研究為目的,將基于JavaEE的Web開發(fā)平臺,采用B/S架構(gòu),設(shè)計實現(xiàn)一款基于SSM(Spring+SpringMVC+Mybatis)技術(shù)的分布式銷售平臺。系統(tǒng)將主要從三大方面進行研究:技術(shù)選型。分析當前主流的開發(fā)技術(shù),分析使用哪種框架能滿足本系統(tǒng)的的要求。當網(wǎng)站的用戶量、數(shù)據(jù)量和訪問量較大時,網(wǎng)站服務器容易產(chǎn)生負載壓力大的問題。為解決這一問題,本系統(tǒng)將采用分布式思想,在保證系統(tǒng)業(yè)務功能的同時,實現(xiàn)服務層和表現(xiàn)層的解耦,可以提高網(wǎng)站的并發(fā)訪問量,保證網(wǎng)站的高性能;對系統(tǒng)中的各個模塊進行分析與設(shè)計。通過調(diào)研,來確定本項目前后臺系統(tǒng)分別需要的業(yè)務功能、設(shè)計出主要的功能模塊并完成系統(tǒng)業(yè)務邏輯的編寫。根據(jù)項目系統(tǒng)的總體需求設(shè)計數(shù)據(jù)庫表;對系統(tǒng)中的各個模塊進行實現(xiàn)并對各模塊功能進行測試。最終完成能滿足用戶的,一個功能較為完善的網(wǎng)上銷售平臺。關(guān)鍵詞:網(wǎng)上商城;SSM框架;分布式架構(gòu)

AbstractToday,withthedevelopmentofscienceandtechnology,onlineshoppinghasbrokenthetraditionalsalesmodelandrealizedtheconceptofone-stopconsumption.Advantagesofonlineshopping:withacompleterangeofcommodities,youcanbuythecommoditiesthatarenotavailableinthelocalmarket,withalowprice,time-savinganddoor-to-doordeliveryservice,whichgreatlyimprovestheshoppingefficiencyandimprovestheshoppingexperienceofusers.Comparedwiththeretailmodeinthetraditionalmarket,theleasingcostofmerchantsisgreatlyreduced,andthestoragecostandlaborcostofcommoditiesarealsorelativelyreduced.Inordertofacilitatetheresearch,thispaperdevelopedaWebdevelopmentplatformbasedonJavaEE,usingB/Sarchitecture,designedandimplementedadistributedsalesplatformbasedonSSM(Spring+springMVC+mybatis)technology.Thesystemwillbemainlystudiedfromthreeaspects:technologyselection.Analysisofthecurrentmainstreamdevelopmenttechnology,analysisoftheuseofwhichframeworkcanmeettherequirementsofthesystem.Whentheamountofusers,dataandvisitsoftheWebsiteislarge,theWebsiteserveriseasytoproducetheproblemofheavyloadpressure.Inordertosolvethisproblem,thesystemwilladoptthedistributedidea,whileensuringthesystembusinessfunction,realizethedecouplingofservicelayerandperformancelayer,improvetheconcurrentaccessrateoftheWebsite,andensurethehighperformanceoftheWebsite;analyzeanddesigneachmoduleofthesystem.Throughtheresearch,thebusinessfunctionsofthecurrentbackgroundsystemaredetermined,themainfunctionmodulesaredesigned,andthebusinesslogicofthesystemiscompleted.Accordingtotheoverallrequirementsoftheprojectsystem,thedatabasetableisdesigned,andthemodulesinthesystemarerealized.Finally,afullyfunctionalonlinesalesplatformcanmeettheneedsofusers.Keywords:e-commerce;SSMframework;Distributedarchitecture1緒論課題研究背景與意義隨著各種購物平臺的出現(xiàn),其中就包括淘寶網(wǎng),天貓商城,京東商城等業(yè)界的標桿,這也意味著網(wǎng)上購物被人們接受,并成為了人們購物的首選方式。網(wǎng)絡購物已經(jīng)成為了社會發(fā)展的必然趨勢REF_Ref19276\r\h[1]。由于國內(nèi)各大企業(yè)之間的良性競爭也進一步促進國內(nèi)電子商務市場的發(fā)展,由此可以看得出來,中國的電子商務市場發(fā)展前景一片光明。B2C是一種電商銷售模式。B2C是企業(yè)對消費者的簡稱,這種商務模式主要以網(wǎng)絡零售為主REF_Ref19404\r\h[2]。商家在互聯(lián)網(wǎng)上將商品賣給用戶,互聯(lián)網(wǎng)絡是銷售商品的主要媒介REF_Ref6722\r\h[3]。中國已成為全世界最大的“B2C電子商務”市場REF_Ref12954\r\h[4]。除去阿里巴巴、京東等這種電子商務界的龍頭外,越來越多的品牌企業(yè)也試圖從電子商務這個有著巨大潛力的市場中挖尋一份商機,紛紛建立了自己品牌的購物系統(tǒng),購物平臺。本文的意義在于,通過結(jié)合多項目前成熟的流行的技術(shù),結(jié)合實際生活中的應用場景,學習使用目前優(yōu)秀的大型電商網(wǎng)站的規(guī)范化開發(fā)流程,采用當下流行的開發(fā)框架和開發(fā)技術(shù)來完成實現(xiàn)一個業(yè)務功能完備,系統(tǒng)性能良好的網(wǎng)上銷售平臺。國內(nèi)外研究現(xiàn)狀國外研究現(xiàn)狀美國知名的網(wǎng)上商城亞馬遜和易貝是在1995年成立的。這宣告著一種新型的經(jīng)濟活動模式出現(xiàn)了。伴隨著社交軟件的出現(xiàn)和興起,這種經(jīng)濟活動模式迅速普及全球。截止到2017年,facebook在電子商務平臺上推動了90%的社交媒體銷售REF_Ref24827\r\h[5]。目前,全球電子商務市場呈現(xiàn)出了以下幾個特點:不同地區(qū)之間的差距正在縮小。電子商務在歐洲和美洲起步較早,涉及范圍廣。而在亞洲等地區(qū),雖然起步要稍晚于歐美等地區(qū),但是亞洲卻擁有著龐大的用戶量,因此電子商務在這里得到了快速發(fā)展。規(guī)模不斷擴大。有報告顯示,2017年,美國在網(wǎng)上消費約4600億美元REF_Ref23515\r\h[6]。到2022年,電子商務將占美國零售總額的17%。各企業(yè)之間并購趨于頻繁。隨著各方資本勢力的相互切磋,為了共同更好的發(fā)展,獲取最大的利益,許多競爭對手選擇了合作,也有許多企業(yè)在競爭中倒下被迫合并,因此出現(xiàn)了電子商務市場不斷地集中的狀況。共享經(jīng)濟出現(xiàn)。近年來,共享經(jīng)濟突然出現(xiàn),隨著共享經(jīng)濟的迅速的發(fā)展共享經(jīng)濟涉及的領(lǐng)域也不斷拓寬。國內(nèi)研究現(xiàn)狀電子商務市場在中國的發(fā)展是具有相當大的優(yōu)勢的,首先,從人數(shù)上來看,根據(jù)調(diào)查資料顯示,截至2019年底,中國大陸總?cè)丝跒?4.05億,而其中網(wǎng)民總數(shù)達到了半數(shù)以上。其次,從計算機技術(shù)來看,為提高軟件系統(tǒng)的性能,增加用戶的良好體驗感,越來越多的公司開始從技術(shù)方面入手進行研究,經(jīng)過不懈的努力,許多優(yōu)秀的技術(shù)紛紛出現(xiàn)。以業(yè)界著名的阿里巴巴公司為首,該公司使用的技術(shù)在國內(nèi)已經(jīng)成為了業(yè)界的標桿。1998年中國制造網(wǎng)、阿里巴巴等企業(yè)出現(xiàn)并在電子商務市場大放光彩。隨后2003年淘寶網(wǎng)、京東商城等也迅速崛起,至此中國的電子商務市場開啟了快速發(fā)展模式。根據(jù)所查詢的資料顯示,目前我國的電子商務市場展現(xiàn)出了下面幾個特點:電子商務市場的規(guī)模持續(xù)不斷地擴張。線上及線下融合的也加快了步伐。農(nóng)村的電子商務也展露鋒芒。產(chǎn)業(yè)的支撐不斷改進提高。新業(yè)態(tài)、新模式接連出現(xiàn)。電子商務逐漸滲透到各個不同領(lǐng)域當中,隨之使得電子商務市場所創(chuàng)造出的交易金額不斷攀升,這導致電子商務的對社會的各個方面影響越來越大。這也標志著電子商務正一步步成為我國經(jīng)濟發(fā)展的重要模式之一。1.3本章小結(jié)本章主要結(jié)合了當下的時代背景,對課題的研究背景和現(xiàn)實意義進行了簡述,闡述電子商務的發(fā)展前景和國內(nèi)外發(fā)展情況,結(jié)合以上所述,可知電子商務市場的發(fā)展擁有很好的前景。2工程開發(fā)技術(shù)介紹2.1Web前端技術(shù)棧2.1.1HTML&CSSHTML(HyperTextMarkedLanguage)是超文本標記語言,使用特定的標簽網(wǎng)頁中要顯示的數(shù)據(jù)內(nèi)容進行描述,生成HTML文檔,再然后通過瀏覽器進行渲染最后就按設(shè)計所期望的形式展示了數(shù)據(jù),比如說展示網(wǎng)頁當中的圖片的大小,文本的顏色等REF_Ref14242\r\h[7]。CSS(CascadingStyleSheets)是層疊樣式表。它對頁面中元素的內(nèi)容和樣式進行了分離,讓設(shè)計人員輕松的控制網(wǎng)站頁面中的文字和圖片等元素,更方便對頁面進行設(shè)計美化,使代碼更簡練,縮短瀏覽器的加載時間REF_Ref20084\r\h[8]。2.1.2jQueryjQuery是一個JavaScript框架,快速而簡潔是它主要的特點。為了更方便的使用,它對JavaScript進行了封裝,HTML文檔操作、動畫設(shè)計、事件處理和Ajax交互等變得更加簡潔。jQuery兼容各種主流瀏覽器REF_Ref22536\r\h[9]。2.1.3JSPJSP是使用Java語言編寫的一種腳本語言,它主要的作用是可以實現(xiàn)網(wǎng)頁動態(tài)化。它可以進行對客戶端發(fā)來的請求進行響應處理,并將處理結(jié)果動態(tài)的生成網(wǎng)頁展示給請求對象。2.2服務端開發(fā)技術(shù)棧2.2.1MCV開發(fā)模式MVC(Model-View-Controller)設(shè)計模式就是將軟件系統(tǒng)大致分為模型層(Model)、視圖層(View)和控制器(Controller)三層。模型層(Model):負責系統(tǒng)中業(yè)務邏輯的處理,對數(shù)據(jù)庫中的數(shù)據(jù)進行一系列的添加、刪除、修改和查看等操作,但主要還是存取對象的操作。模型層是MVC設(shè)計模式中最重要的部分。視圖層(View):負責將數(shù)據(jù)展示到前臺給用戶看??刂破鳎–ontroller):負責接收請求并響應,即從視圖層中讀取到用戶輸入的數(shù)據(jù),然后將數(shù)據(jù)發(fā)送給模型層然后進行處理,在此過程中Controller并不參與數(shù)據(jù)處理。MVC設(shè)計模式分離了實現(xiàn)了前臺頁面的展示和后臺業(yè)務的處理,降低了模塊間的耦合度。達到了系統(tǒng)的設(shè)計目標和整體要求REF_Ref21477\r\h[10]。MVC設(shè)計模式的組件關(guān)系和功能如圖2.1所示。圖2.1MVC組件關(guān)系和功能圖2.2.2SSM框架SSM框架,即Spring、SpringMVC和MyBatis,是現(xiàn)在主流的Web框架,高效的性能和輕量級的特點成為開發(fā)電子商務網(wǎng)站的不二選擇REF_Ref23087\r\h[11]。Spring就是一個一站式的、輕量級并且開放源代碼的框架。Spring的核心思想就是面向切面(AOP)和控制反轉(zhuǎn)(IOC)。企業(yè)級的應用系統(tǒng)通常都十分的復雜,Spring就是為了解決這一問題而產(chǎn)生的。Spring框架的總體結(jié)構(gòu)如圖2.2所示。圖2.2Spring框架總體結(jié)構(gòu)圖SpringMVC就是在MVC設(shè)計模式的基礎(chǔ)之上進行了優(yōu)化。SpringMVC也屬于Spring框架。如果開發(fā)Web項目時使用了Spring框架,就可以很方便的組合SpringMVC,基本上實現(xiàn)了零配置REF_Ref30121\r\h[12]。SpringMVC的工作流程如圖2.3所示。圖2.3SpringMVC工作流程圖MyBatis就是一個基于Java的持久層框架。它對JDBC的操作進行了封裝,同時支持自定義的SQL語句,它的目的是讓使用者不再對注冊數(shù)據(jù)庫驅(qū)動,創(chuàng)建連接等操作費神,而是去只專注于SQL語句。簡單來說MyBatis簡化了數(shù)據(jù)庫的使用,使數(shù)據(jù)庫操作部分變得更加簡單。2.3項目平臺框架相關(guān)技術(shù)Nginx是一個輕量級的,并發(fā)能力很強的Web服務器,可以提供多種服務。對于一個大型分布式系統(tǒng)來說,基本上都存在數(shù)據(jù)過多,流量較大,高并發(fā)等一系列問題。雖然前期可能業(yè)務量不大,但就長期發(fā)展考慮來看巨大的業(yè)務量是不可避免的,因此服務器在面對這些業(yè)務時無論是性能還是穩(wěn)定性上來說都存在著不小的挑戰(zhàn),負載均衡這一概念也因此出現(xiàn)。本系統(tǒng)將會使用Nginx來有效減少系統(tǒng)響應的時間,從而提升大并發(fā)、大數(shù)據(jù)量訪問時的系統(tǒng)性能REF_Ref2886\r\h[14]。Redis是一個非關(guān)系型(NoSQL)數(shù)據(jù)庫,擁有較高的性能。使用Redis作為分布式緩存能夠高性能地讀取數(shù)據(jù)REF_Ref27482\r\h[15]。它由VMware主持開發(fā),使用ANSIC語言編寫,是目前最流行的鍵值對存儲數(shù)據(jù)庫之一REF_Ref946\r\h[16]。本項目系統(tǒng)中將使用Redis作為分布式緩存系統(tǒng),這樣不僅可以減輕數(shù)據(jù)庫壓力,同時提升系統(tǒng)本身訪問性能,也增加了系統(tǒng)的健壯性和可擴展性,使得在系統(tǒng)性能方面得到了極大的提升。Solr是Apache組織下一個開放源碼的項目,它是基于Lucene的全文搜索服務器REF_Ref14249\r\h[17]。Solr的底層核心,是對Lucene的JAR包和倒排索引的技術(shù)進行二次開發(fā)。本系統(tǒng)中的全文檢索服務系統(tǒng)就是通過Solr部署到服務器來完成的。并且本系統(tǒng)將采用SolrCloud分布式集群的方式,提供更優(yōu)化的查詢方式,和更優(yōu)異的檢索性能REF_Ref14320\r\h[18]。Zookeeper是一個協(xié)調(diào)服務系統(tǒng),主要用于分布式系統(tǒng)。在系統(tǒng)中,一旦網(wǎng)絡出現(xiàn)故障,信息傳輸就會出現(xiàn)問題,會導致消息發(fā)送方不知道消息是否已經(jīng)被接收,解決這個問題的唯一方法就是重新連接消息接收方,詢問錯誤原因,Zookeeper就是為解決這一問題產(chǎn)生的。Dubbo是一個具有高效性的服務框架,其實也就是用來調(diào)用服務的中間件。是由阿里巴巴公司主導研發(fā)出來的。它可以讓程序中的服務層接口以服務者與消費者的形式在配置文件中注冊,以便遠程調(diào)用服務REF_Ref29632\r\h[19]。ActiveMQ是個開放源碼的消息隊列系統(tǒng)。本系統(tǒng)采用ActiveMQ,在添加商品信息之后向ActiveMQ發(fā)布消息,索引庫訂閱此消息,會將商品信息同步添加到索引庫中,從而保證了索引庫與數(shù)據(jù)庫的一致性REF_Ref7801\r\h[13]。2.4數(shù)據(jù)庫本系統(tǒng)選擇使用MySQL數(shù)據(jù)庫,MySQL具有體積小、速度快、總體擁有成本低和開放源碼等優(yōu)點REF_Ref28685\r\h[20]。MySQL雖然體積較小但卻可以處理的數(shù)據(jù)達到千萬級,能夠滿足各種中小型企業(yè)使用。為方便操作使用,許多MySQL可視化管理工具隨之出現(xiàn)。本系統(tǒng)將使用Navicat來進行相關(guān)的建表操作。MySQL數(shù)據(jù)庫是進行網(wǎng)上商城系統(tǒng)開發(fā)數(shù)據(jù)存儲的第一選擇REF_Ref9351\r\h[21]。2.5本章小結(jié)本章對各種技術(shù)進行了介紹,前端使用了HTML&CSS、jQuery、JS等,這些技術(shù)在前端開發(fā)中承擔著不同的角色,共同為前端頁面提供了服務REF_Ref14242\r\h[7]。服務端使用到了MVC開發(fā)模式、SSM框架,以及分布式框架中使用到的重點技術(shù),Nginx負載均衡技術(shù)、Redis緩存技術(shù)、Solr全文搜索、Zookeeper集群、Dubbo消息中間件和ActiveMQ消息隊列技術(shù)。3系統(tǒng)分析3.1可行性分析當下計算機技術(shù)以及互聯(lián)網(wǎng)技術(shù)逐漸成熟并不斷發(fā)展,使得中國的網(wǎng)民數(shù)量持續(xù)增長,尤其是在今年特殊的疫情期間,人們足不出戶,無法外出購物,于是大多數(shù)人們都選擇了網(wǎng)上購物。經(jīng)過這段時間,更足以體現(xiàn)出網(wǎng)上購物已成為人們?nèi)粘I钪胁豢扇鄙俚囊徊糠?。?006年至今,我國B2C模式的電子商務持續(xù)穩(wěn)步發(fā)展,也標志著中國的電子商務市場進入了相對良性循環(huán)的,可持續(xù)發(fā)展的狀態(tài)。因此網(wǎng)上零售業(yè)也逐步成為了我國經(jīng)濟重要的組成部分。相比線下購物,網(wǎng)上購物的優(yōu)勢:商品種類齊全可以買到本地所缺的商品、價格便宜、節(jié)省時間并且提供送貨上門的服務,大大提高了購物效率,使用戶的購物體驗提高。相對于傳統(tǒng)市場的零售模式,商家的租賃費用大大減少,商品倉庫儲的費用和人工費用也都相對的減少了很多。因為網(wǎng)絡購物的優(yōu)勢,使之逐漸成為了人們采購的主要方式。這也代表著國內(nèi)網(wǎng)購市場擁有著無限光明的發(fā)展前景。3.2功能需求分析3.2.1前端功能模塊通過對天貓、京東等網(wǎng)上商城的調(diào)查研究,最終制定了本項目前端的功能模塊。本項目的前臺系統(tǒng)主要是提供給用戶使用的,所需要的功能模塊包括:商品展示、商品搜索、購物車模塊等。具體需求模塊如圖3.1所示。圖3.1前臺功能模塊3.2.2后端功能模塊一個完整的網(wǎng)上銷售平臺除了前臺系統(tǒng)之外,還需要有后臺管理系統(tǒng)提供給管理員使用,進行網(wǎng)站管理。后臺系統(tǒng)主要功能模塊包括:管理員登錄、商品管理、廣告圖片管理等模塊。具體需求模塊如圖3.2所示。圖3.2后臺功能模塊3.2.3數(shù)據(jù)庫分析數(shù)據(jù)庫部分主要是圍繞購物商城前后端所需實現(xiàn)的功能建立的數(shù)據(jù)庫表,圍繞網(wǎng)上購物系統(tǒng)基本功能、用戶需求以及管理員需求,根據(jù)系統(tǒng)分析,將會涉及到很多張數(shù)據(jù)表。具體的數(shù)據(jù)庫表信息如表3.1所示。表3.1系統(tǒng)數(shù)據(jù)庫表用戶表管理員表內(nèi)容詳情表內(nèi)容分類商品表商品類目表商品描述表商品規(guī)格參數(shù)表商品規(guī)格和商品關(guān)系表訂單詳情表訂單商品數(shù)據(jù)表物流信息表招聘信息表商城信息表投訴與建議信息表供應商申請表公告表3.3本章小結(jié)本章首先對講述了我國電子商務市場的優(yōu)勢,說明了網(wǎng)上購物系統(tǒng)的可行性。其次,針對不同角色對象,對系統(tǒng)的前后臺系統(tǒng)進行了業(yè)務的功能需求分析。最后,對系統(tǒng)中可能會使用到的數(shù)據(jù)庫表進行了分析。4系統(tǒng)設(shè)計4.1總體業(yè)務流程總體系統(tǒng)將會包含前臺系統(tǒng)和后臺系統(tǒng)兩個模塊。其中,前臺系統(tǒng)模塊是給用戶使用的,圍繞用戶在商城瀏覽購買商品展開實現(xiàn)了一系列功能,如:搜索商品、查看商品詳情、添加商品到購物車等功能。而后臺系統(tǒng)模塊則主要是對商城的各項信息進行管理,為用戶提供服務,主要實現(xiàn)功能包括:商品信息管理、商品規(guī)格信息管理和商城廣告管理等??傮w的業(yè)務流程如圖4.1所示。圖4.1系統(tǒng)總體業(yè)務執(zhí)行流程圖4.2系統(tǒng)總體框架設(shè)計一個系統(tǒng)功能上的健壯性和運行時的穩(wěn)定性是十分重要的,而系統(tǒng)整體的架構(gòu)設(shè)計將會起著至關(guān)重要的支撐作用。目前,相對成熟、流行的體系架構(gòu)有B/S和C/S兩種架構(gòu)。因為本系統(tǒng)將會是一個PC端系統(tǒng),因此本系統(tǒng)將會使用B/S架構(gòu),B/S架構(gòu)就只需要使用者打開瀏覽器即可。本系統(tǒng)最終目標是實現(xiàn)一個能夠支持較高并發(fā)訪問量的購物平臺,所以需要保證系統(tǒng)能夠在高并發(fā)的情況下依然保持高效穩(wěn)定的運行。因此本系統(tǒng)將融入分布式思想,使用B/S架構(gòu),此外系統(tǒng)總體采用前后端分離的思想,使用當前流行的SSM框架進行開發(fā)。采用集群形式部署服務器,使用Nginx保持網(wǎng)站的負載均衡,在進行消息隊列管理時使用ActiveMQ,使用Redis數(shù)據(jù)庫作為緩存服務器,使用MyCat管理MySQL數(shù)據(jù)庫集群實現(xiàn)數(shù)據(jù)庫分片和讀寫分離REF_Ref15121\r\h[19]。分布式系統(tǒng)架構(gòu)可以動態(tài)地調(diào)整以改變用戶和應用程序?qū)π畔⒌男枨驲EF_Ref4129\r\h[22]。4.3業(yè)務模塊的設(shè)計經(jīng)過分析本系統(tǒng)將涉及到六個主要的功能模塊。系統(tǒng)總體功能模塊結(jié)構(gòu)如圖4.2所示。圖4.2系統(tǒng)功能模塊結(jié)構(gòu)圖用戶模塊:用戶模塊主要包括用戶注冊功能和單點登錄功能,用戶根據(jù)頁面提示信息將正確的信息填寫好后完成注冊。注冊成功即可通過用戶名和密碼進行單點登錄操作。網(wǎng)站內(nèi)容管理:網(wǎng)站內(nèi)容管理模塊主要包含類目信息管理和頁面內(nèi)容信息管理,該模塊主要是提供給管理員使用,管理員通過后臺系統(tǒng)對商品類目和前臺頁面內(nèi)容進行管理操作。商品模塊:商品模塊同時涉及到前后臺兩部分,在前臺用戶可以進行商品搜索操作,查看商品詳情操作;而在后臺,管理員可以對商品信息進行添加、查看、編輯、刪除、上架和下架等操作。訂單模塊:訂單模塊同時涉及到前后臺兩個部分,在前臺用戶可以進行提交訂單操作;管理員可以對訂單信息進行查看、編輯、刪除。購物車模塊:用戶可以查看購物車,添加商品至購物車,修改選定商品的數(shù)量,刪除指定的商品,一鍵清空購物車等操作。其他信息管理模塊:該模塊主要提供一些其他輔助功能。4.4ER圖設(shè)計ER圖就是實體關(guān)系圖,提供了表示實體類型、屬性和聯(lián)系的方法,它是用來描述現(xiàn)實世界關(guān)系概念的有效方法。ER圖中包含幾個主要元素:矩形框,用來表示實體;菱形框,用來表示實體型之間的聯(lián)系。根據(jù)本系統(tǒng)需求分析設(shè)計了系統(tǒng)的ER圖,詳細信息如圖4.3所示。圖4.3系統(tǒng)ER圖4.5數(shù)據(jù)庫表的設(shè)計對項目系統(tǒng)中要使用到的數(shù)據(jù)進行分析,然后進行數(shù)據(jù)表結(jié)構(gòu)設(shè)計是在實現(xiàn)系統(tǒng)之前必須經(jīng)歷的步驟。系統(tǒng)需要確定實體、實體的屬性及實體間的聯(lián)系,得出關(guān)系模式REF_Ref22169\r\h[23]。一般在創(chuàng)建數(shù)據(jù)庫表時需要滿足數(shù)據(jù)庫三大范式:列不可再分、每行數(shù)據(jù)應有唯一區(qū)分REF_Ref17459\r\h[24]。不可使用非主鍵之外的列來維護表之間的關(guān)系REF_Ref17459\r\h[24]??梢杂幸恍?shù)據(jù)庫約束條件REF_Ref17459\r\h[24]。由于本系統(tǒng)包含的數(shù)據(jù)量較大,數(shù)據(jù)庫表較多,因此本章節(jié)選取了比較重要的、操作交頻繁的若干表行說明。下面將分別介紹所選取說明的數(shù)據(jù)庫表的詳細設(shè)計:用戶表。用來儲存用戶信息,主要的字段包括用戶的id,用戶名,密碼,手機號,郵箱等信息。其中,用戶密碼將使用MD5進行加密處理后再存儲至表中。用戶表結(jié)構(gòu)如表4.1所示。表4.1用戶信息表(tb_user)序號字段名數(shù)據(jù)類型字段大小是否為主鍵是否為空注釋1idbigint20是NOTNULL用戶id2usernamevarchar50否NOTNULL用戶名3passwordvarchar32否NOTNULL密碼4phonevarchar20否DEFAULFNULL手機號5emailvarchar50否DEFAULFNULL郵箱6createddatetime否NOTNULL創(chuàng)建時間7updateddatetime否NOTNULL更新時間管理員表。用來存放管理員的信息。管理員表結(jié)構(gòu)如表4.2所示。表4.2管理員表(tb_manager)序號字段名數(shù)據(jù)類型字段大小是否為主鍵是否為空注釋1idbigint20是NOTNULL管理員id2usernamevarchar50否NOTNULL用戶名3passwordvarchar32否NOTNULL密碼4phonevarchar20否DEFAULFNULL手機號5emailvarchar50否DEFAULFNULL郵箱6createddatetime否NOTNULL創(chuàng)建時間7updateddatetime否NOTNULL更新時間商品表。用來存放商品基本信息。商品表結(jié)構(gòu)如表4.3所示。表4.3商品表(tb_item)序號字段名數(shù)據(jù)類型字段大小是否為主鍵是否為空注釋1idbigint20是NOTNULL商品id2titlevarchar100否NOTNULL商品標題3sell_pointvarchar500否DEFAULFNULL商品賣點4pricebigint20否NOTNULL商品價格5numint10否NOTNULL庫存數(shù)量6barcodevarchar30否NOTNULL商品條形碼7imagevarchar500否DEFAULFNULL商品圖片8cidbigint10否DEFAULFNULL所屬類目9statustinyint4否NOTNULL商品狀態(tài)10createddatetime否NOTNULL創(chuàng)建時間11updateddatetime否NOTNULL更新時間商品類目表。用來存放商品分類信息,商品分類信息一個是樹狀級聯(lián)信息。商品類目表結(jié)構(gòu)如表4.4所示。表4.4商品類目表(tb_item_cat)序號字段名數(shù)據(jù)類型字段大小是否為主鍵是否為空注釋1idbigint20是NOTNULL類目id2parent_idbigint20否DEFAULFNULLid=0則為一級3namevarchar50否DEFAULFNULL類目名稱4statusint1否DEFAULF‘1’狀態(tài)5sort_orderint4否DEFAULFNULL排列序號6is_parenttinyint1否DEFAULF‘1’是否為父類目7createddatetime否NOTNULL創(chuàng)建時間8updateddatetime否NOTNULL更新時間內(nèi)容分類表。該表中存放的是內(nèi)容分類的信息,是一個樹狀級聯(lián)信息。內(nèi)容分類表結(jié)構(gòu)如表4.5所示。表4.5內(nèi)容分類表(tb_content_category)序號字段名數(shù)據(jù)類型字段大小是否為主鍵是否為空注釋1idbigint20是NOTNULL內(nèi)容類目id2parent_idbigint20否DEFAULFNULLid=0則為一級3namevarchar50否DEFAULFNULL內(nèi)容名稱4statusint1否DEFAULF‘1’狀態(tài)5sort_orderint4否DEFAULFNULL排列序號6is_parenttinyint1否DEFAULF‘1’是否為父類目7createddatetime否NOTNULL創(chuàng)建時間8updateddatetime否NOTNULL更新時間內(nèi)容詳情表。儲存廣告基本信息。內(nèi)容詳情表結(jié)構(gòu)如表4.6所示。表4.6內(nèi)容詳情表(tb_content)序號字段名數(shù)據(jù)類型字段大小是否為主鍵是否為空注釋1idbigint20是NOTNULLid2category_idbigint20否NOTNULL內(nèi)容類目id3titlevarchar200否DEFAULFNULL內(nèi)容標題4sub_titlevarchar100否DEFAULFNULL子標題5title_descvarchar500否DEFAULFNULL標題描述6urldatetime500否DEFAULFNULL鏈接7picdatetime300否DEFAULFNULL圖片絕對路徑8Pic2datetime300否DEFAULFNULL圖片29contenttext否DEFAULFNULL內(nèi)容10createddatetime否DEFAULFNULL創(chuàng)建時間11updateddatetime否DEFAULFNULL更新時間商城信息表。該表中存放的是有關(guān)商城的信息。商城信息表結(jié)構(gòu)如表4.7所示。表4.7商城信息表(tb_about)序號字段名數(shù)據(jù)類型字段大小是否為主鍵是否為空注釋1about_idbigint20是NOTNULL商城信息id2namevarchar255否DEFAULFNULL商城名3contentvarchar255否DEFAULFNULL商城簡介4addressvarchar255否DEFAULFNULL公司地址5peoplevarchar255否DEFAULFNULL聯(lián)系人6telbigint20否DEFAULFNULL聯(lián)系電話7mailvarchar255否DEFAULFNULL郵箱信息商品描述表。存放商品描述信息,包括商品id,商品描述等信息。商品描述表結(jié)構(gòu)如表4.8所示。表4.8商品描述表(tb_item_desc)序號字段名數(shù)據(jù)類型字段大小是否為主鍵是否為空注釋1item_idbigint20是NOTNULL商品id2item_desctext否DEFAULFNULL商品描述3createddatetime否DEFAULFNULL創(chuàng)建時間4updateddatetime否DEFAULFNULL更新時間4.6本章小結(jié)本章內(nèi)容是對系統(tǒng)的設(shè)計,首先對總體的業(yè)務流程做了簡單的分析描述。接著是對系統(tǒng)總體框架的設(shè)計進行了簡單說明,主要內(nèi)容是系統(tǒng)總體框架設(shè)計時使用到了哪些技術(shù)。然后對系統(tǒng)業(yè)務模塊的設(shè)計進行了分析論述,詳細說明了系統(tǒng)分為哪幾個模塊,每個模塊大致包含哪些功能。最后對系統(tǒng)中的操作使用頻繁的幾個數(shù)據(jù)庫表進行了詳細的介紹。5系統(tǒng)實現(xiàn)5.1系統(tǒng)開發(fā)環(huán)境為了保證本系統(tǒng)的穩(wěn)定性、擴展性以及健壯性,開發(fā)環(huán)境的選擇是十分重要的。根據(jù)前期的調(diào)研準備,最終選定了本系統(tǒng)的開發(fā)環(huán)境,下面將對本系統(tǒng)開發(fā)環(huán)境進行詳細的說明。具體信息如表5.1所示。表5.1系統(tǒng)開發(fā)環(huán)境信息表序號技術(shù)(軟件)技術(shù)(軟件)名稱1操作系統(tǒng)Windows102系統(tǒng)開發(fā)語言Java3Jdk版本1.84系統(tǒng)服務器Tomcat75數(shù)據(jù)庫MySQL5.7.176開發(fā)工具Eclipse4.6.37負載均衡服務器Nginx1.8.08項目管理工具Maven3.2.19圖片服務器FastDFS5.0.510系統(tǒng)整體調(diào)度工具Dubbo2.5.411集群管理工具Zookeeper3.4.612系統(tǒng)緩存服務器Redis3.0.013全文搜服務器Solr4.10.314系統(tǒng)消息中間件ActiveMQ5.12.05.2系統(tǒng)工程結(jié)構(gòu)圖5.1系統(tǒng)工程結(jié)構(gòu)圖本項目使用Eclipse4.6.3版本開發(fā),Maven使用的是3.2.1版本,本地倉庫默認位置在:~/.m2/respository。5.3系統(tǒng)主要模塊實現(xiàn)5.3.1SSO單點登錄系統(tǒng)設(shè)計與實現(xiàn)在一個完整的商城系統(tǒng)中,登錄功能是必不可少的。與普通登錄系統(tǒng)不同,本項目系統(tǒng)中設(shè)計實現(xiàn)的是單點登錄系統(tǒng),即SSO系統(tǒng),英文全稱為SingleSignOn,用戶成功后,不需要多次重復登錄,就可以在不同頁面之間進行跳轉(zhuǎn)。在本系統(tǒng)中,當用戶首次登錄成功后,將以用戶id作為key,使用UUID(UniversallyUniqueIdentifier,通用唯一識別碼)生成token令牌,再將生成的信息存入Redis數(shù)據(jù)庫中,并設(shè)置信息的有效時間。這樣當用戶登錄后瀏覽訪問本系統(tǒng)中的其他網(wǎng)頁時,系統(tǒng)會首先去Redis數(shù)據(jù)庫中,根據(jù)token檢查用戶是否登錄,若用戶處于登錄狀態(tài),則可以直接獲取到用戶信息并自動登錄。該功能實現(xiàn)的重要接口:登錄接口http://localhost:8088/user/login該接口是實現(xiàn)單點登錄功能的主要操作,用戶登錄成功后會返回token信息并存入Redis數(shù)據(jù)庫中。登錄成功后Redis中的信息如圖5.2所示,發(fā)起的請求信息如圖5.3所示。圖5.2登錄成功,用戶信息存入Redis信息圖圖5.3登錄成功,發(fā)起請求信息圖根據(jù)token查詢用戶信息http://localhost:8088/user/token/{token}該接口中的token值是用戶的登錄憑證,通過登錄接口查詢返回。退出登錄接口http://localhost:8088/user/logout/{token}通過接口中所帶的token值,在Redis中查詢已登錄的用戶信息,并刪除,這樣就完成了退出操作。5.3.2網(wǎng)站內(nèi)容管理模塊的設(shè)計與實現(xiàn)類別管理模塊的主要功能包括添加類目、顯示類目、刪除類目和重命名操作。具體內(nèi)容管理模塊的功能如圖5.4所示圖5.4內(nèi)容管理模塊功能圖展示類目請求的URL:http://localhost:8081/content/category/list。該操作發(fā)送請求時的參數(shù)為id,就是指當前節(jié)點的id。如果第一次發(fā)起請求時沒有參數(shù),那么這時需要給定默認參數(shù)值“0”,即id=0。獲取到參數(shù)后將參數(shù)傳遞給業(yè)務層,業(yè)務層通過id和parentId進行查詢列表,得到列表List<TbContentCategory>,最后將該列表轉(zhuǎn)成List<EasyUITreeNode>。該功能的實現(xiàn)的業(yè)務邏輯處理代碼如下:publicList<EasyUITreeNode>getContentCatList(longparentId){ //根據(jù)parentid查詢子節(jié)點列表 TbContentCategoryExampleexample=newTbContentCategoryExample(); Criteriacriteria=example.createCriteria(); //設(shè)置查詢條件 criteria.andParentIdEqualTo(parentId); //執(zhí)行查詢 List<TbContentCategory>catList=contentCategoryMapper.selectByExample(example); //轉(zhuǎn)換成EasyUITreeNode的列表 List<EasyUITreeNode>nodeList=newArrayList<>(); for(TbContentCategorytbContentCategory:catList){ EasyUITreeNodenode=newEasyUITreeNode(); node.setId(tbContentCategory.getId()); node.setText(tbContentCategory.getName()); node.setState(tbContentCategory.getIsParent()?"closed":"open"); //添加到列表 nodeList.add(node); } returnnodeList; }添加類目操作通過請求URL:http://localhost:8081/content/category/create,由前端控制器接收URL中的傳遞的參數(shù)parentId和name,然后將值傳給業(yè)務層,根據(jù)parentId來確定類目級別,封裝對象后執(zhí)行添加操作。添加類目操作請求響應信息如圖5.5所示。圖5.5添加類目操作請求響應的數(shù)據(jù)圖重命名操作該操作是根據(jù)當前選擇的類目的id進行操作,前端控制器根據(jù)請求URL獲取參數(shù)id和name,然后將參數(shù)值傳遞給業(yè)務層,業(yè)務層根據(jù)id查詢到給對象的信息,然后將新的數(shù)據(jù)替換存儲到數(shù)據(jù)庫表中。刪除操作刪除類目操作發(fā)起請求后,前端控制器從請求URL中獲取到被選中的類目信息的id和parentId,將其作為參數(shù)傳遞給業(yè)務層,業(yè)務層首先需要根據(jù)parentId判斷節(jié)點是不是父類目,如果是,就遞歸刪除父類目和其他所有的子類目信息,然后將父類目的isParent的屬性值改為false。如果不是父類目,則直接根據(jù)id刪除該類目。刪除類目操作請求響應信息如圖5.6所示。圖5.6刪除類目操作請求響應的數(shù)據(jù)圖頁面內(nèi)容管理模塊包含分頁展示、添加、編輯和刪除操作。該模塊中的添加、編輯和刪除操作與類目管理模塊的添加類目、刪除類目和重命名操作基本相同。具體頁面內(nèi)容管理模塊功能如圖5.7所示。圖5.7頁面內(nèi)容管理模塊功能圖其中不同的是分頁展示功能。請求的URL:http://localhost:8081/content/query/list,請求的參數(shù)categoryId(內(nèi)容類目id),page(頁碼),rows(展示條數(shù))。將參數(shù)傳遞給業(yè)務層后,業(yè)務層會根據(jù)id值進行查詢內(nèi)容列表的操作,查詢結(jié)果會得到列表List<TbContent>,然后對其進行分頁處理。該功能的實現(xiàn)的業(yè)務邏輯處理代碼如下:publicEasyUIDataGridResultgetContentList(intpage,introws){ ///設(shè)置分頁信息 PageHelper.startPage(page,rows); //執(zhí)行查詢 TbContentExampleexample=newTbContentExample(); List<TbContent>list=contentMapper.selectByExample(example); //取分頁信息 PageInfo<TbContent>pageInfo=newPageInfo<>(list); //創(chuàng)建返回結(jié)果對象 EasyUIDataGridResultresult=newEasyUIDataGridResult(); result.setTotal(pageInfo.getTotal()); result.setRows(list); returnresult; }5.3.3商品管理模塊設(shè)計與實現(xiàn)在后臺系統(tǒng)中,商品管理模塊主要的功能有商品詳情分頁展示、添加商品、編輯商品、刪除商品、上架商品以及下架商品等操作。其中商品詳情分頁展示、添加商品、編輯商品和刪除商品操作與頁面內(nèi)容管理模塊中的分頁展示、添加、編輯和刪除操作的業(yè)務流程相似,因此在這里不再過多贅述。具體商品管理模塊功能如圖5.8所示。圖5.8商品管理模塊功能圖需要詳細說明的是商品上架以及商品下架功能操作。這兩個功能操作的業(yè)務流程相似,因此以商品上架操作為例展開說明。管理員在后臺選擇好商品后點擊上架,系統(tǒng)將把選中的商品的表單數(shù)據(jù)通過URL轉(zhuǎn)發(fā)給前端控制器,前端控制器接收URL中的傳遞的參數(shù)id,然后將值傳給業(yè)務層,業(yè)務層根據(jù)id查詢到給對象的信息,然后將商品的status(商品狀態(tài))的值進行更改,其中商品狀態(tài)status=1時,表示商品上架;商品狀態(tài)status=2時,表示商品下架。該功能的實現(xiàn)的業(yè)務邏輯處理代碼如下: //商品上架publicMallResultreshelfItem(Stringids){//找到對應的商品 String[]buff=ids.split(","); for(Stringid:buff){ //修改商品信息 TbItemselectByPrimaryKey=itemMapper.selectByPrimaryKey(Long.parseLong(id)); selectByPrimaryKey.setStatus((byte)1); //更改商品信息 itemMapper.updateByPrimaryKey(selectByPrimaryKey); } returnMallResult.ok(); }前臺系統(tǒng)中商品模塊除了商品分頁展示功能外,還有查看商品詳情功能。該功能的實現(xiàn)是通過前端控制器從請求URL中獲取到itemId即商品id,將itemId作為參數(shù)傳遞給業(yè)務層,業(yè)務層根據(jù)itemId查詢商品的基本信息和商品的描述信息。表現(xiàn)層調(diào)用服務層,獲取信息封裝到Model對象中,最后保存到Request域中。前端商品信息頁面,從域中獲取需要的屬性值,然后就可以實現(xiàn)商品詳情頁面的動態(tài)展示了。某商品詳情頁如圖5.9所示。該功能實現(xiàn)的表現(xiàn)層代碼如下: //商品上架@RequestMapping("/item/{itemId}") publicStringshowItemInfo(@PathVariableLongitemId,Modelmodel){ //調(diào)用服務取商品基本信息 TbItemtbItem=itemService.geTbItemById(itemId); Itemitem=newItem(tbItem);//取商品描述信息 TbItemDescitemDesc=itemService.geTbItemDescById(itemId);//把信息傳遞給頁面 model.addAttribute("item",item); model.addAttribute("itemDesc",itemDesc); return"item";//返回邏輯視圖 }圖5.9某商品詳情頁5.3.4全文搜索系統(tǒng)設(shè)計與實現(xiàn)本系統(tǒng)的全文搜索組件使用的是Solr。為了提供更優(yōu)化的查詢方式和更優(yōu)異的檢索性能,本系統(tǒng)采用Solr配合Zookeeper搭建了SolrCloud。商品信息導入索引庫想要在頁面上展示商品的信息,首先需要將商品的各個字段信息添加到Solr索引庫中。本系統(tǒng)將使用Java代碼來完成這一操作。具體使用代碼完成的操作步驟如下:首先需要先從數(shù)據(jù)庫中查詢讀取到商品的詳細信息,然后創(chuàng)建一個Solr流對象,將信息封裝到該對象中,接著就可以寫入到Solr索引庫中了,最后也是最不可缺少的一步就是發(fā)布服務。具體Solr索引庫信息如圖5.10所示。實現(xiàn)添加Solr索引功能業(yè)務邏輯層代碼如下: //查詢商品列表publicMallResultimportAllItems(){ try{ List<SearchItem>itemList=itemMapper.getItemList();//遍歷商品列表 for(SearchItemsearchItem:itemList){//創(chuàng)建文檔對象 SolrInputDocumentdocument=newSolrInputDocument(); //向文檔對象中添加域 document.addField("id",searchItem.getId()); document.addField("item_title",searchItem.getTitle()); document.addField("item_sell_point",searchItem.getSell_point()); document.addField("item_price",searchItem.getPrice()); document.addField("item_image",searchItem.getImage()); document.addField("item_category_name",searchItem.getCategory_name());//把文檔對象寫入索引庫 SolrServer.add(document); }//提交 SolrSmit();//返回導入成功 returnMallResult.ok(); }catch(Exceptione){ e.printStackTrace(); returnMallResult.build(500,"數(shù)據(jù)導入時發(fā)生異常"); } }圖5.10Solr索引庫信息圖前臺用戶使用搜索功能請求的URL:http://localhost:8085/search?Keyword=XXX,前端控制器可以根據(jù)請求URL獲取到的參數(shù)有keyword(查詢條件),page(頁碼,如果沒有,需給定默認值1)和rows(條數(shù))。將參數(shù)傳遞給業(yè)務層后,業(yè)務層根據(jù)keyword查詢商品列表,將得到的結(jié)果封裝到searchResult中,返回給表現(xiàn)層。搜索功能操作,業(yè)務邏輯處理代碼如下: publicSearchResultsearch(Stringkeyword,intpage,introws)throwsException{ //創(chuàng)建一個SolrQuery對象 SolrQueryquery=newSolrQuery(); //設(shè)置查詢條件 query.setQuery(keyword); //設(shè)置分頁條件 if(page<=0)page=1; query.setStart((1)*rows); query.setRows(rows); //設(shè)置默認搜索域 query.set("df","item_title"); //開啟高亮顯示 query.setHighlight(true); query.addHighlightField("item_title"); query.setHighlightSimplePre("<emstyle=\"color:red\">"); query.setHighlightSimplePost("</em>"); //調(diào)用dao執(zhí)行查詢 SearchResultsearchResult=searchDao.search(query); //計算總頁數(shù) longrecordCount=searchResult.getRecordCount(); inttotalPage=(int)(recordCount/rows); if(recordCount%rows>0) totalPage++; //添加到返回結(jié)果 searchResult.setTotalPages(totalPage); //返回結(jié)果 returnsearchResult; }表現(xiàn)層接收結(jié)果后,可以獲取到商品列表數(shù)據(jù)信息,將獲取到的信息封裝到Model對象中,然后保存到Request域中,最后返回到視圖。前端search.jsp頁面可以從域?qū)ο笾蝎@取需要的屬性值,然后就可以實現(xiàn)查詢頁面的動態(tài)展示了。搜索功能操作,表現(xiàn)層代碼如下:@RequestMapping("/search") publicStringsearchItemList(Stringkeyword, @RequestParam(defaultValue="1")Integerpage,Modelmodel)throwsException{ keyword=newString(keyword.getBytes("iso-8859-1"),"utf-8"); //查詢商品列表 SearchResultsearchResult=searchService.search(keyword,page,SEARCH_RESULT_ROWS); //把結(jié)果傳遞給頁面 model.addAttribute("query",keyword); model.addAttribute("totalPages",searchResult.getTotalPages()); model.addAttribute("page",page); model.addAttribute("recourdCount",searchResult.getRecordCount()); model.addAttribute("itemList",searchResult.getItemList()); //異常測試 //inta=1/0; //返回前端頁面 return"search"; }5.3.5訂單管理模塊設(shè)計與實現(xiàn)訂單模塊涉及到前臺用戶操作和后臺管理員操作兩部分。其中前臺用戶主要擁有生成訂單的操作,而后臺管理員則擁有對訂單進行編輯和刪除的操作。生成訂單當用戶在購物車展示頁面點擊去結(jié)算的時候,首先會進行自動驗證,驗證用戶是否處于登錄狀態(tài),若沒有登錄則需用戶進行登錄,若用戶已登錄就可以生成訂單信息。前臺提交表單后,前端控制器獲取信息,然后信息傳給業(yè)務層,業(yè)務層將獲取的學習進行封裝對象最后執(zhí)行生成訂單操作,生成訂單后需要將用戶的購物車清空,同時需要更新Redis中的數(shù)據(jù)。生成訂單操作表現(xiàn)層代碼如下:@RequestMapping(value="/order/create",method=RequestMethod.POST) publicStringcreateOrder(OrderInfoorderInfo,HttpServletRequestrequest){//取用戶信息 TbUseruser=(TbUser)request.getAttribute("user");//把用戶信息添加到orderInfo中。 orderInfo.setUserId(user.getId()); orderInfo.setBuyerNick(user.getUsername());//調(diào)用服務生成訂單 MallResultmallResult=orderService.createOrder(orderInfo); //如果訂單生成成功,需要刪除購物車 if(mallResult.getStatus()==200){//清空購物車 cartService.clearCartItem(user.getId()); } //把訂單號傳遞給頁面 request.setAttribute("orderId",mallResult.getData()); request.setAttribute("payment",orderInfo.getPayment()); //返回邏輯視圖 return"success"; }修改訂單該操作管理員擁有的操作,該操作根據(jù)當前選擇的訂單的id進行操作,前端控制器接收URL中的傳遞的參數(shù)id和tbOrder對象,然后將值傳給業(yè)務層,業(yè)務層根據(jù)id查詢到訂單的信息,然后將新的tbOrder對象的信息更新至數(shù)據(jù)庫表中。修改訂單操作,業(yè)務邏輯處理代碼如下: //更新publicMallResultupdateOrder(TbOrderorder,Stringdesc){ //TODOAuto-generatedmethodstub //1、根據(jù)商品id,更新商品表,條件更新TbOrderExampleorderExample=newTbOrderExample();Criteriacriteria=orderExample.createCriteria();criteria.andOrderIdEqualTo(order.getOrderId());orderMapper.updateByExampleSelective(order,orderExample);returnMallResult.ok(); }刪除訂單刪除訂單操作是管理員擁有的操作,該操作將選中的訂單的id作為參數(shù)傳遞,業(yè)務層需要先根據(jù)id查詢到訂單信息,然后進行訂單的刪除操作。刪除訂單操作,業(yè)務邏輯處理代碼如下: publicMallResultdeleteById(List<String>ids){//根據(jù)id刪除訂單信息 //TODOAuto-generatedmethodstub TbOrderExampletbOrderExample=newTbOrderExample(); TbOrderExample.Criteriacriteria=tbOrderExample.createCriteria(); criteria.andOrderIdIn(ids); inti=orderMapper.deleteByExample(tbOrderExample); if(i>0){ returnMallResult.ok(); }else{ returnMallResult.ok("刪除失敗"); } }5.3.6購物車模塊設(shè)計與實現(xiàn)購物車模塊包含的主要功能有:展示購物車列表、添加商品到購物車、更新購物車商品數(shù)量、刪除購物車中的商品以及清空購物車等操作。展示購物車列表在Controller層模塊中的CartController類中的showCatList()方法中從首先需要判斷用戶是否登錄,若未登錄,則從Cookie中獲取購物車列表;若登錄,則根據(jù)用戶id再去查詢購物車列表。將獲取到購物車的詳細信息進行封裝后,保存到Request域中,最后返回視圖。前端cart.jsp頁面可以從域中獲取所需要的屬性值,然后可以實現(xiàn)購物車頁面的動態(tài)展示了。具體購物車列表如圖5.11所示。圖5.11顯示購物車列表顯示購物車列表操作,表現(xiàn)層代碼如下:@RequestMapping("/cart/cart") publicStringshowCatList(HttpServletRequestrequest,HttpServletResponseresponse){ //從cookie中取購物車列表 List<TbItem>cartList=getCartListFromCookie(request); //判斷用戶是否為登錄狀態(tài) TbUseruser=(TbUser)request.getAttribute("user"); //如果登錄 if(user!=null){ //從cookie中取購物車列表 //如果不為空合并購物車。 cartService.mergeCart(user.getId(),cartList); //把cookie中的購物車刪除 CookieUtils.deleteCookie(request,response,"cart"); //從服務端取購物車列表 cartList=cartService.getCartList(user.getId()); } //把列表傳遞給頁面 request.setAttribute("cartList",cartList); //返回邏輯視圖 return"cart"; }添加商品到購物車本系統(tǒng)中該功能不論用戶登錄與否都可以進行將商品添加至購物車的操作。添加商品至購物車操作時會首先獲取itemId(商品id)和num(商品數(shù)量),為了保證在瀏覽器關(guān)閉前,購物車中的商品信息能夠持續(xù)存在,需要先信息保存至Cookie中。業(yè)務層根據(jù)獲取的itemId查詢商品的詳細信息,然后返回到Controller層,Controller層將獲取到的購物車信息,數(shù)據(jù)處理后存到Redis中。添加成功后,Redis中的數(shù)據(jù)如圖5.12所示。圖5.12添加成功后,Redis中的數(shù)據(jù)更新購物車商品數(shù)量當發(fā)起更新購物車商品數(shù)量的請求時,前端控制器會從URL中的獲取被選中的信息的userId,itemId和num,然后作為參數(shù)傳給業(yè)務層,業(yè)務層會根據(jù)id查詢到購物車信息列表,然后再跟進itemId查詢要修改的指定商品信息,然后將新的num(商品數(shù)量)更新至數(shù)據(jù)庫表中,同時也需要更新Redis中的信息。購物車商品數(shù)量更新操作,業(yè)務邏輯處理代碼如下: publicMallResultupdateCartNum(longuserId,longitemId,intnum){ //從Redis中取商品信息 Stringjson=jedisClient.hget(Redis_CART_PRE+":"+userId,itemId+""); //更新商品數(shù)量 TbItemtbItem=JsonUtils.jsonToPojo(json,TbItem.class); tbItem.setNum(num); //寫入Redis jedisClient.hset(Redis_CART_PRE+":"+userId,itemId+"",JsonUtils.objectToJson(tbItem)); returnMallResult.ok(); }刪除購物車中的商品刪除購物車中的商品操作是將選中購物車中商品的itemId和userId作為參數(shù)傳遞,業(yè)務層需要先根據(jù)userId查詢到購物車列表,然后在根據(jù)itemId進行商品的刪除操作,同時需要更新Redis中的數(shù)據(jù)。刪除購物車中選中的商品操作,業(yè)務邏輯處理代碼如下: publicMallResultdeleteCartItem(longuserId,longitemId){ //刪除購物車商品 jedisClient.hdel(Redis_CART_PRE+":"+userId,itemId+""); returnMallResult.ok(); }清空購物車清空購物車操作是將userId作為參數(shù)傳遞,業(yè)務層需要先根據(jù)userId查詢到購物車列表,然后直接將整個列表刪除,同時需要更新Redis中的數(shù)據(jù)。清空購物車操作,業(yè)務邏輯處理代碼如下: publicMallResultclearCartItem(longuserId){ //清空購物車信息 jedisClient.del(Redis_CART_PRE+":"+userId); returnMallResult.ok(); }5.4本章小結(jié)本章首先介紹了系統(tǒng)的開發(fā)環(huán)境,然后分析了系統(tǒng)的工程結(jié)構(gòu),最后闡述了系統(tǒng)的主要功能模塊的設(shè)計與實現(xiàn),包括SSO的單點登錄系統(tǒng)的設(shè)計和實現(xiàn),網(wǎng)站內(nèi)容管理模塊的設(shè)計和實現(xiàn),商品管理模塊的設(shè)計和實現(xiàn),全文搜索系統(tǒng)的設(shè)計與實現(xiàn),訂單管理模塊和購物車模塊的設(shè)計與實現(xiàn)。6系統(tǒng)測試6.1測試目的任何一個系統(tǒng)在開發(fā)完成后都不可缺少測試環(huán)節(jié)。測試的主要目的是檢測項目系統(tǒng)中可能會存在的問題,然后對系統(tǒng)進行優(yōu)化改進,以提高系統(tǒng)的穩(wěn)定性及可靠性,同時也提高用戶的使用體驗。測試需要保證完整性和正確性REF_Ref20162\r\h[25],完整全面的測試是整個系統(tǒng)質(zhì)量的重要保障,因此本次測試將從兩個方面進行,分別是系統(tǒng)功能測試和系統(tǒng)性能測試。6.2系統(tǒng)功能測試下面是對系統(tǒng)各模塊中的各個功能進行測試的詳細分析。用戶模塊測試。詳細結(jié)果如表6.1所示。表6.1用戶模塊系統(tǒng)功能測試表所屬功能模塊測試功能操作預期結(jié)果測試結(jié)果用戶模塊用戶注冊單點登錄輸入注冊信息輸入用戶名和密碼。輸入符合要求的注冊信息,則注冊成功;否則失敗輸入正確的用戶名和密碼,則登錄成功;否則失敗與預期結(jié)果一致與預期結(jié)果一致商品模塊測試。詳細結(jié)果如表6.2所示。表6.2商品模塊系統(tǒng)功能測試表所屬功能模塊測試功能操作預期結(jié)果測試結(jié)果商品模塊添加商品信息修改商品信息刪除商品信息查看商品信息點擊添加點擊修改點擊刪除點擊商品詳情(前臺用戶操作)輸入符合要求的信息,則添加成功;否則失敗輸入符合要求的信息,則編輯成功;否則失敗彈出刪除確認頁面,確定則刪除;否則不刪跳轉(zhuǎn)商品詳情頁面與預期結(jié)果一致與預期結(jié)果一致與預期結(jié)果一致與預期結(jié)果一致訂單模塊測試。詳細結(jié)果如表6.3所示。表6.3訂單模塊系統(tǒng)功能測試表所屬功能模塊測試功能操作預期結(jié)果測試結(jié)果訂單模塊提交訂單信息修改訂單信息刪除訂單信息點擊提交訂單(前臺用戶操作)點擊修改點擊刪除用戶確認信息無誤則提交輸入符合要求的信息,則編輯成功;否則失敗彈出刪除確認頁面,確定則刪除;否則不刪與預期結(jié)果一致網(wǎng)站內(nèi)容管理模塊測試。詳細結(jié)果如表6.4所示。表6.4網(wǎng)站內(nèi)容管理模塊系統(tǒng)功能測試表所屬功能模塊測試功能操作預期結(jié)果測試結(jié)果網(wǎng)站內(nèi)容管理模塊添加類目信息重命名刪除類目信息點擊添加點擊重命名點擊刪除輸入符合要求的信息,則添加成功;否則失敗輸入符合要求的信息,則重命名成功;否則失敗彈出刪除確認頁面,確定則刪除;否則不刪與預期結(jié)果一致與預期結(jié)果一致與預期結(jié)果一致添加內(nèi)容信息編輯內(nèi)容信息刪除內(nèi)容信息點擊添加點擊編輯點擊刪除輸入符合要求的信息,則添加成功;否則失敗輸入符合要求的信息,則編輯成功;否則失敗彈出刪除確認頁面,確定則刪除;否則不刪與預期結(jié)果一致與預期結(jié)果一致與預期結(jié)果一致(5)購物車模塊測試。詳細結(jié)果如表6.5所示。表6.5購物車模塊系統(tǒng)功能測試表所屬功能模塊測試功能操作預期結(jié)果測試結(jié)果購物車模塊添加商品至購物車修改商品數(shù)量刪除選定商品清空購物車點擊添加點擊編輯點擊刪除點擊清空添加成功修改成功彈出刪除確認頁面,確定則刪除;否則不刪彈出清空確認頁面,確定則清空;否則不清空與預期結(jié)果一致與預期結(jié)果一致與預期結(jié)果一致與預期結(jié)果一致6.3系統(tǒng)性能測試該部分將使用到Apache組織開放源碼的壓力測試工具ab,這款工具可以很好的用來測試本系統(tǒng)性能。通過命令:ab-c并發(fā)數(shù)-n請求數(shù)請求路徑/。來模擬真實環(huán)境下的負載壓力,完成系統(tǒng)性能的測試。以商城最常被訪問的商城首頁為例,分別模擬了500并發(fā)數(shù)500請求數(shù)、500并發(fā)數(shù)1000請求數(shù)、500并發(fā)數(shù)5000請求數(shù)三種情況。500并發(fā)數(shù)500請求數(shù)。詳細結(jié)果如圖6.1所示。執(zhí)行語句:ab-c500

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論