基于SSH框架的電子商城_第1頁
基于SSH框架的電子商城_第2頁
基于SSH框架的電子商城_第3頁
基于SSH框架的電子商城_第4頁
基于SSH框架的電子商城_第5頁
已閱讀5頁,還剩54頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

-1-目錄摘要 -1-Abstract -2-1. 引言 -3-2. 設計目的與任務 -4-3. 需求分析 -4-4. 系統(tǒng)設計 -5-4.1分層模式 -5-4.2開發(fā)技術(shù)與工具 -5-4.3總體設計 -10-4.3.1系統(tǒng)總體結(jié)構(gòu) -10-4.3.2流程圖 -12-4.4詳細設計 -13-4.4.1數(shù)據(jù)庫設計 -13-4.4.2系統(tǒng)開發(fā)規(guī)范及說明 -17-4.4.3具體模塊設計 -19-5. 程序清單 -26-5.1數(shù)據(jù)庫腳本 -26-5.2項目實現(xiàn)部分代碼 -29-6. 程序調(diào)試與體會 -45-7. 運行結(jié)果 -46-8. 結(jié)論 -54-9. 致謝 -54-10. 參考文獻 -54-

摘要隨著信息化網(wǎng)絡的發(fā)展,網(wǎng)絡對人們的生活影響越來越大,網(wǎng)上購物也逐漸成為一種趨勢,這對電子商場的發(fā)展起到了很好的推進作用。本文主要通過對電子商城的應用環(huán)境和主要實現(xiàn)功能進行分析,敘述了本電子商城的設計與實現(xiàn)過程。該系統(tǒng)是基于多層企業(yè)級應用標準JAVAEE技術(shù)開發(fā)的WEB應用,以典型的MVC模式架構(gòu)為基礎。采用JaveEE5輕量級框架SSH與前臺Ajax技術(shù)相結(jié)合來實現(xiàn),在設計過程中全方位的應用軟件工程的開發(fā)思想,對項目進行UML建模包括各模塊的類圖、時序圖等。系統(tǒng)基于B/S分布式結(jié)構(gòu),適應范圍廣闊。關(guān)鍵詞:電子商城;SSH;Ajax;框架

AbstractWiththedevelopmentofinformationnetworks,thenetworkplaysanincreasingroleinpeople'slives,andonlineshoppingisbecomingatrend,whichwonderfullyfacilitatesthedevelopmentofelectronicstore.

Thisarticleisfocusedontheanalysisoftheappliedenvironmentofelectronicmallandthemainachievementfunction,forthepurposeofdescribingthedesignandimplementprocessofE-mall.Thesystemisbasedonthewebapplicationdevelopedwithmulti-standardenterpriseapplicationstandardJAVAEE,framedwithclassicalMVCmodelarchitecture,andrealizedthroughthecombinationof

lightweightframeworkSSHandfrontdeskAjaxtechnology.

InthedesignprocessafullrangeofapplicationdevelopmentsoftwareengineeringdevelopmentideaswasusedintheUMLmodelingoftheproject,whichincludedclassdiagrams,sequencediagrams.

ThesystemisbasedonB/Sdistributedarchitecturetomeetabroadrangeofrequirements.Keywords:ElectronicMall,SSH,Ajax,Framework引言隨著網(wǎng)上購物的迅猛發(fā)展,電子商城大量涌現(xiàn),而電子商城的出現(xiàn)不僅改變了人們傳統(tǒng)的購物方式,也逐漸的影響著人們的消費觀,一個好的電子商城不僅能給客戶帶來方便,更能給企業(yè)帶來巨大的財富。本商城主要利用JavaEE與Ajax技術(shù)進行開發(fā),具有很強的安全性、可靠性和可擴展性。其前臺實現(xiàn)了從商品選購到訂單提交整個業(yè)務流程,后臺實現(xiàn)了對整個系統(tǒng)的管理,就整體功能而言,能滿足基本的網(wǎng)上購物需求,能讓用戶感到便捷、快速,讓企業(yè)管理、維護更簡單。設計目的與任務隨著信息化技術(shù)在生活中的應用越來越廣泛,網(wǎng)上購物也逐漸成為人們的一種生活方式。本系統(tǒng)正是基于這樣一種環(huán)境下應運而生。本電子商城分為前、后臺兩部分,前臺主要實現(xiàn)會員的網(wǎng)上購物業(yè)務流程,后臺則由各種管理員對商城會員、商品、定單等內(nèi)容進行管理。需求分析本電子商城分為前后臺兩部分,前臺主要包括非會員和會員用戶,后臺分為商品管理員、訂單管理員、會員管理員和系統(tǒng)管理員。在系統(tǒng)中依據(jù)用戶的權(quán)限執(zhí)行相應的功能。系統(tǒng)用例圖如下所示:圖3-1系統(tǒng)用例圖系統(tǒng)設計4.1分層模式本系統(tǒng)是基于B/S模式開發(fā)的JAVAEE多層體系結(jié)構(gòu)WEB應用。系統(tǒng)開發(fā)主要分為以下幾層:表示層、業(yè)務層、DAO層、持久層。業(yè)務層和DAO層都通過接口與其它層進行連接從而減小了各層之間的耦合度,實現(xiàn)高內(nèi)聚、低耦的思想。分層結(jié)構(gòu)圖如下所示:圖4-1系統(tǒng)分層結(jié)構(gòu)4.2開發(fā)技術(shù)與工具主要開發(fā)工具為:MyEclipse8.6、Mysql6.0、Tomcat6.0、PowerDesigner12。主要技術(shù)包括:JavaEE輕量級框架S2SH、MD5算法、Log4j、Ajax、JSON。S2SH集成框架是Struts、Spring和Hibernate三種技術(shù)的有機融合,是目前應用最廣泛的JavaEE架構(gòu)。在S2SH集成框架中,Struts的作用是提供MVC模型,將界面、業(yè)務邏輯和數(shù)據(jù)分離,并提供一個高可擴展的架構(gòu)。Spring作為核心,向上整合MVC框架,向下整合ORM框架,使用Spring的IoC容器來管理各組件之間之間的依賴關(guān)系,Spring的聲明事務將負責邏輯層組件的事務管理。而Hibernate提供了一個抽象的數(shù)據(jù)服務視圖,將用戶對數(shù)據(jù)庫的訪問進行高度抽象。Struts是目前創(chuàng)建Web應用最常用的表現(xiàn)層MVC框架實現(xiàn),是JakartaApache的一個開源項目。基于Model2的Struts框架利用控制器和定制標簽庫將應用中的模型和視圖分離,達到了層間松散耦合的效果,同時提高系統(tǒng)的靈活性、重用性和維護性。作為開源項目,Struts經(jīng)受了大量實踐的檢驗,功能越來越強大,體系也日臻完善,并且對其他技術(shù)和框架顯示出良好的融合性。圖4-2Struts2.0MVC結(jié)構(gòu)圖Spring由RodJohnson創(chuàng)建,它是為了解決企業(yè)應用開發(fā)的復雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。圖4-3Spring功能圖Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用。圖4-4Hibernate運行圖AJAX是AsynchronoutJavaScriptandXML的縮寫,它并不是一門新的語言或技術(shù),實際上是幾項技術(shù)按一定的方式組合在一起,在共同的協(xié)作中發(fā)揮各自的作用,它包括:使用XHTML和CSS標準化呈現(xiàn);使用DOM實現(xiàn)動態(tài)顯示和交互;使用XML和XSLT進行數(shù)據(jù)交換和處理;使用XMLHttpRequest進行異步數(shù)據(jù)讀取;最后用JavaScript綁定和處理所有數(shù)據(jù)。AJAX的一個最大的特點是無需刷新頁面便可向服務器傳輸或讀寫數(shù)據(jù)(又稱無刷新頁面),這一特點要得益于XMLHTTP組件XMLHttpRequest對象。這樣就可以像再發(fā)桌面應用程序只同服務器進行數(shù)據(jù)層面的交換,而不用每次都刷新界面,也不用每次將數(shù)據(jù)處理的工作提交給服務器來做,這樣即減輕了服務器的負擔又加快了響應速度、縮短了用戶等候時間。圖4-5Ajax模型JSON(JavaScriptObjectNotation,JavaScript對象標記)是一種輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫,同時也易于機器解析和生成。它基于JavaScript(StandardECMA-2623rdEdition-December1999)的一個子集。JSON采用與編程語言無關(guān)的文本格式,但是也使用了類C語言的習慣,這些特性使JSON成為理想的數(shù)據(jù)交換格式。而AJAX可以利用JSON更加有效地接收數(shù)據(jù),因為JSON特殊的屬性。在Struts2的showcase中的AJAX部分,JSON的結(jié)果輸出是通過Freemaker模板實現(xiàn)。這種方法在簡易性和靈活性上都比不上JSON插件。MessageDigestAlgorithmMD5(中文名為消息摘要算法第五版)為計算機安全領域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護。當用戶登錄的時候,系統(tǒng)把用戶輸入的密碼進行MD5Hash運算,然后再去和保存在文件系統(tǒng)中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。這可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道。Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIXSyslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。4.3總體設計4.3.1系統(tǒng)總體結(jié)構(gòu) 本系統(tǒng)分為前臺和后臺兩部分,前臺提供一條網(wǎng)上購物業(yè)務流程的功能實現(xiàn),主要實現(xiàn)模塊見圖4-6;后實現(xiàn)對前臺功能信息的管理,主要實現(xiàn)模塊見圖4-7。前臺功能模塊:圖4-6前臺功能模塊后臺功能模塊:圖4-7后臺功能模塊4.3.2流程圖前臺主要分為非會員用戶和會員用戶,其中只有會員用戶才能實現(xiàn)在線購物,而非會員用戶必需進行注冊。后臺用戶主要分為商品管理員、會員管理員、定單管理員、系統(tǒng)維護員,不同的管理員實現(xiàn)不同的功能。前臺流程圖:圖4-8前臺流程圖后臺流程圖:圖4-9后臺流程圖4.4詳細設計4.4.1數(shù)據(jù)庫設計本系統(tǒng)數(shù)據(jù)庫開發(fā)主要基于Mysql6.0數(shù)據(jù)庫管理工具,包括8個數(shù)據(jù)庫表如下所示:數(shù)據(jù)字典表4-1e_shop數(shù)據(jù)表清單表名解釋ADMIN管理員表CART購物車表EVALUATE商品評價表MEMBER會員表MERCHANTABLE商品表ORDERS定單表RECORD記錄表TYPES類別表表4-2后臺管理員表(ADMIN)ADMIN(admin)是否主鍵字段名字段描述數(shù)據(jù)類型長度可空約束缺省值備注是ADMIN_ID管理員編號INT(2)2ADMIN_NAME管理員名VARCHAR(50)50ADMIN_PWD管理員密碼VARCHAR(30)20ADMIN_TYPE管理員種類INT(1)1表4-3購物車表(CART)CART(cart)是否主鍵字段名字段描述數(shù)據(jù)類型長度可空約束缺省值備注是CART_ID購物車編號INT(5)5CART_MEM_ID會員編號INT(5)5是CART_MER_ID商品編號INT(6)6是CART_NUM商品數(shù)量INT(3)3是表4-4商品評價表(EVALUATE)EVALUATE(evaluate)是否主鍵字段名字段描述數(shù)據(jù)類型長度可空約束缺省值備注是EVAL_ID評價編號INT(3)3EVAL_MEM_ID會員編號INT(5)5是EVAL_MER_ID商品編號INT(6)6是EVAL_DATE評價日期VARCHAR(20)20是EVAL_CONTENT評價內(nèi)容VARCHAR(200)200是表4-5會員表(MEMBER)MEMBER(member)是否主鍵字段名字段描述數(shù)據(jù)類型長度可空約束缺省值備注是MEM_ID會員編號INT(5)5MEM_NAME會員名稱VARCHAR(50)50MEM_PWD會員密碼VARCHAR(30)20MEM_TEL聯(lián)系電話VARCHAR(15)15是MEM_ADDRESS聯(lián)系地址VARCHAR(50)50是MEM_REGIST_DATE注冊日期VARCHAR(10)10是MEM_POST郵編VARCHAR(10)10是MEM_EMAILEMAILVARCHAR(20)20是MEM_CART_ID購物車編號INT(5)5是表4-6商品表(MERCHANTABLE)MERCHANTABLE(merchantable)是否主鍵字段名字段描述數(shù)據(jù)類型長度可空約束缺省值備注是MER_ID商品編號INT(6)6MER_NAME商品名稱VARCHAR(50)50MER_TYPE_ID商品種類INT(3)3是MER_PLACE出產(chǎn)地VARCHAR(50)50是MER_PRICE價格DECIMAL(8,2)8MER_DISCOUNT折扣DECIMAL(2,1)2是MER_PICTURE圖片VARCHAR(50)50是MER_DESC描述VARCHAR(50)50是MER_PRODUCTER廠家VARCHAR(60)60是MER_LEAVE_DATE出廠時間VARCHAR(10)10是MER_ADD_DATE添加時間VARCHAR(10)10是MER_NUM銷售數(shù)量INT0表4-7定單表(ORDERS)ORDERS(orders)是否主鍵字段名字段描述數(shù)據(jù)類型長度可空約束缺省值備注是ORDER_ID定單編號INT(6)6ORDER_DATE定單日期VARCHAR(20)20是ORDER_MEM_ID會員編號INT(5)5是ORDER_STATUS定單狀態(tài)INT(1)1是ORDER_SEND_TIME發(fā)送時間VARCHAR(60)60是ORDER_REMARK定單備注VARCHAR(100)100是ORDER_SUM價錢總和DECIMAL(8,2)8是表4-8記錄表(RECORD)RECORD(record)是否主鍵字段名字段描述數(shù)據(jù)類型長度可空約束缺省值備注是RECORD_ID記錄編號INT(6)6RECORD_MER_ID商品編號INT(6)6是RECORD_MER_NUM商品數(shù)量INT(3)3是RECORD_ORDER_ID定單編號INT(6)6是表4-9類別表(TYPES)TYPES(types)是否主鍵字段名字段描述數(shù)據(jù)類型長度可空約束缺省值備注是TYPE_ID類別編號INT(3)3TYPE_NAME類別名稱VARCHAR(30)30是TYPE_DESC類別描述VARCHAR(100)100是數(shù)據(jù)庫概念設計將抽象的需求轉(zhuǎn)為數(shù)據(jù)庫概念結(jié)構(gòu),即概念模式。圖4-10概念圖數(shù)據(jù)庫物理設計依據(jù)所用的數(shù)據(jù)庫由概念模型生成相應的物理模型,如下圖所示。圖4-11物理圖4.4.2系統(tǒng)開發(fā)規(guī)范及說明系統(tǒng)目錄及說明如下圖依據(jù)架構(gòu)思想,將開發(fā)類主要分為action、bean、dao、service邏輯包。action包含所有的控制層類,bean包含所有領域?qū)ο蠹跋鄳腛RM映射文件,dao包含所有的持久層抽象類,service包含所有業(yè)務層類。另一方面根據(jù)系統(tǒng)開發(fā)所需建立filter(過濾器)包、listener(監(jiān)聽器)包、tool(工具)包。具體如下圖所示:圖4-12系統(tǒng)目錄圖Struts配置文件圖4-13Struts配置文件圖4.4.3具體模塊設計模塊分析與設計:整個系統(tǒng)主要包括商品信息模塊、會員模塊、購物車模塊、訂單模塊、商品類別、后臺管理員模塊。商品信息模塊:本模塊主要用來顯示、查詢和商品評論的功能。主要涉及的類和方法如下類圖。其中PageServiceImpl為分頁實現(xiàn)類,在整個系統(tǒng)中屬于一個公共組件,故在各模塊中不再重復介紹。另一方面各模塊各層之間類的關(guān)系也大致相同,都可以參考以下類圖。圖4-14商品模塊類圖表4-10商品模塊主要應用類類名含義MerchantableAction作為其控制層內(nèi)容,調(diào)用相應的業(yè)務方法HeadService業(yè)務層抽象類,其實現(xiàn)類中包含相應的業(yè)務方法MerchantableDAO包含相應的持久層方法表4-11MerchantableAction類方法含義showByType()調(diào)用業(yè)務層方法按類別顯示商品showById()調(diào)用業(yè)務層方法顯示某種商品research()調(diào)用業(yè)務層方法查詢商品showAllMer()調(diào)用業(yè)務層方法顯示所有商品deleteMer()調(diào)用業(yè)務層方法刪除商品updateMer()調(diào)用業(yè)務層方法修改商品信息saveMer()調(diào)用業(yè)務層方法保存商品信息表4-12HeadService方法含義findById()調(diào)用持久層方法按商品編號查詢商品findByType()調(diào)用持久層方法按種類查詢商品researchMer()按條件查詢商品deleteMer()刪除商品updateMer()修改商品saveMer()保存商品表4-13MerchantableDAO類方法含義findAllByKeyword()按關(guān)鍵字查詢所有商品findByTypes()按各類查詢商品findById()按商品編號查詢商品delete()刪除商品findAll()查詢所有商品saveOrUpdate()保存或修改商品findByNum()依據(jù)數(shù)量查詢findPartByTyps()依據(jù)種類查詢部分商品會員模塊: 在本模快中用到了兩控制層類LoginAction和LoginJsonAction,前者用于普通的控制調(diào)用業(yè)務層方法,同時返回相應的業(yè)務邏輯視圖。后者則是用Struts和Json相結(jié)合應用的,首先是能過Ajax提交數(shù)據(jù)當相應的action,然后調(diào)用業(yè)務層方法處理完成返回并不是返回某個邏輯視圖,而是將返回的信息通過Json進行數(shù)據(jù)轉(zhuǎn)換,前臺通過Ajax接收數(shù)據(jù)。表4-14會員模塊主要應用類類名含義LoginAction普通形式的控制器,調(diào)用相應的業(yè)務層方法LoginJsonActionAjax提交時使用的控制器UserService業(yè)務層類,包含各種相應的業(yè)務處理方法MemberDAO包含相應的持久層方法表4-15LoginAction類方法含義modifyPwd()調(diào)用業(yè)務層方法修改會員密碼modifyAddress()調(diào)用業(yè)務層方法修改會員地址等信息regist()調(diào)用業(yè)務層方法注冊showMem()調(diào)用業(yè)務層方法后臺顯示所有會員delMem()調(diào)用業(yè)務層方法刪除會員表4-16LoginJsonAction類方法含義execute()調(diào)用業(yè)務層方法會員登錄校驗 表4-17UserService類方法含義modifyPwd()修改會員密碼modifyAddress()修改會員地址等信息save()保存會員delMem()刪除會員表4-18MemberDAO類方法含義findByNameAndPwd()按用戶名和密碼查詢用戶saveOrUpdate()保存或修改會員信息findAll()查詢所有會員delete()刪除會員購物車模塊: 同上面的會員模板,在此模塊中也有兩個控制類CartAction和CartJsonAction。表4-19購物車模塊主要應用類類名含義CartAction普通形式的控制器,調(diào)用相應的業(yè)務層方法CartJsonActionAjax提交時使用的控制器HeadService業(yè)務層類,包含各種相應的業(yè)務處理方法CartDAO包含相應的持久層方法 表4-20CartAction類方法含義execute()調(diào)用業(yè)務層方法查詢會員相應的購物車update()調(diào)用業(yè)務層方法修改購物車delete()調(diào)用業(yè)務層方法刪除購物車表4-21CartJsonAction類方法含義add()添加商品到購物車表4-22HeadService類方法含義findCartByMember()依據(jù)會員查詢相應的購物車updateCart()修改購物車deleteCart()刪除購物車中的商品addMerToCart()將商品加入購物車 表4-23CartDAO類方法含義findByMember()依據(jù)會員查詢相應的購物車updateCart()修改購物車delete()刪除購物車中的商品saveCart()將商品加入購物車訂單模塊表4-24訂單模塊主要應用類類名含義OrderAction控制器調(diào)用相應的業(yè)務層方法HeadService業(yè)務層類,包含各種相應的業(yè)務處理方法OrderDAO包含相應的持久層方法 表4-25OrderAction類方法含義execute()調(diào)用業(yè)務層方法顯示訂單addOrder()調(diào)用業(yè)務層方法添加historyOrder()調(diào)用業(yè)務層方查看歷史訂單modifyOrder()調(diào)用業(yè)務層方法進入修改訂單deleteOrder()調(diào)用業(yè)務層方法刪除訂單showOrders()調(diào)用業(yè)務層方法顯示所有訂單submit()調(diào)用業(yè)務層方法確認定單、發(fā)貨表4-26HeadService類方法含義addOrder()添加訂單findHistoryOrder()查尋歷史訂單deleteOrde刪除訂單updateOrders()修改訂單 表4-27OrderDAO類方法含義findById()據(jù)編號查詢訂單findHistoryOrder()查尋歷史訂單delete()刪除訂單saveOrUpdate()保存或修改訂單商品類別模塊:表4-28商品類別模板應用類類名含義TypesAction控制器調(diào)用相應的業(yè)務層方法HeadService業(yè)務層類,包含各種相應的業(yè)務處理方法TypesDAO包含相應的持久層方法表4-29TypesAction類方法含義getAllType()調(diào)用業(yè)務層方法獲取類別deleteType()調(diào)用業(yè)務層方法刪除addType()調(diào)用業(yè)務層方法添加種類updateType()調(diào)用業(yè)務層方法修改種類recommend()調(diào)用業(yè)務層方法推薦某類商品到首頁cancelRecommend()調(diào)用業(yè)務層方法取消推薦表4-30HeadService類方法含義findByReCommend查詢推薦的商品findAllTypes()查詢所有類別deleteType()刪除類別saveType()保存類別updateType()修改類別 表4-31TypesDAO類方法含義findByRecommend()查詢被推薦的類別findById()據(jù)編號查詢所有類別findAll()查詢所有類別saveOrUpdate()保存或修改類別delete()刪除類別后臺管理員模塊:表4-32后臺管理員主要應用類類名含義AdminAction控制器調(diào)用相應的業(yè)務層方法UserService業(yè)務層類,包含各種相應的業(yè)務處理方法AdminDAO包含相應的持久層方法表4-33AdminAction類方法含義valAdmin()調(diào)用業(yè)務層方法校驗用戶save()調(diào)用業(yè)務層保存管理員update()調(diào)用業(yè)務層方法修改管理員權(quán)限delete()調(diào)用業(yè)務層方法刪除管理員modifyPwd()調(diào)用業(yè)務層修改管理員密碼exit()注銷 表4-34UserService類方法含義validateAdmin()校驗用戶saveAdmin()保存管理員updateAdmin()修改管理員delAdmin()刪除管理員表4-35AdminDAO類方法含義findAdminByNameAndPwd據(jù)用戶名與密碼查詢用戶saveOrUpdate()保存或保存管理員Delete()刪除管理員findById()依據(jù)編號查詢管理員時序圖舉例時序圖通過描述對象之間發(fā)送消息的時間順序顯示多個對象之間的動態(tài)協(xié)作。它可以表示用例的行為順序,當執(zhí)行一個用例行為時,時序圖中的每條消息對應了一個類操作或狀態(tài)機中引起轉(zhuǎn)換的觸發(fā)事件。以下列出了本商城中的登錄時序圖與購物時序圖,其它功能時序圖與其兩者基本相似,只是處理的對象不同,故此不在贅述。圖4-15登錄時序圖圖4-16購物時序圖程序清單5.1數(shù)據(jù)庫腳本 具體實現(xiàn)腳本:#管理員表CREATETABLEadmin( admin_idINT(2)AUTO_INCREMENT, admin_nameVARCHAR(50)NOTNULL, admin_pwdVARCHAR(30)NOTNULL, admin_typeINT(1)NOTNULL, CONSTRAINTPK_ADMIN_IDPRIMARYKEY(admin_id));#會員表CREATETABLEmember( mem_idINT(5)AUTO_INCREMENT, mem_nameVARCHAR(50)NOTNULL, mem_pwdVARCHAR(30)NOTNULL, mem_telVARCHAR(15), mem_addressVARCHAR(50), mem_regist_dateVARCHAR(10), mem_postVARCHAR(10), mem_emailVARCHAR(20), mem_cart_idINT(5), CONSTRAINTPK_MEMBER_IDPRIMARYKEY(mem_id));#商品種類CREATETABLEtypes( type_idINT(3)AUTO_INCREMENT, type_nameVARCHAR(30), type_descVARCHAR(100), type_recommendintdefault0, CONSTRAINTPK_TYPES_IDPRIMARYKEY(type_id));#商品信息表CREATETABLEmerchantable( mer_idINT(6)AUTO_INCREMENT, mer_nameVARCHAR(50)NOTNULL, mer_type_idINT(3), mer_placeVARCHAR(50), mer_priceDECIMAL(8,2)NOTNULL, mer_discountDECIMAL(2,1), mer_pictureVARCHAR(50), mer_descVARCHAR(50), mer_producterVARCHAR(60), mer_leave_dateVARCHAR(10), mer_add_dateVARCHAR(10), mer_numintdefault0, CONSTRAINTPK_MERCHANTABLE_IDPRIMARYKEY(mer_id), CONSTRAINTFK_MERCHANTABLE_TYPE_IDFOREIGNKEY(mer_type_id)REFERENCEStypes(type_id));#商品評價表CREATETABLEevaluate( eval_idINT(3)AUTO_INCREMENT, eval_mem_idINT(5), eval_mer_idINT(6), eval_dateVARCHAR(20), eval_contentVARCHAR(200), CONSTRAINTPK_EVALUATE_IDPRIMARYKEY(eval_id), CONSTRAINTFK_EVALUATE_MEN_IDFOREIGNKEY(eval_mem_id)REFERENCESmember(mem_id), CONSTRAINTFK_EVALUATE_MER_IDFOREIGNKEY(eval_mer_id)REFERENCESmerchantable(mer_id));#購物車購物車號即為會員編號CREATETABLEcart( cart_idINT(5)AUTO_INCREMENT, cart_mem_idINT(5), cart_mer_idINT(6)unique, cart_numINT(3), CONSTRAINTPK_CART_IDPRIMARYKEY(cart_id), CONSTRAINTFK_CART_IDFOREIGNKEY(cart_mem_id)REFERENCESmember(mem_id), CONSTRAINTFK_CART_MER_IDFOREIGNKEY(cart_mer_id)REFERENCESmerchantable(mer_id));#訂單表CREATETABLEorders( order_idINT(6)AUTO_INCREMENT, order_dateVARCHAR(20), order_mem_idINT(5), order_statusINT(1), order_send_timevarchar(60), order_remarkvarchar(100), order_sumDECIMAL(8,2), CONSTRAINTPK_ORDER_IDPRIMARYKEY(order_id), CONSTRAINTFK_ORDER_MEM_IDFOREIGNKEY(order_mem_id)REFERENCESmember(mem_id));#購物記錄CREATETABLErecord( record_idint(6)AUTO_INCREMENT, record_mer_idint(6), record_mer_numint(3), record_order_idint(6), CONSTRAINTPK_RECORD_IDPRIMARYKEY(record_id), CONSTRAINTFK_RECORD_MER_IDFOREIGNKEY(record_mer_id)REFERENCESmerchantable(mer_id), CONSTRAINTFK_RECORD_ORDER_IDFOREIGNKEY(record_order_id)REFERENCESorders(order_id));5.2項目實現(xiàn)部分代碼applicationContext.xml配置文件<?xmlversion="1.0"encoding="GBK"?><beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xmlns:aop="/schema/aop" xmlns:tx="/schema/tx" xmlns:p="/schema/p" xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd /schema/tx/schema/tx/spring-tx-2.5.xsd /schema/aop/schema/aop/spring-aop-2.5.xsd"> <beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!--指定連接數(shù)據(jù)庫的驅(qū)動--> <propertyname="driverClass"value="com.mysql.jdbc.Driver"/> <!--指定連接數(shù)據(jù)庫的URL--> <propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/db_eshop3?useUnicode=true&characterEncoding=utf8"/> <!--指定連接數(shù)據(jù)庫的用戶名--> <propertyname="user"value="root"/> <!--指定連接數(shù)據(jù)庫的密碼--> <propertyname="password"value="root"/> <!--指定連接數(shù)據(jù)庫連接池的最大連接數(shù)--> <propertyname="maxPoolSize"value="40"/> <!--指定連接數(shù)據(jù)庫連接池的最小連接數(shù)--> <propertyname="minPoolSize"value="1"/> <!--指定連接數(shù)據(jù)庫連接池的初始化連接數(shù)--> <propertyname="initialPoolSize"value="1"/> <!--指定連接數(shù)據(jù)庫連接池的連接的最大空閑時間--> <propertyname="maxIdleTime"value="20"/> <propertyname="idleConnectionTestPeriod"value="18000"/> </bean> <beanid="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyname="dataSource"> <refbean="dataSource"/> </property> <propertyname="hibernateProperties"> <props> <propkey="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</prop> <!--是否根據(jù)需要每次自動創(chuàng)建數(shù)據(jù)庫--> <propkey="hibernate.hbm2ddl.auto">update</prop> <!--顯示Hibernate持久化操作所生成的SQL--> <propkey="hibernate.show_sql">true</prop> <!--將SQL腳本進行格式化后再輸出--> <propkey="hibernate.format_sql">true</prop> </props> </property> <propertyname="mappingResources"> <list> <value>com/eshop/bean/Admin.hbm.xml</value> <value>com/eshop/bean/Cart.hbm.xml</value> <value>com/eshop/bean/Evaluate.hbm.xml</value> <value>com/eshop/bean/Member.hbm.xml</value> <value>com/eshop/bean/Merchantable.hbm.xml</value> <value>com/eshop/bean/Orders.hbm.xml</value> <value>com/eshop/bean/Record.hbm.xml</value> <value>com/eshop/bean/Types.hbm.xml</value> </list> </property> </bean> <!--****************事務管理配置***************--> <beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <propertyname="sessionFactory"ref="sessionFactory"/> </bean> <!--****************配置切面Bean,指定事務管理器--> <tx:adviceid="txAdvice"transaction-manager="transactionManager"> <tx:attributes> <tx:methodname="*"/> </tx:attributes> </tx:advice> <!--配置一個切入點匹配指定包下所有類--> <aop:config> <aop:pointcutid="pointcut"expression="execution(*com.eshop.service.impl.*Impl.*(..))"/> <aop:advisoradvice-ref="txAdvice"pointcut-ref="pointcut"/> </aop:config> <!--引進daoContext.xml配置文件--> <importresource="daoContext.xml"/> <!--*****************Service************************--> <beanid="headService"class="com.eshop.service.impl.HeadServiceImpl"> <propertyname="typesDAO"ref="typesDAO"/> <propertyname="merchantableDAO"ref="merchantableDAO"/> <propertyname="cartDAO"ref="cartDAO"/> <propertyname="evaluateDAO"ref="evaluateDAO"/> <propertyname="ordersDAO"ref="ordersDAO"/> <propertyname="recordDAO"ref="recordDAO"/> </bean> <beanid="userService"class="com.eshop.service.impl.UserServiceImpl"> <propertyname="memberDAO"ref="memberDAO"/> <propertyname="cartDAO"ref="cartDAO"/> <propertyname="adminDAO"ref="adminDAO"/> </bean> <beanid="pageService"class="com.eshop.service.impl.PageServiceImpl"> <propertyname="pageDAO"ref="pageDAO"/> </bean> <!--*****************Action***********************--> <beanid="typesAction"class="com.eshop.action.TypesAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="merchantableAction"class="com.eshop.action.MerchantableAction"scope="prototype"> <propertyname="headService"ref="headService"/> <propertyname="pageService"ref="pageService"/> </bean> <!--scope注意默認為單例模式sington--> <beanid="loginAction"class="com.eshop.action.LoginAction"scope="prototype"> <propertyname="userService"ref="userService"/> <propertyname="pageService"ref="pageService"/> </bean> <beanid="loginJsonAction"class="com.eshop.action.LoginJsonAction"scope="prototype"> <propertyname="userService"ref="userService"/> </bean> <beanid="cartAction"class="com.eshop.action.CartAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="cartJsonAction"class="com.eshop.action.CartJsonAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="evaluateJsonAction"class="com.eshop.action.EvaluateJsonAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="evalAction"class="com.eshop.action.EvaluateAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="orderAction"class="com.eshop.action.OrderAction"scope="prototype"> <propertyname="headService"ref="headService"/> <propertyname="pageService"ref="pageService"/> </bean> <beanid="adminAction"class="com.eshop.action.AdminAction"scope="prototype"> <propertyname="userService"ref="userService"/> </bean></beans>daoContext.xml配置文件<?xmlversion="1.0"encoding="UTF-8"?> <!--指定Spring配置文件的DTD信息--><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN2.0//EN" "/dtd/spring-beans-2.0.dtd"><beans> <beanid="template"abstract="true"lazy-init="true"> <propertyname="sessionFactory"ref="sessionFactory"/> </bean> <beanid="adminDAO"class="com.eshop.dao.impl.AdminDAOImpl"parent="template"/> <beanid="cartDAO"class="com.eshop.dao.impl.CartDAOImpl"parent="template"/> <beanid="evaluateDAO"class="com.eshop.dao.impl.EvaluateDAOImpl"parent="template"/> <beanid="memberDAO"class="com.eshop.dao.impl.MemberDAOImpl"parent="template"/> <beanid="merchantableDAO"class="com.eshop.dao.impl.MerchantableDAOImpl"parent="template"/> <beanid="ordersDAO"class="com.eshop.dao.impl.OrdersDAOImpl"parent="template"/> <beanid="recordDAO"class="com.eshop.dao.impl.RecordDAOImpl"parent="template"/> <beanid="typesDAO"class="com.eshop.dao.impl.TypesDAOImpl"parent="template"/> <beanid="pageDAO"class="com.eshop.dao.impl.PageImplDao"parent="template"/></beans>struts.xml配置文件<?xmlversion="1.0"encoding="GBK"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd"><struts> <constantname="struts.i18.encoding"value="UTF-8"/> <constantname="struts.custom.i18n.resources"value="messageResource"/> <packagename="head"extends="struts-default"namespace="/head"> <actionname="index"class="typesAction"> <resultname="success">index.jsp</result> <resultname="exit"type="redirect">index.action</result> </action> <actionname="login"class="loginAction"> <resultname="error">index.jsp</result> <resultname="modify">member/modifyPwd.jsp</result> <resultname="modifyaddress">member/modifyAddress.jsp</result> <resultname="regist">registSucc.jsp</result> <resultname="input">member/modifyPwd.jsp</result> </action> <actionname="merchantable"class="merchantableAction"> <resultname="success">showByType.jsp</result> <resultname="showone">showById.jsp</result> <resultname="research">result.jsp</result> </action> <actionname="eval"class="evalAction"> <resultname="success">showById.jsp</result> </action> <actionname="*"> <result>{1}.jsp</result> </action> </package> <packagename="headmember"extends="struts-default"namespace="/head/member"> <actionname="mycart"class="cartAction"> <resultname="error">/head/login.jsp</result> <resultname="success">mycart.jsp</result> </action> <actionname="order"class="orderAction"> <resultname="success">account.jsp</result> <resultname="finished">finish.jsp</result> <resultname="history">historyOrder.jsp</result> <resultname="modify">modifyOrder.jsp</result> <resultname="delete">modifyOrder.jsp</result> </action> <actionname="*"> <result>{1}.jsp</result> </action> </package> <packagename="json"extends="json-default"namespace="/head"> <actionname="cartJson"class="cartJsonAction"> <resulttype="json"/> </action> <actionname="evalJson"class="evaluateJsonAction"> <resulttype="json"/> </action> <actionname="addEvalJson"class="evaluateJsonAction"method="add"> <resulttype="json"/> </action> <actionname="loginJson"class="loginJsonAction"> <resulttype="json"/> </action> </package> <packagename="back"extends="struts-default"namespace="/back"> <actionname="login"class="adminAction"> <resultname="success">jsp/index.jsp</result> <resultname="error">login.jsp</result> <resultname="input">login.jsp</result> </action> <actionname="*"> <result>{1}.jsp</result> </action> </package> <packagename="back2"extends="struts-default"namespace="/back/jsp"> <actionname="mer"class="merchantableAction"> <interceptor-refname="fileUpload"> <paramname="allowedTypes"> image/bmp,image/png,image/gif,image/jpeg </param> <paramname="maximumSize">30000</param> </interceptor-ref> <interceptor-refname="defaultStack"/> <paramname="savePath">/image</param> <resultname="success">merInfo.jsp</result> <resultname="save">saveMerInfo.jsp</result> <resultname="delete"type="redirect">mer!showAllMer?page=1</result> <resultname="go">modifyMer.jsp</result> <resultname="update">modifyResult.jsp</result> <resultname="input">uploadError.jsp</result> </action> <actionname="*Type"class="typesAction"> <resultname="go">{1}.jsp</result> <resultname="delete">typeInfo.jsp</result> <resultname="add">typeInfo.jsp</result> <resultname="update">typeInfo.jsp</result> </action> <actionname="orders"class="orderAction"> <resultname="success">orderInfo.jsp</result> <resultname="submit">orderInfo.jsp</result> </action> <actionname="mem"class="loginAction"> <resultname="success">memInfo.jsp</result> <resultname="del">memInfo.jsp</result> </action> <actionname="admin"class="adminAction"> <resultname="success">adminInfo.jsp</result> <resultname="save">adminInfo.jsp</result> <resultname="update">modifyAdminResult.jsp</result> <resultname="modifyPwd">modifyPwd.jsp</result> <resultname="exit"type="redirect">/back/login.jsp</result> <resultname="input">/back/login.jsp</result> </action> <actionname="*"> <result>{1}.jsp</result> </action> </package></struts>業(yè)務層HeadServiceImpl類packagecom.eshop.service.impl;importjava.util.ArrayList;importjava.util.List;importjava.util.Random;importcom.eshop.bean.Cart;importcom.eshop.bean.Evaluate;importcom.eshop.bean.Member;importcom.eshop.bean.Merchantable;importcom.eshop.bean.Orders;importcom.eshop.bean.Record;importcom.eshop.bean.Types;importcom.eshop.dao.CartDAO;importcom.eshop.dao.EvaluateDAO;importcom.eshop.dao.MerchantableDAO;importcom.eshop.dao.OrdersDAO;importcom.eshop.dao.RecordDAO;importcom.eshop.dao.TypesDAO;importcom.eshop.service.HeadService;importcom.eshop.tool.DateTime;publicclassHeadServiceImplimplementsHeadService{ privateTypesDAOtypesDAO; privateMerchantableDAOmerchantableDAO; privateCartDAOcartDAO; privateEvaluateDAOevaluateDAO; privateOrdersDAOordersDAO; privateRecordDAOrecordDAO; publicRecordDAOgetRecordDAO(){ returnrecordDAO; } publicvoidsetRecordDAO(RecordDAOrecordDAO){ this.recordDAO=recordDAO; } publicOrdersDAOgetOrdersDAO(){ returnordersDAO; } publicvoidsetOrdersDAO(OrdersDAOordersDAO){ this.ordersDAO=ordersDAO; } publicEvaluateDAOgetEvaluateDAO(){ returnevaluateDAO; } publicvoidsetEvaluateDAO(EvaluateDAOevaluateDAO){ this.evaluateDAO=evaluateDAO; } publicTypesDAOgetTypesDAO(){ returntypesDAO; } publicvoidsetTypesDAO(TypesDAOtypesDAO){ this.typesDAO=typesDAO; } publicMerchantableDAOgetMerchantableDAO(){ returnmerchantableDAO; } publicvoidsetMerchantableDAO(MerchantableDAOmerchantableDAO){ this.merchantableDAO=merchantableDAO; } publicCartDAOgetCartDAO(){ returncartDAO; } publicvoidsetCartDAO(CartDAOcartDAO){ this.cartDAO=cartDAO; } publicList<Types>findAllTypes(){ returntypesDAO.findAll(); } publicList<Merchantable>findAllMerchantable(){ returnthis.merchantableDAO.findAll(); } publicMerchantablefindById(Stringid){ returnmerchantableDAO.findById(Integer.parseInt(id)); } publicList<Merchantable>findByType(Stringtype){ Typest=

溫馨提示

  • 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

提交評論