電子商務(wù)平臺(tái)畢業(yè)設(shè)計(jì)_第1頁(yè)
電子商務(wù)平臺(tái)畢業(yè)設(shè)計(jì)_第2頁(yè)
電子商務(wù)平臺(tái)畢業(yè)設(shè)計(jì)_第3頁(yè)
電子商務(wù)平臺(tái)畢業(yè)設(shè)計(jì)_第4頁(yè)
電子商務(wù)平臺(tái)畢業(yè)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

沈陽(yáng)理工大學(xué)學(xué)士學(xué)位論文摘要本畢業(yè)設(shè)計(jì)采用SSH(Struts+Spring+Hibernate)整合框架以及mvc模式來(lái)實(shí)現(xiàn)網(wǎng)店管理,消費(fèi)者注冊(cè)、購(gòu)買等服務(wù)的平臺(tái)系統(tǒng)。在表示層中,首先通過(guò)JSP頁(yè)面實(shí)現(xiàn)交互界面,負(fù)責(zé)傳送請(qǐng)求和接收響應(yīng),然后Struts根據(jù)配置文件將接收到的Request委派給相應(yīng)的Action處理。在業(yè)務(wù)層中,管理服務(wù)組件的SpringIoC容器負(fù)責(zé)向Action提供業(yè)務(wù)模型組件和該組件的協(xié)作對(duì)象數(shù)據(jù)處理組件完成業(yè)務(wù)邏輯。最后,經(jīng)過(guò)對(duì)市場(chǎng)系統(tǒng)進(jìn)行詳細(xì)的需求分析、體系架構(gòu)設(shè)計(jì)后,實(shí)現(xiàn)了這個(gè)網(wǎng)上購(gòu)物系統(tǒng),前臺(tái)功能包括注冊(cè)和登錄、商品瀏覽、個(gè)人信息管理等;后臺(tái)功能包括商品管理、訂單管理等。通過(guò)實(shí)踐,很好的整合了這三個(gè)框架,將其應(yīng)用到實(shí)際的項(xiàng)目中,方便以后更好的工作,體現(xiàn)了較高的應(yīng)用價(jià)值。關(guān)鍵詞:電子商務(wù)平臺(tái);Spring;Struts;Hibernate;Java AbstractThisgraduationassignmentusedSSH(Struts+Spring+Hibernate)framework.Whatismore,itachievemanagementofonlinestore,customers’registerandpurchasingservicebasedonMVCsystemandSSHf(wàn)ramework.Inthepresentationlevel,thefirststepisusedJSPwebsitetocompleteinteractiveinterface,whichchargeforrequestandresponse.ThentheStrutsaccordingtoalreadyfiletransformtherequestfromtheActionServlettopointedAction.Intheprocessinglevel,ManagementservicemoduleSpringIOCwilloffertheprojectmoduleModelandDAOmoduletoActiontocompleteprocessingandofferingthemodulesincludedbusinessdealing,bufferpoolwhichaimstoimprovethesystemefficiencyandensurecomplementofthedata.Finally,weachievedthisonline-shoppingsystemwhichissupportedbythevarietiesoftechnologiesreferredabove,afteranalyzingtherequirementofmarketsystemanddesigntheframework.Thissystemdivideintoprosceniumandbackgroundoperation.Intheproscenium,itserviceforregister,login,scanninggoods,personalinformationmanagement.Backgroundoperationisusedforgoodsmanagement,goodsclassifymanagementandordersmanagement.Wesuccessfullyputthreeframeworkintopracticeandapplythemintoreality,WehavearichexperienceofhandlingtheBAEdatabasewhichisbehelpfultoourfuturejob.Ingeneral,ithasagreatapplicationvalue.Keywords:E-commerce;Spring;Struts;Hibernate;Java目錄1研究背景與研究意義 21.1研究背景 21.2研究意義 41.3主要工作 42需求分析 52.1平臺(tái)設(shè)計(jì)目的 52.2平臺(tái)設(shè)計(jì)需求 52.2.1用戶體驗(yàn)需求 52.2.2平臺(tái)功能需求 52.3運(yùn)行環(huán)境 72.3.1硬件環(huán)境 72.3.2軟件環(huán)境 73平臺(tái)整體規(guī)劃 83.1模式分析 83.1.1模型 83.1.2視圖 83.1.3控制器 83.2SSH分析與整合 93.2.1Struts2框架 93.2.2Hibernate框架 113.2.3Spring框架 133.2.4Spring整合Hibernate 163.2.5Spring整合Struts2 183.2.6Struts2、Hibernate和Spring的整合開發(fā) 193.3后臺(tái)邏輯功能設(shè)計(jì) 203.3.1項(xiàng)目目錄結(jié)構(gòu) 203.3.2生成數(shù)據(jù)庫(kù)表的映射對(duì)象類 203.3.3創(chuàng)建對(duì)應(yīng)映射文件 213.3.4DAO層實(shí)現(xiàn) 213.3.5SERVICE層實(shí)現(xiàn) 223.3.6分頁(yè)Bean的代碼實(shí)現(xiàn) 223.3.7jdbc數(shù)據(jù)庫(kù)屬性文件配置 233.3.8用戶驗(yàn)證ajax異步校驗(yàn)代碼 233.3.9console部分打印日志信息 243.4數(shù)據(jù)庫(kù)設(shè)計(jì) 244功能實(shí)現(xiàn) 294.1前臺(tái)功能實(shí)現(xiàn) 294.1.1人機(jī)交互效果圖 294.1.2實(shí)現(xiàn)代碼 354.2購(gòu)物車、訂單功能實(shí)現(xiàn) 394.2.1購(gòu)物車、訂單功能實(shí)現(xiàn)效果圖 394.2.2實(shí)現(xiàn)代碼 40結(jié)束語(yǔ) 42參考文獻(xiàn) 44附錄 46引言隨著網(wǎng)速的不斷提升,前臺(tái)界面的不斷完善、美化,后端設(shè)計(jì)的漸漸優(yōu)化,網(wǎng)上購(gòu)物必然會(huì)給喜歡網(wǎng)上購(gòu)物的群體帶來(lái)更好的體驗(yàn),電子商務(wù)也必然是日后銷售的主要方式。同時(shí)網(wǎng)上購(gòu)物的方式也會(huì)給客人們提供更多地時(shí)間和精力做更重要的事情,給商家提供更方便的條件去專注的提高商品的質(zhì)量?;贘2EE的畢業(yè)設(shè)計(jì)管理系統(tǒng)旨在解決傳統(tǒng)的學(xué)生畢業(yè)設(shè)計(jì)管理過(guò)程中存在的論文選題開放性差、表格不規(guī)范、論文相關(guān)信息匯總難度高、人員攝入量大、工作進(jìn)度緩慢等問題,并結(jié)合畢業(yè)設(shè)計(jì)管理過(guò)程中的具體特點(diǎn)和個(gè)性化需求,運(yùn)用計(jì)算機(jī)專業(yè)技術(shù)開發(fā)了基于J2EE的畢業(yè)設(shè)計(jì)管理系統(tǒng),該系統(tǒng)具備高效性、便捷性等特點(diǎn)。實(shí)踐證明,開發(fā)的系統(tǒng)軟件能滿足復(fù)雜的網(wǎng)上畢業(yè)設(shè)計(jì)管理要求,學(xué)生和老師不用下載客戶端即可進(jìn)行畢業(yè)設(shè)計(jì)相關(guān)的操作。基于java的電子商務(wù)網(wǎng)站設(shè)計(jì)及開發(fā)可以使學(xué)生盡早的體驗(yàn)進(jìn)入公司后的模式,怎么設(shè)計(jì)網(wǎng)站,怎么優(yōu)化性能,怎么搭建開發(fā)平臺(tái)、運(yùn)行環(huán)境等。通過(guò)實(shí)踐,了解更多相關(guān)行業(yè)的技術(shù)手段、代碼規(guī)范,了解更多地框架特點(diǎn),了解數(shù)據(jù)庫(kù)的使用和設(shè)計(jì)等。更好的進(jìn)入企業(yè),實(shí)現(xiàn)自己的價(jià)值做準(zhǔn)備。1研究背景與研究意義1.1研究背景隨著信息化世界的到來(lái),傳統(tǒng)商務(wù)模式受到巨大的沖擊。越來(lái)越多的企業(yè)和個(gè)人,在Internet開放的網(wǎng)絡(luò)環(huán)境下,以一種基于瀏覽器服務(wù)器應(yīng)用的新模式,實(shí)現(xiàn)消費(fèi)者網(wǎng)上購(gòu)物,商戶之間出現(xiàn)網(wǎng)上交易和在線電子支付的新的商業(yè)運(yùn)營(yíng)模式:電子商務(wù)。目前做得比較成功的電子商務(wù)平臺(tái)有:當(dāng)當(dāng)網(wǎng),阿里巴巴,淘寶,國(guó)美在線,亞馬遜,eBuy等。電子商務(wù)在中國(guó)也有一定的發(fā)展,目前在國(guó)內(nèi)也有很多很好的電子商務(wù)平臺(tái),通過(guò)分析國(guó)內(nèi)的電子商務(wù)平臺(tái)可知,目前國(guó)內(nèi)的電子商務(wù)做的都是集合型,一個(gè)平臺(tái)會(huì)出售各個(gè)方面的商品。一些較好的網(wǎng)購(gòu)平臺(tái),如:京東商城,淘寶網(wǎng),拍拍網(wǎng),紅孩網(wǎng)等電子商務(wù)網(wǎng)站,涉及商品門類都很多,他們的共同特點(diǎn)就是只有產(chǎn)品的展示與訂購(gòu),沒有產(chǎn)品廠商的。目前中國(guó)能用上電子商務(wù)平臺(tái)的都是一些大中型的企業(yè),而大部分的中小型,特別是小型企業(yè)還是用著以前的生意模式,靠朋友,靠關(guān)系,靠老客戶來(lái)維持企業(yè),這種模式在過(guò)去的時(shí)代會(huì)有一定的優(yōu)勢(shì),但在信息網(wǎng)絡(luò)時(shí)代這種模式缺乏主動(dòng)性,往往會(huì)使企業(yè)處在被動(dòng)的狀態(tài)[1]。像阿里巴巴這樣的大型電子商務(wù)平臺(tái)是能很好地幫助企業(yè)做宣傳,聯(lián)系客戶,但是阿里巴巴基本上是面對(duì)大中型的企業(yè),每年的管理費(fèi)用都非常高,對(duì)于一些中小企業(yè)要承受一筆高的資金是很困難的。為了能夠上中小型企業(yè)特別是小型企業(yè)能夠用上電子商務(wù)平臺(tái),我們特地開發(fā)此系統(tǒng),使中小型企業(yè)也能做到生產(chǎn),宣傳,銷售一條龍[2]。關(guān)于電子商務(wù)平臺(tái)的設(shè)計(jì),現(xiàn)有Java,php,.net三種主流的語(yǔ)言。由于都是用于web開發(fā),他們相互競(jìng)爭(zhēng)的同時(shí)也相互吸取優(yōu)點(diǎn),經(jīng)過(guò)融合使自身變得越來(lái)越強(qiáng)大。比如當(dāng)你用C#,php,java開發(fā)的時(shí)候,你會(huì)發(fā)現(xiàn)在他們之間轉(zhuǎn)換,根本就沒有語(yǔ)言障礙,甚至連好多類或方法都是同名或相似。從應(yīng)用層面上來(lái)講,php是專門用于web開發(fā)的一門技術(shù)/語(yǔ)言,用于制作個(gè)人網(wǎng)頁(yè)。他是一門輕量級(jí)的語(yǔ)言,專一于web開發(fā),汲百家之長(zhǎng),由于完全開源,因此具有良好的群眾基礎(chǔ)和發(fā)展?jié)摿Γ籮ava的的確確就是一門語(yǔ)言,可以用于各方面的開發(fā),和c++是平輩web開發(fā)只是他的應(yīng)用的一部分;是一項(xiàng)技術(shù),他是脫離語(yǔ)言的,可以用語(yǔ)言C#和VB設(shè)計(jì),是由微軟推出,集各家所長(zhǎng),asp技術(shù)和.net組合而來(lái)。由于.netfromwork技術(shù)的引入,的開發(fā)變得特別簡(jiǎn)單,但是由于過(guò)多的拖拉控件使程序員只懂表面控件二不了解內(nèi)部原理,所以很大程度的限制了程序員的發(fā)展。首先,java是一門采用解釋執(zhí)行的運(yùn)行方式運(yùn)行的語(yǔ)言,在web領(lǐng)域有很高的利用率;其次,ASP.NET是一門技術(shù),在windows里運(yùn)行,會(huì)產(chǎn)生費(fèi)用,而php和java是免費(fèi)的,比較拘泥。而php就是一門專門用于web開發(fā)的語(yǔ)言/技術(shù)。在有語(yǔ)言基礎(chǔ)的條件下學(xué)web,php比較直接,javaweb應(yīng)用適用范圍更廣。開發(fā)時(shí),Java開發(fā)效率成本高,主要的好處是配合oracle效率非常不錯(cuò),但現(xiàn)在由于MySQL的開源以及免費(fèi),絕大部分的公司會(huì)選擇MySQL,適合大型web和超大型web。php開發(fā)成本一般可以更快的生成動(dòng)態(tài)頁(yè)面,配合mysql效率也不錯(cuò),適合中型和偏大一點(diǎn)的開發(fā)非常之快,可以配合sqlserver使用,適合中小型web[3]。關(guān)于數(shù)據(jù)庫(kù)現(xiàn)在主流的有oracle,MySQL,SQLServer三種,本平臺(tái)采用MySQL數(shù)據(jù)庫(kù):Oracle的數(shù)據(jù)文件包括:控制文件、數(shù)據(jù)文件、重做日志文件、參數(shù)文件、歸檔文件、密碼文件。所有文件都是二進(jìn)制編碼后的文件;Oracle能在所有主流平臺(tái)上運(yùn)行(包括windows)。完全支持所有的工業(yè)標(biāo)準(zhǔn)。采用完全開放策略。并行服務(wù)器可提供高可用性和高伸縮性的簇的解決方案也可以把數(shù)據(jù)庫(kù)移到UNIX中。從安全性來(lái)說(shuō),獲得最高認(rèn)證級(jí)別的ISO標(biāo)準(zhǔn)認(rèn)證。多層次網(wǎng)絡(luò)計(jì)算,支持多種工業(yè)標(biāo)準(zhǔn),可以用ODBC,JDBC,OCI等網(wǎng)絡(luò)客戶連接,操作簡(jiǎn)便[4]。MySQL的最大一個(gè)特色,就是自由選擇存儲(chǔ)引擎。每個(gè)表都是一個(gè)文件,都可以選擇合適的存儲(chǔ)引擎。常見的引擎有InnoDB、MyISAM、NDBCluster等[5]。但由于這種開放插件式的存儲(chǔ)引擎,比如要求數(shù)據(jù)庫(kù)與引擎之間的松耦合關(guān)系。從而導(dǎo)致文件的一致性大大降低。在SQL執(zhí)行優(yōu)化方面,也就有著一些不可避免的瓶頸。在多表關(guān)聯(lián)、子查詢優(yōu)化、統(tǒng)計(jì)函數(shù)等方面是軟肋,而且只支持極簡(jiǎn)單的HINT,主要應(yīng)用場(chǎng)景就是互聯(lián)網(wǎng)開發(fā)。SQLServer的數(shù)據(jù)架構(gòu)基本是縱向劃分,分為:協(xié)議層,關(guān)系引擎,存儲(chǔ)引擎,SQLOS。SQL執(zhí)行過(guò)程就是逐層解析的過(guò)程,其中RelationalEngine中的優(yōu)化器,是基于成本的(CBO),其工作過(guò)程跟Oracle是非常相似的。在成本之上也是支持很豐富的HINT,包括:連接提示、查詢提示、表提示。其最大的優(yōu)勢(shì)就是在于集成了MS公司的各類產(chǎn)品及資源,提供了強(qiáng)大的可視化界面、高度集成的管理開發(fā)工具[6]。SQLServer的缺點(diǎn):只能在windows上運(yùn)行,沒有絲毫的開放性,操作系統(tǒng)的系統(tǒng)的穩(wěn)定對(duì)數(shù)據(jù)庫(kù)是十分重要的。Windows9X系列產(chǎn)品是偏重于桌面應(yīng)用,NTserver只適合中小型企業(yè)。而且windows平臺(tái)的可靠性,安全性和伸縮性是非常有限的;它不像unix那樣久經(jīng)考驗(yàn),尤其是在處理大數(shù)據(jù);并行實(shí)施和共存模型并不成熟。很難處理日益增多的用戶數(shù)和數(shù)據(jù)卷。伸縮性有限;沒有獲得任何安全證書;多用戶時(shí)性能不佳;C/S結(jié)構(gòu),只支持windows客戶,可以用ADO,DAO,OLEDB,ODBC連接[7]。1.2研究意義本系統(tǒng)采用SSH(Struts,Spring,Hibernate)框架來(lái)開發(fā)。SSH框架是目前J2EE領(lǐng)域里最熱門而且用得較為成熟的一套開源框架,它是基于MVC設(shè)計(jì)模式之上,在充分發(fā)揮MVC設(shè)計(jì)模式優(yōu)點(diǎn)的同時(shí),也創(chuàng)造出了自己的開發(fā)特點(diǎn),降低了應(yīng)用程序的耦合性,更進(jìn)一步提高了應(yīng)用程序的復(fù)用性、移植性、靈活性、擴(kuò)展性和應(yīng)用性能[8]。SSH是一套輕量級(jí)的開發(fā)框架,相對(duì)于EJB重量級(jí)開發(fā)框架,SSH在繼承了它的優(yōu)點(diǎn)的同時(shí),在開發(fā)和執(zhí)行效率上都有了相當(dāng)程度的提高,同時(shí)對(duì)于開發(fā)者而言,它比EJB更容易學(xué)習(xí)和撐握,開發(fā)速度也更快。目前Struts和Spring發(fā)展到2.0版本,Hibernate發(fā)展到3.0版本,SSH框架也正在不斷地進(jìn)行優(yōu)化和升級(jí),運(yùn)行也越來(lái)越穩(wěn)定。1.3主要工作根據(jù)需求分析將商家所列出的功能體現(xiàn)到代碼中,用前臺(tái)的jsp界面展現(xiàn)出來(lái)。首先,根據(jù)需求分析進(jìn)行技術(shù)選型:數(shù)據(jù)庫(kù):MySQL(開源,免費(fèi),體積小且速度快的MySQL數(shù)據(jù)庫(kù));語(yǔ)言:Java(面向?qū)ο?、分布式、解釋型、可靠、安全、平臺(tái)無(wú)關(guān)、可移植、高性能、多線程);開發(fā)環(huán)境:myeclipse2013(插件少,比較穩(wěn)定);框架:SpringStruts2Hibernate。其次,根據(jù)商家的需求設(shè)計(jì)demo,并且設(shè)計(jì)數(shù)據(jù)庫(kù)表結(jié)構(gòu)。最后,根據(jù)設(shè)計(jì)好的表結(jié)構(gòu)以及demo實(shí)現(xiàn)邏輯功能,將前端展示與后臺(tái)數(shù)據(jù)聯(lián)系到一起,完成一個(gè)真正的購(gòu)物平臺(tái)。2需求分析2.1平臺(tái)設(shè)計(jì)目的本平臺(tái)設(shè)計(jì)目的在于建立一個(gè)以SSH框架為基礎(chǔ),結(jié)構(gòu)靈活、可復(fù)用、可擴(kuò)展,高效開發(fā)且輕量的電子商務(wù)應(yīng)用平臺(tái)。平臺(tái)框架為本人設(shè)計(jì)的主要目標(biāo),能夠根據(jù)業(yè)務(wù)實(shí)際需求變化靈活操作平臺(tái)功能模塊。2.2平臺(tái)設(shè)計(jì)需求軟件需求是指用戶對(duì)目標(biāo)軟件系統(tǒng)在功能、行為、性能、設(shè)計(jì)約束等方面的期望。通過(guò)對(duì)應(yīng)用問題及其環(huán)境的理解與分析,為問題涉及的信息、功能及系統(tǒng)行為建立模型,將用戶需求精確化、完全化,最終形成需求規(guī)格說(shuō)明,這一系列的活動(dòng)即構(gòu)成軟件開發(fā)生命周期的需求分析階段[9]。2.2.1用戶體驗(yàn)需求作為一個(gè)購(gòu)物平臺(tái),最終的使用者是購(gòu)買商品的人,那么他們的體驗(yàn)就顯得尤為重要。一個(gè)好的人機(jī)交互體驗(yàn)可以給這個(gè)網(wǎng)站增加不少的亮點(diǎn):界面美觀大方,不能過(guò)于花哨,由于本網(wǎng)站用于銷售蛋糕,所以界面應(yīng)盡量給人一種溫馨甜美的感覺。操作簡(jiǎn)單,導(dǎo)航等提示信息言簡(jiǎn)易懂,盡量減少頁(yè)面跳轉(zhuǎn),避免找不到已選好的商品等令人煩躁的事情發(fā)生??梢愿鶕?jù)用戶的想法進(jìn)行查詢,分類,節(jié)省客人的時(shí)間,增加體驗(yàn)值。及時(shí)更新商家商品的上架、下架信息,避免出現(xiàn)沒有客人要預(yù)定的商品的情況。2.2.2平臺(tái)功能需求功能需求(functionalrequirement)就是編程人員必須實(shí)現(xiàn)的軟件功能,使得用戶能實(shí)現(xiàn)他們的想法,從而滿足了業(yè)務(wù)需求[10]。針對(duì)本系統(tǒng)來(lái)說(shuō),本系統(tǒng)需要完成的功能是基于SSH框架基礎(chǔ)之上來(lái)構(gòu)建購(gòu)物的整個(gè)流程,然后,利用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法以及用戶界面層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化三層模式完成該平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn),減輕后續(xù)開發(fā)過(guò)程中的代碼維護(hù)工作。首頁(yè):為企業(yè)提供一個(gè)網(wǎng)站首頁(yè),在上面顯示網(wǎng)站的重要信息包商家LOGO,用戶的登錄,用戶的注冊(cè),主要商品分類,商家生產(chǎn)環(huán)境等。用戶的注冊(cè):主要針對(duì)未注冊(cè)的用戶,完成注冊(cè)功能使用,在注冊(cè)過(guò)程中,需要進(jìn)行數(shù)據(jù)的前臺(tái)非空校驗(yàn),電話號(hào)碼等數(shù)據(jù)格式的檢驗(yàn),及使用AJAX完成用戶名是否存在的異步校驗(yàn)。在校驗(yàn)通過(guò)后即可完成注冊(cè),注冊(cè)成功后轉(zhuǎn)回登錄界面進(jìn)行登錄;失敗則提示失敗信息等。用戶的登錄:已經(jīng)注冊(cè)的用戶,輸入用戶名和密碼登錄。用戶的退出:針對(duì)已經(jīng)登錄的用戶,退出該用戶的權(quán)限空間。首頁(yè)商品展示:顯示全部商品,方便不知道自己想要那種商品的客人挑選自己喜歡的商品。分類商品展示:根據(jù)某個(gè)分類的信息去展示商品??梢苑奖阌脩舾鶕?jù)自己的喜好快速定位相應(yīng)商品,節(jié)省時(shí)間和不必要的麻煩。商品詳情展示:當(dāng)點(diǎn)擊某個(gè)具體商品的時(shí)候,可以顯示商品的具體內(nèi)容,包括:商品類型,尺寸,價(jià)格等信息。購(gòu)物車:此功能可以為用戶提供購(gòu)物功能,方便用戶根據(jù)自己需要,將喜歡的商品添加到購(gòu)物車,當(dāng)然也可以從購(gòu)物車中將多余的商品移除,甚至清空整個(gè)購(gòu)物車,方便重新選擇商品。訂單:登錄用戶可以對(duì)自己喜歡商品進(jìn)行購(gòu)買,產(chǎn)生訂單,在線支付等。以及可以查詢自己的訂單。商家的發(fā)貨:后臺(tái)管理商家的發(fā)貨信息,完善一整套的購(gòu)買流程。圖2.1購(gòu)物流程2.3運(yùn)行環(huán)境運(yùn)行環(huán)境分為硬件環(huán)境和軟件環(huán)境,一個(gè)好的硬件環(huán)境可以提高服務(wù)的性能,一個(gè)好的軟件環(huán)境可以使開發(fā)者更加高效的開發(fā),以及更好的維護(hù)。2.3.1硬件環(huán)境服務(wù)器端的最低配置是由建立站點(diǎn)所需的軟件來(lái)決定的,本網(wǎng)系統(tǒng)服務(wù)器端的最低配置如下:處理器:Inter(R)Core(TM)i5-3337UCPU@1.80GHZ1.80GHZ。內(nèi)存:4.00GB系統(tǒng):Windows764位操作系統(tǒng)硬盤空間:160G顯卡:SVGA顯示適配器2.3.2軟件環(huán)境操作系統(tǒng):Windows7網(wǎng)站服務(wù)器:Tomcat6.x+jdk7.x數(shù)據(jù)庫(kù)管理系統(tǒng):MySQL5.x3平臺(tái)整體規(guī)劃平臺(tái)整體分為前臺(tái)和后臺(tái),主要重點(diǎn)在與前臺(tái)數(shù)據(jù)的顯示以及購(gòu)物的整個(gè)流程。通過(guò)簡(jiǎn)潔大方,風(fēng)格統(tǒng)一的前臺(tái)展示給購(gòu)物者一個(gè)愉快的購(gòu)物氛圍,分為:商品展示,購(gòu)物車,訂單,企業(yè)文化,新手指南等模塊。后臺(tái)則用于實(shí)現(xiàn)商品的發(fā)貨管理。3.1模式分析模式描述了環(huán)境中不斷重復(fù)發(fā)生的問題,然后描述解決這些問題的核心解決方案,以后就可以重負(fù)使用這些解決方案,而不需要在重復(fù)去做,即明確了所關(guān)注問題的使用范圍,指引設(shè)計(jì)師何時(shí)、如何、為何采用干這個(gè)解決方案,提高了應(yīng)用系統(tǒng)的可維護(hù)性、可擴(kuò)展性、可移植性和組件的可復(fù)用性,提高開發(fā)人員的工作效率和代碼質(zhì)量[12]。MVC是一種將應(yīng)用程序的邏輯層和表現(xiàn)層進(jìn)行分離的方法。MVC式的出現(xiàn)實(shí)現(xiàn)了功能模塊和顯示模塊的分離。3.1.1模型模型是應(yīng)用程序的主體部分,分為業(yè)務(wù)模型和實(shí)體模型,用于持久化業(yè)務(wù)數(shù)據(jù)。一般來(lái)說(shuō),你的模型類將包含增刪改查數(shù)據(jù)庫(kù)信息的功能[13]。3.1.2視圖視圖是應(yīng)用程序中用戶界面相關(guān)的部分,是用戶看到并與之交互的界面。V層用來(lái)數(shù)據(jù)展示,本平臺(tái)中V層采用JSP技術(shù)。通過(guò)JSP技術(shù)可以很方好地把數(shù)據(jù)展示在web瀏覽器上。JSP把html語(yǔ)言和java語(yǔ)言進(jìn)行分離,既達(dá)到了解耦的目的,也可以使后續(xù)系統(tǒng)的維護(hù)變得更方便。把流程控制都放到Action層,把業(yè)務(wù)邏輯處理放在service層中,充分利用Struts2技術(shù),在html頁(yè)面中使用Struts2標(biāo)簽來(lái)展示數(shù)據(jù),減少在html頁(yè)面上寫java語(yǔ)句[14]。3.1.3控制器控制器是模型、視圖以及其它任何處理HTTP請(qǐng)求所必須的資源之間的中介。由于運(yùn)用MVC的應(yīng)用程序的三個(gè)部件是相互對(duì)立,改變其中一個(gè)不會(huì)影響其它兩個(gè),所以依據(jù)這種設(shè)計(jì)思想你能構(gòu)造良好的松耦合的構(gòu)件[15]。本系統(tǒng)是在MVC模式基礎(chǔ)上來(lái)進(jìn)行分層,由于本系統(tǒng)開發(fā)的工具是MyEclipse,在建立工程時(shí)開發(fā)工具就已經(jīng)初步把系統(tǒng)分成MVC三層結(jié)構(gòu)。模型層由Models層來(lái)充當(dāng),該層主要是用來(lái)存實(shí)體Bean類和Hibernate影射文件。通過(guò)該層開發(fā)者很方便地對(duì)整個(gè)工程下的Bean進(jìn)行管理,同時(shí)也非常方便地對(duì)Hibernate配置文件進(jìn)行影射,極大的提高了開發(fā)的效率,同時(shí)對(duì)以后系統(tǒng)的維護(hù)也非常方便。C層主要是用來(lái)做流程和邏輯控制,也是整個(gè)系統(tǒng)的核心層。所有進(jìn)出系統(tǒng)的訪問都要經(jīng)過(guò)這一層的控制。本系統(tǒng)對(duì)C層時(shí)行了一些改進(jìn),我們把控制層又細(xì)分為Action層,service層和Dao層。Action層只管流程控制,Service層只管邏輯控制,Dao層只管與數(shù)據(jù)打交道,各施其職,每個(gè)層次只管自己的事情,這樣能使整個(gè)系統(tǒng)的層次非常分明,不會(huì)出現(xiàn)功能的混淆[16]。讓開發(fā)者和維護(hù)者在編寫代碼的時(shí)候非常清晰。MVC模型的局限性,MVC將業(yè)務(wù)邏輯層和表現(xiàn)層分開,的確能很好地松耦合,但這種做法有時(shí)也會(huì)增加開發(fā)和運(yùn)行開銷。首先MVC采用多分層結(jié)構(gòu),這樣就給開發(fā)帶來(lái)了難度,增加了開發(fā)的時(shí)間,并且如果在層次設(shè)計(jì)的時(shí)候設(shè)計(jì)得不好,反而會(huì)降低程序運(yùn)行的效率。另外多層次結(jié)構(gòu)在運(yùn)行的時(shí)間沒有單層次結(jié)構(gòu)的程序運(yùn)行的速度快,采用MVC模式如果分層太多,是會(huì)降低程序運(yùn)行速度。所以我們做開發(fā)的要因物施用,根據(jù)需要使用合適的模式來(lái)開發(fā)[17]。MVC模式它提出來(lái)的初衷就是為大型軟件設(shè)計(jì)而提出的,它對(duì)那些需要經(jīng)常復(fù)用,擴(kuò)展的大型軟件是非常有好處,但對(duì)于那些復(fù)用性,擴(kuò)展性很少的小軟件,特別是對(duì)于開發(fā)時(shí)間要求比較緊的情況下,采用MVC模式,其實(shí)不是一種明智的選擇。3.2SSH分析與整合3.2.1Struts2框架Struts2以webwork的設(shè)計(jì)思想為核心,使用攔截器(filterdispatcher)做為其中心處理器將Action類和servletAPI進(jìn)行了分離。Struts2是一個(gè)具有很好實(shí)用價(jià)值的WebMVC框架,它減少了直接運(yùn)用MVC模式來(lái)開發(fā)Web應(yīng)用的周期。重要的是它是一個(gè)開源框架,方便開發(fā)者深入研究了解其機(jī)制,越來(lái)越廣泛的接受和應(yīng)用。而且它提供一個(gè)好的控制器和一套定制的標(biāo)簽庫(kù)Taglib,著力在控制器和視圖上的應(yīng)用,完美的體現(xiàn)了MVC設(shè)計(jì)思想。提供集中統(tǒng)一的權(quán)限控制、國(guó)際化提示和消息、輸入校驗(yàn)和日志記錄等技術(shù)支持。另外,它對(duì)其他技術(shù)和框架具有良好的融合性。如能與EJB、JDBC和Hibernate等數(shù)據(jù)庫(kù)訪問技術(shù)相結(jié)合,利用集成技術(shù)減少數(shù)據(jù)庫(kù)的工作量[18]。Struts2的體系結(jié)構(gòu)如圖所示:Results/resultTypeBrowserserResults/resultTypeBrowserserViewserControllerViewserControllerDispatcherFilterDispatcherFilterJSPJSPInterceptorsInterceptorsFreemarkerFreemarkersetXxx()Execute()setXxx()Execute()ValueStack/OGNLModelValueStack/OGNLModelgetXxx()….ActiongetXxx()….Action圖3.1Struts2體系結(jié)構(gòu)Struts2核心實(shí)現(xiàn):Struts2主要是用來(lái)控制整個(gè)平臺(tái)運(yùn)作流程。由三部分組成,核心控制器FilterDispatcher、業(yè)務(wù)控制器以及用戶實(shí)現(xiàn)的業(yè)務(wù)邏輯組件。FilterDispatcher作為Filter運(yùn)行在Web中,負(fù)責(zé)攔截用戶請(qǐng)求,當(dāng)請(qǐng)求到達(dá)時(shí),該Filter會(huì)過(guò)濾用戶請(qǐng)求。請(qǐng)求將被轉(zhuǎn)入Struts2框架處理。Struts2框架獲得了請(qǐng)求后,將根據(jù)請(qǐng)求的前面部分決定如何調(diào)用Action類[19]。Struts2處理請(qǐng)求步驟:客戶端提交一個(gè)(HttpServletRequest)請(qǐng)求。請(qǐng)求被提交到過(guò)濾器(Filter)。FilterDispatcher是控制器的核心,就是MVC的Struts2實(shí)現(xiàn)中控制層(Controller)的核心。FilterDispatcher詢問ActionMapper是否需要調(diào)用某個(gè)Action來(lái)處理這個(gè)(HttpServletRequest)請(qǐng)求,如果ActionMapper決定需要調(diào)用某個(gè)Action,F(xiàn)ilterDispatcher則把請(qǐng)求的處理交給ActionProxy。ActionProxy通過(guò)ConfigurationManager(struts.xml)詢問框架的配置文件,找到需要調(diào)用的Action類ActionProxy創(chuàng)建一個(gè)ActionInvocation實(shí)例,同時(shí)ActionInvocation通過(guò)代理模式調(diào)用Action。但在調(diào)用之前,ActionInvocation會(huì)根據(jù)配置加載Action相關(guān)的所有Interceptor(攔截器)。Action執(zhí)行完畢,ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果result。Web.xml中的Struts配置:<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern></filter-mapping>3.2.2Hibernate框架ORM(對(duì)象/關(guān)系數(shù)據(jù)庫(kù)映射)對(duì)象關(guān)系映射(ObjectRelationalMapping,簡(jiǎn)稱ORM)是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)存在的互不匹配的現(xiàn)象的技術(shù)。它完成了面向?qū)ο蟮木幊陶Z(yǔ)言到關(guān)系型數(shù)據(jù)庫(kù)的映射[21]。通過(guò)它使我們以面向?qū)ο蟮姆绞讲僮鞒志没瘜?duì)象,而ORM框架負(fù)責(zé)轉(zhuǎn)換成對(duì)應(yīng)的SQL操作。Hibernate概述Hibernate是輕量級(jí)持久層解決方案,是流行的ORM框架,對(duì)JDBC進(jìn)行輕量級(jí)的對(duì)象封裝,使Java程序員可以以面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫(kù)。Hibernate可以管理Java類到DB表的映射,完成對(duì)數(shù)據(jù)庫(kù)的增刪改查操作,減少人工使用SQL、JDBC處理數(shù)據(jù)的時(shí)間。Hibernate體系結(jié)構(gòu)Hibernate實(shí)際上是提供數(shù)據(jù)庫(kù)服務(wù)的中間件。Hibernate將用戶從繁瑣的JDBC訪問中解脫出來(lái),底層數(shù)據(jù)庫(kù)連接獲取,數(shù)據(jù)訪問的實(shí)現(xiàn)、事務(wù)控制都無(wú)須用戶關(guān)心。Hibernate運(yùn)行時(shí)體系結(jié)構(gòu):TransientObjectsApplicationTransientObjectsApplicationPPersistentObjectsSessionJNDIJDBCJTASessionFactorySessionJNDIJDBCJTASessionFactoryDatabaseDatabase圖3.2hibernate體系結(jié)構(gòu)Hibernate的5個(gè)核心的接口、類[23]:1.SessionFactory接口:它是單個(gè)數(shù)據(jù)庫(kù)映射關(guān)系經(jīng)過(guò)編譯后的內(nèi)存鏡像以及生成Session的工廠。2.Session接口:應(yīng)用程序與持久儲(chǔ)存層之間交互操作的一個(gè)單線程對(duì)象。Session接口對(duì)象實(shí)例中提供了持久化操作相關(guān)的“增、刪、查、改"(CRUD)方面的操作。所有的持久化操作都是在Session的基礎(chǔ)上完成的。通常將每一個(gè)Session對(duì)象實(shí)例和一個(gè)數(shù)據(jù)庫(kù)事務(wù)綁定。3.事務(wù)Transaction接口:通過(guò)Transaction接口來(lái)達(dá)到允許應(yīng)用系統(tǒng)通過(guò)一組一致的事務(wù)API來(lái)控制事務(wù)邊界,從而可以封裝系統(tǒng)底層的事務(wù)操作和訪問的接口,保持?jǐn)?shù)據(jù)的一致性,達(dá)到應(yīng)用系統(tǒng)在不同的運(yùn)行環(huán)境平臺(tái)和Java容器之間方便的移植。4.Query接口:Query接口能讓開發(fā)者方便的對(duì)數(shù)據(jù)庫(kù)表中的數(shù)據(jù)及與之對(duì)應(yīng)的持久化對(duì)象進(jìn)行查詢操作,利用它可以以面向?qū)ο蟮姆绞絹?lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的各種查詢操作。5.Configuration:通過(guò)Configuration獲取目前的配置(如數(shù)據(jù)源、數(shù)據(jù)庫(kù)的URL、連接用戶名及密碼、數(shù)據(jù)庫(kù)方言等)并將這些配置加載到內(nèi)存中,并預(yù)啟動(dòng)Hibernate框架,最終達(dá)到創(chuàng)建SessionFactory對(duì)象的目的。JavaBeans在Hibernate中存在三種狀態(tài):1.臨時(shí)狀態(tài)(transient):當(dāng)一個(gè)JavaBean對(duì)象在內(nèi)存中孤立存在,不與數(shù)據(jù)庫(kù)中的數(shù)據(jù)有任何關(guān)聯(lián)關(guān)系時(shí),那么這個(gè)JavaBeans對(duì)象就稱為臨時(shí)對(duì)象。2.持久化狀態(tài)(persistent):當(dāng)一個(gè)JavaBean對(duì)象與一個(gè)Session相關(guān)聯(lián)時(shí),就變成持久化對(duì)象。3.脫管狀態(tài)(detached):在這個(gè)Session被關(guān)閉的同時(shí),這個(gè)對(duì)象也會(huì)脫離持久化狀態(tài),就變成脫管狀態(tài)(DetachedObject),可以被應(yīng)用程序的任何層自由使用。Hibernate的運(yùn)行過(guò)程:應(yīng)用程序應(yīng)用程序配置文件Hibernate,cfg.xml配置文件Hibernate,cfg.xmlConfigrationConfigrationSessionFactorySessionFactory映射文件***.映射文件***.Hbm.xml查詢查詢SessionQuerySessionQuery異常正常異常正常Transaction回滾提交數(shù)據(jù)庫(kù)Transaction回滾提交數(shù)據(jù)庫(kù)圖3.3hibernate運(yùn)行過(guò)程3.2.3Spring框架Spring是從實(shí)際開發(fā)中抽取出來(lái)的開源框架,為企業(yè)的開發(fā)提供一個(gè)輕量級(jí)的解決方案。該解決方案包括:基于Ioc(控制反轉(zhuǎn))的核心機(jī)制,以及AOP(面向切面編程)的思想,能與多種持久層技術(shù)的整合,是優(yōu)秀的WebMVC框架等。Spring致力于Java應(yīng)用各層的解決方案而不是僅僅專注于某一層的方案,它貫穿表現(xiàn)層、業(yè)務(wù)層、持久層,降低各層組件的耦合度,實(shí)現(xiàn)軟件各層的解耦[。輕量級(jí)劃分一個(gè)應(yīng)用是否屬于輕量級(jí)還是重量級(jí),主要看它使用了多少服務(wù),使用的服務(wù)越多,容器要為普通java對(duì)象做的工作就越多,必然會(huì)影響到應(yīng)用的發(fā)布時(shí)間或者是運(yùn)行性能。對(duì)于Spring容器,它提供了很多服務(wù),但這些服務(wù)默認(rèn)是關(guān)閉的,應(yīng)用對(duì)需要的服務(wù)可以現(xiàn)用現(xiàn)拿。而且,Spring是無(wú)侵入性的可擴(kuò)展框架,Spring應(yīng)用中的對(duì)象不依賴Spring具體的類。Ioc(控制反轉(zhuǎn))所謂的控制反轉(zhuǎn)就是應(yīng)用本身不負(fù)責(zé)依賴對(duì)象的創(chuàng)建及維護(hù),依賴對(duì)象的創(chuàng)建及維護(hù)是由外部容器負(fù)責(zé)的。這樣控制權(quán)就由應(yīng)用轉(zhuǎn)移到了外部容器,控制權(quán)的轉(zhuǎn)移就是所謂反轉(zhuǎn)。AOP(面向切面編程)AOP(AspectOrientProgramming),即面向方面編程。AOP技術(shù)給人們提供了一個(gè)嶄新的視角分析和設(shè)計(jì)軟件系統(tǒng)。AOP引入了分離關(guān)注點(diǎn)形成模塊化的機(jī)制來(lái)解決橫切關(guān)注點(diǎn)的問題。所謂的關(guān)注點(diǎn)指的是一個(gè)特定的概念、目標(biāo)或可實(shí)現(xiàn)域。系統(tǒng)正是由一組關(guān)注點(diǎn)組成,典型的軟件系統(tǒng)由多個(gè)系統(tǒng)級(jí)關(guān)注點(diǎn)和核心級(jí)關(guān)注點(diǎn)組成。核心關(guān)注點(diǎn)指業(yè)務(wù)處理的主要過(guò)程,而系統(tǒng)級(jí)關(guān)注點(diǎn)是與核心業(yè)務(wù)無(wú)關(guān),一般橫切多個(gè)核心關(guān)注點(diǎn),為這些核心關(guān)注點(diǎn)提供服務(wù),如日志記錄,安全檢測(cè)、事務(wù)處理等。AOP和OOP互為補(bǔ)充,從兩種不同的角度去認(rèn)識(shí)事物。傳統(tǒng)的OOP編程是以對(duì)象為核心,系統(tǒng)由一系列相互依賴的對(duì)象組成,抽象的封裝好這些對(duì)象的屬性和行為,使得這些對(duì)象可以相互協(xié)作的完成特定的業(yè)務(wù)邏輯,從而完成一個(gè)完整的應(yīng)用系統(tǒng)。但隨著軟件系統(tǒng)的不斷擴(kuò)大,系列化分工越來(lái)越細(xì),對(duì)跨越多個(gè)模塊的行為進(jìn)行建模時(shí),OOP暴露出了一些無(wú)法很好解決的問題[9]。OOP的核心是采用的縱向結(jié)構(gòu)去完成業(yè)務(wù)邏輯(也可理解為關(guān)注點(diǎn)),很多不同模塊可能具有相同的關(guān)注點(diǎn)(橫切關(guān)注點(diǎn)),OOP處理起來(lái)較為繁瑣,模塊間的耦合度大,后期維護(hù)和擴(kuò)展比較困難。AOP的核心是允許我們獨(dú)立的完成一個(gè)個(gè)關(guān)注點(diǎn),然后以一種松耦合的方式把這些單獨(dú)的關(guān)注點(diǎn)編織成一個(gè)完整的系統(tǒng),形成了一種模塊化橫切關(guān)注點(diǎn)的方式。與OOP相對(duì),AOP采用的是橫向結(jié)構(gòu),這是系統(tǒng)建模中抽象層次的進(jìn)一步提升,可以得到結(jié)構(gòu)清晰、模塊化強(qiáng)、代碼問耦合度低、易于重用和維護(hù)的系統(tǒng)。Spring體系結(jié)構(gòu)如圖所示:SpringFrameworkRuntimeSpringFrameworkRuntimeWeb(mvc/Remoting)DataAccess/IntegrationWeb(mvc/Remoting)DataAccess/IntegrationServletWebORMJDBCServletWebORMJDBCJMSOXMJMSOXMStrutsPortletTransactionsStrutsPortletTransactionsInstrumentationAspectsAOPInstrumentationAspectsAOPCoreContainerCoreContainerBeanCoreContextExpressionLanguageBeanCoreContextExpressionLanguageTestTest圖3.4spring體系結(jié)構(gòu)Spring框架由7個(gè)定義良好的模塊(組件)組成,各個(gè)模塊可以獨(dú)立存在,也可以聯(lián)合使用:1.SpringCore:核心容器提供了Spring的基本功能。核心容器的核心功能是用Ioc容器來(lái)管理類的依賴關(guān)系.Spring采用的模式是調(diào)用者不理會(huì)被調(diào)用者的實(shí)例的創(chuàng)建,由Spring容器負(fù)責(zé)被調(diào)用者實(shí)例的創(chuàng)建和維護(hù),需要時(shí)注入給調(diào)用者。這是目前最優(yōu)秀的解耦模式[10]。2.SpringAOP:Spring的AOP模塊提供了面向切面編程的支持。SpringAOP采用的是純Java實(shí)現(xiàn)。SpringAOP采用基于代理的AOP實(shí)現(xiàn)方案,AOP代理由Ioc容器負(fù)責(zé)生成、管理,依賴關(guān)系也一并由Ioc容器管理,盡管如此,SpringIoc容器并不依賴于AOP,這樣我們可以自由選擇是否使用AOP。3.SpringORM:提供了與多個(gè)第三方持久層框架的良好整合。4.SpringDAO:Spring進(jìn)一步簡(jiǎn)化DAO開發(fā)步驟,能以一致的方式使用數(shù)據(jù)庫(kù)訪問技術(shù),用統(tǒng)一的方式調(diào)用事務(wù)管理,避免具體的實(shí)現(xiàn)侵入業(yè)務(wù)邏輯層的代碼中。5.SpringContext:它是一個(gè)配置文件,為Spring提供上下文信息,提供了框架式的對(duì)象訪問方法。Context為Spring提供了一些服務(wù)支持,如對(duì)國(guó)際化等功能。6.SpringWeb:提供了基礎(chǔ)的針對(duì)Web開發(fā)的集成特性,例如多方文件上傳,利用Servletlisteners進(jìn)行IoC容器初始化和針對(duì)Web的applicationContext.7.SpringMVC:提供了Web應(yīng)用的MVC實(shí)現(xiàn)。Spring的MVC框架并不是僅僅提供一種傳統(tǒng)的實(shí)現(xiàn),它提供了一種清晰的分離模型,在領(lǐng)域模型代碼和webform之間。并且,還可以借助Spring框架的其他特性。Spring在web.xml中的配置:<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value></context-param>3.2.4Spring整合HibernateSpring以其開放性,能與大部分ORM框架良好的整合.這樣Spring就能輕松地使用ORM。Spring提供了DAO支持,DAO組件是應(yīng)用的持久層訪問的重要組件,我們把主要精力集中在數(shù)據(jù)的管理口上。通過(guò)Hibernate進(jìn)行數(shù)據(jù)持久層操作時(shí),Hibernate的Session接口提供了基本的數(shù)據(jù)訪問方法,獲得HibernateSession對(duì)象方法是要實(shí)現(xiàn)Hibernate的SessionFactory接口,SessionFactory接口極為重要,它是單個(gè)數(shù)據(jù)庫(kù)映射關(guān)系編譯后的內(nèi)存鏡像,負(fù)責(zé)打開、關(guān)閉和管理Session[11]。Hibernate訪問時(shí),需要手動(dòng)創(chuàng)建SessionFactory實(shí)例,這是繁瑣的工作,我們希望能以聲明式的方式管理SessionFactory實(shí)例。Spring的loc容器提供了這種方式,通過(guò)配置文件的配置管理SessionFactory實(shí)例,使用Spring管理Session對(duì)象,使用Spring實(shí)現(xiàn)聲明式的事務(wù)管理。下面是Spring對(duì)Hibernate的整合時(shí)的關(guān)鍵步驟:在Spring的配置文件ApplicationContext.xml中配置Hibernate對(duì)SessionFactory的設(shè)置。當(dāng)Spring的IoC容器配置了SessionFactoryBean,它隨應(yīng)用的部署啟動(dòng)而加載,可以利用Spring依賴注入特性將該Bean注入其它Bean。我們由配置文件還可以看出,以聲明式的方式管理SessionFactory時(shí),可以讓應(yīng)用在不同數(shù)據(jù)源間切換,一旦持久層服務(wù)發(fā)生改變,程序代碼不需要改動(dòng),只需修改配置文件即可,使得系統(tǒng)的可維護(hù)性加強(qiáng)。使用Spring中的HibernateDaosupport和HibernateTemplate類簡(jiǎn)化HibernateDAO實(shí)現(xiàn)類的編寫,完成數(shù)據(jù)持久化的操作。通過(guò)Spring的事務(wù)機(jī)制進(jìn)行統(tǒng)一的事務(wù)管理。Spring可以采用編程式和聲明式兩類事務(wù)管理。聲明式的事務(wù)管理更靈活??梢栽赟pring中使用注解式的聲明式事務(wù)管理配置代碼如下:<!--配置連接池--> <!--引入外部屬性文件--> <context:property-placeholderlocation="classpath:perties"/> <!--配置c3p0連接池--> <beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"> <propertyname="driverClass"value="${jdbc.driver}"/> <propertyname="jdbcUrl"value="${jdbc.url}"/> <propertyname="user"value="${jdbc.user}"/> <propertyname="password"value="${jdbc.password}"/> </bean> <beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!--注入連接池--> <propertyname="dataSource"ref="dataSource"/> <!--配置hibernate的其他屬性--> <propertyname="hibernateProperties"> <props> <propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <propkey="hibernate.show_sql">true</prop> <propkey="hibernate.format_sql">true</prop> <propkey="hibernate.connection.autocommit">false</prop> <propkey="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!--hibernate的映射文件--> <propertyname="mappingResources"> <list> <value>entity/User.hbm.xml</value> <value>entity/Product.hbm.xml</value> <value>entity/Order.hbm.xml</value> <value>entity/OrderItem.hbm.xml</value> </list> </property> </bean> <!--事務(wù)管理--> <!--事務(wù)管理器--> <beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <propertyname="sessionFactory"ref="sessionFactory"/> </bean> <!--注解事務(wù)--> <tx:annotation-driventransaction-manager="transactionManager"/>3.2.5Spring整合Struts2Spring也提供了MVC模式的支持,但Struts是比較單純的MVC框架,開發(fā)中更傾向Spring和Struts整合開發(fā)。Struts和Spring的整合比較簡(jiǎn)單順暢。整合關(guān)鍵點(diǎn)是:將Struts中的Action的實(shí)例生成不再由Struts負(fù)責(zé),而交給Spring容器管理,主要目的是讓控制器與業(yè)務(wù)邏輯組件實(shí)現(xiàn)分離?;谠撃康?,我們采用工廠模式策略,讓Spring容器管理Action,利用IoC的依賴注入特性為控制器注入業(yè)務(wù)邏輯組件。Struts只單純扮演控制器的角色。下面是Spring和Struts整合的關(guān)鍵步驟[12]:Action類由Spring容器進(jìn)行管理,可以方便的對(duì)Action類進(jìn)行AOP的編程.在Struts2框架創(chuàng)建Action類的時(shí)候,默認(rèn)是多例的.而Spring容器在管理類的時(shí)候,默認(rèn)創(chuàng)建是單例的.單例的這種方式就容易產(chǎn)生線程安全問題.所以一定要配置類的scope屬性.在Spring的配置文件中:<beanid="informationAction"class="action.InformationAction"scope="prototype"><propertyname="informationService"ref="informationService"/></bean>在Struts的配置文件中:<actionname="pay_*"class="payAction"method="{1}"><resultname="pay">/WEB-INF/jsp/pay.jsp</result></action>3.2.6Struts2、Hibernate和Spring的整合開發(fā)在輕量級(jí)JAVAEE分層的設(shè)計(jì)模式中,表示層技術(shù)有:Struts、WebWork、Velocity、JSF、Tapestry等。持久層有:Hibernate、EntityEJB、iBATIS、TopLink、OJB等;將各層的開源框架有機(jī)的整合在一起作為軟件系統(tǒng)的主體架構(gòu),使得系統(tǒng)具備高度的可擴(kuò)展性、可維護(hù)性。在各種整合的方案中,struts+hibernate+spring已成為JAVA應(yīng)用開發(fā)的主流體系。Spring配置文件中相關(guān)代碼如下:<!--Service的配置--> <beanid="userService"class="implservice.UserService"> <propertyname="userDao"ref="userDao"/> </bean><!--Dao的配置--> <beanid="userDao"class="impldao.UserDao"> <propertyname="sessionFactory"ref="sessionFactory"/> </bean>3.3后臺(tái)邏輯功能設(shè)計(jì)3.3.1項(xiàng)目目錄結(jié)構(gòu)圖3.6項(xiàng)目目錄結(jié)構(gòu)3.3.2生成數(shù)據(jù)庫(kù)表的映射對(duì)象類創(chuàng)建實(shí)體Bean:publicclassOrder{ privateLongid; privateintprice; privateStringstate;其他屬性省略…… publicLonggetId(){ returnid; } publicvoidsetId(Longid){ this.id=id; }其他getter和setter方法省略……}3.3.3創(chuàng)建對(duì)應(yīng)映射文件<classname="entity.Order"table="orders"> <idname="id"> <generatorclass="native"/> </id> <propertyname="price"></property> <propertyname="state"></property> 其他屬性聲明類似,故而省略…… <!--與用戶之間的關(guān)聯(lián)--> <many-to-onename="user"class="entity.User"column="uid"/> <!--與訂單項(xiàng)之間的關(guān)聯(lián)--> <setname="items"cascade="save-update"> <keycolumn="oid"/> <one-to-manyclass="entity.OrderItem"/> </set> </class>3.3.4DAO層實(shí)現(xiàn)使用Spring框架所提供的HibernateDaoSupport類實(shí)現(xiàn)DAO:packageimpldao;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;importentity.Order;publicclassOrderDaoextendsHibernateDaoSupport{ publicvoidsave(Orderorder){ //TODOAuto-generatedmethodstub this.getHibernateTemplate().save(order); }部分代碼省略……}3.3.5SERVICE層實(shí)現(xiàn)importorg.springframework.transaction.annotation.Transactional;importentity.Order;importimpldao.OrderDao;importlombok.Data;@Data@TransactionalpublicclassOrderService{ privateOrderDaoorderDao; publicvoidsave(Orderorder){ orderDao.save(order); }部分代碼省略……}3.3.6分頁(yè)Bean的代碼實(shí)現(xiàn)publicclassPageBean<T>{ privateintpc;//當(dāng)前頁(yè)碼 privateinttr;//總記錄數(shù) privateintps;//每頁(yè)記錄數(shù) privateStringurl;//請(qǐng)求路徑和參數(shù) privateList<T>beanList;// publicintgetTp(){ returntr%ps==0?tr/ps:tr/ps+1; } publicvoidsetUrl(Stringurl){ this.url=url; } publicList<T>getBeanList(){ returnbeanList; }//部分代碼省略...publicvoidsetBeanList(List<T>beanList){ this.beanList=beanList; }}3.3.7jdbc數(shù)據(jù)庫(kù)屬性文件配置jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/LQcakejdbc.user=rootjdbc.password=1234563.3.8用戶驗(yàn)證ajax異步校驗(yàn)代碼/** *ajax進(jìn)行異步校驗(yàn)action *@throwsIOException */ publicStringfindName()throwsIOException{ UserexitUser=userService.findByName(user.getName()); HttpServletResponseresponse=ServletActionContext.getResponse(); response.setContentType("text/html;charset=UTF-8"); if(exitUser!=null){ response.getWriter().println("<fontcolor='red'>用戶名已經(jīng)存在</font>"); }else{ response.getWriter().println("<fontcolor='green'>用戶名可以使用</font>"); } returnNONE; }3.3.9console部分打印日志信息2015-6-1423:47:24mon.ChannelSocketinit信息:JK:ajp13listeningon/:80092015-6-1423:47:24org.apache.jk.server.JkMainstart信息:JkrunningID=0time=0/53config=null2015-6-1423:47:24org.apache.catalina.startup.Catalinastart信息:Serverstartupin21529msHibernate:selectthis_.idasid1_0_,this_.nameasname1_0_,fromproductthis_limit?Hibernate:selectproduct0_.idasid1_,product0_.nameasname1_,product0_.typeastype1_,fromproductproduct0_3.4數(shù)據(jù)庫(kù)設(shè)計(jì)本系統(tǒng)采用的數(shù)據(jù)庫(kù)為Mysql5.6,本系統(tǒng)所有與數(shù)據(jù)庫(kù)相關(guān)的開發(fā)都遵從Mysql5.6數(shù)據(jù)庫(kù)開發(fā)原則。本系統(tǒng)數(shù)據(jù)庫(kù)開發(fā)定義名詞如下:‘UNIQUE’:唯一索引‘PRAMARY’:主鍵索引‘FK’:外關(guān)鍵字縮寫數(shù)據(jù)庫(kù)基本語(yǔ)句[]:創(chuàng)建數(shù)據(jù)庫(kù)CREATEDATABASEdatabase-name刪除數(shù)據(jù)庫(kù)dropdatabasedbname創(chuàng)建新表createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)選擇:select*fromtable1where范圍插入:insertintotable1(field1,field2)values(value1,value2)刪除:deletefromtable1where范圍更新:updatetable1setfield1=value1where范圍查找:select*fromtable1wherefield1like’%value1%’排序:select*fromtable1orderbyfield1,field2[desc]總數(shù):selectcountastotalcountfromtable1求和:selectsum(field1)assumvaluefromtable1平均:selectavg(field1)asavgvaluefromtable1最大:selectmax(field1)asmaxvaluefromtable1最?。簊electmin(field1)asminvaluefromtable1各數(shù)據(jù)表描述:表3.1數(shù)據(jù)庫(kù)表設(shè)計(jì)表名稱表描述usersproductordersorderitems用戶信息表商品信息表訂單信息表訂單項(xiàng)信息表數(shù)據(jù)字典設(shè)計(jì):訂單信息表與用戶信息關(guān)聯(lián)以唯一確定此訂單所屬用戶;訂單項(xiàng)信息表和商品表以及訂單表關(guān)聯(lián)以確定這個(gè)訂單項(xiàng)所屬訂單以及包括的商品信息。表3.2users是否為主鍵名稱數(shù)據(jù)類型長(zhǎng)度無(wú)符號(hào)允許NULL填零默認(rèn)備注YidINT64YNNauto-incrementnameVARCHAR64YNNNULLpasswordVARCHAR64YNNNULLurlVARCHAR64YYNNULLaddressVARCHAR256YYNNULLemailVARCHAR64YYNNULLcontractVARCHAR64YYNNULLphoneVARCHAR11YNNNULLpostcodeVARCHAR6YYNNULLbirthdayVARCHAR14YYNNULLsexVARCHAR4YYNNULL用戶表包括用戶的一些基本的信息,用于最終用戶購(gòu)買以及最后商品發(fā)貨等關(guān)鍵購(gòu)物流程。表3.3product是否為主鍵名稱數(shù)據(jù)類型長(zhǎng)度無(wú)符號(hào)允許NULL填零默認(rèn)備注YidINT64YNNauto-incrementtypeINT64YYN0nameVARCHAR64YYNNULLcommentVARCHAR256YYNNULLpriceVARCHAR64YYNNULLaddrVARCHAR64YYNNULLsizeINT2YYN0商品信息表包括商品的基本信息:類型,價(jià)格,尺寸等,主要用與展示,同時(shí)不會(huì)脫離實(shí)際商品的樣式,可以支持平臺(tái)的分類查找。表3.4orders是否為主鍵名稱數(shù)據(jù)類型長(zhǎng)度無(wú)符號(hào)允許NULL填零默認(rèn)備注YidINT64YNNauto-incrementpriceVARCHAR64YYNNULLstateVARCHAR64YYNNULLaddressVARCHAR64YYNNULLphoneVARCHAR64YYNNULLownerVARCHAR64YYNNULLuidINT64YYN0訂單表用于維護(hù)購(gòu)物者購(gòu)買的商品,同時(shí)用與維護(hù)最終的發(fā)貨流程。表3.5orderitems是否為主鍵名稱數(shù)據(jù)類型長(zhǎng)度無(wú)符號(hào)允許NULL填零默認(rèn)備注YidVARCHAR64YNNauto-incrementcountINT64YYN0subtotalVARCHAR64YYNNULLpidINT64YYN0oidINT64YYN0訂單項(xiàng)信息表是訂單與商品之間的連接表,同時(shí)也具有自己的內(nèi)容,用與更好的顯示訂單信息。數(shù)據(jù)庫(kù)結(jié)構(gòu)EER圖如下:圖3.1前端界面設(shè)計(jì)4功能實(shí)現(xiàn)4.1前臺(tái)功能實(shí)現(xiàn)在網(wǎng)站建設(shè)上我們一定要重視人機(jī)交互界面的重要性。人機(jī)交互界面的設(shè)計(jì)主要是為了提升用戶的良好體驗(yàn)效果,既給人以感官的舒適性,給人以美的享受,同時(shí)也能夠方便用戶的操作,簡(jiǎn)化用戶的操作。對(duì)于這個(gè)問題,我們可以從多個(gè)層面來(lái)看待:1.給用戶留下美好的第一印象。給用戶留下一個(gè)好印象是界面設(shè)計(jì)追求的目標(biāo),做網(wǎng)站推廣的人都知道,現(xiàn)在的網(wǎng)站推廣工作越來(lái)越難做了,讓用戶去主動(dòng)瀏覽我們的網(wǎng)站,如今變得更加的困難。當(dāng)有用戶瀏覽我們的網(wǎng)站的時(shí)候,我們應(yīng)該盡可能地利用該界面的友好性來(lái)留住用戶,吸引住用戶。如果界面不很理想的話,這就可能讓用戶感到索然無(wú)味,你也就很可能會(huì)永久失去這個(gè)用戶了。讓用戶認(rèn)為你很專業(yè),從而增加信任感。2.如果用戶是第一次來(lái)到你的網(wǎng)站,猛然覺得你很專業(yè),那么你就算已經(jīng)成功了一半。只有讓用戶感到你的網(wǎng)站很專業(yè),用戶才會(huì)付出時(shí)間和精力來(lái)了解你,才會(huì)繼續(xù)瀏覽網(wǎng)站上的感興趣的內(nèi)容,從而對(duì)你的網(wǎng)站和你的企業(yè)產(chǎn)生信任感,這時(shí)候你就基本上算是成功了。如果網(wǎng)站引起不了用戶的興趣,也無(wú)法體現(xiàn)出你很專業(yè),這就失去了用戶的信任基礎(chǔ),用戶很快離開你的網(wǎng)站就在所難免了。3.讓用戶更加了解和接受你的產(chǎn)品。在網(wǎng)站建設(shè)中,我們必須把主要產(chǎn)品的各種屬性包括圖片一同展示出來(lái),這樣可以讓用戶能更清楚地了解你的產(chǎn)品,不管購(gòu)買與否,用戶都會(huì)始終覺得你的網(wǎng)站設(shè)計(jì)的不錯(cuò),更加貼近用戶。4.給人以更加獨(dú)特的感覺。界面設(shè)計(jì)或者交互設(shè)計(jì)應(yīng)該有一些自己的特別的地方,尤其是在用戶可能反復(fù)操作的部分。對(duì)于這些功能,如果你的網(wǎng)站與競(jìng)爭(zhēng)對(duì)手的網(wǎng)站不一樣,那么你的客戶就會(huì)對(duì)你的網(wǎng)站印象更加深刻,只要有這方面的產(chǎn)品需求,就可能在第一時(shí)間想起你的網(wǎng)站,這樣,用戶的訂單就不知不覺間找到你的網(wǎng)站了。4.1.1人機(jī)交互效果圖主界面的效果圖如下:圖4.1歡迎界面圖4.2歡迎界面底部歡迎界面中主要表現(xiàn)的是商家的logo,聯(lián)系方式,環(huán)境等方面的介紹,同時(shí)包括了主要的商品分類,通過(guò)每個(gè)圖標(biāo)及文字清晰的展現(xiàn)出每種分類。歡迎界面的分類鏈接:圖4.2商品分類顯示-雙層蛋糕 通過(guò)歡迎界面的分類顯示商品,同時(shí)為商品顯示添加了分頁(yè)功能,以避免由于商品過(guò)多導(dǎo)致的頁(yè)面太長(zhǎng),降低購(gòu)物者的體驗(yàn)值。企業(yè)文化介紹:圖4.3企業(yè)文化圖4.4店鋪地址 本網(wǎng)站增加了企業(yè)文化介紹板塊,以及蛋糕故事,店鋪地址等信息,其中蘊(yùn)含豐富故事的蛋糕更會(huì)吸引購(gòu)物者的眼球,這些故事可以使蛋糕的擁有者在品嘗美食的同時(shí)得到精神上的享受。而店鋪的地址會(huì)增加購(gòu)物者的信任度,是提高購(gòu)物率的一個(gè)好的方法。顯示所有商品:圖4.5展示所有商品 本界面的設(shè)計(jì)包含按蛋糕類型分類,按蛋糕尺寸分類,按蛋糕價(jià)格分類,為不同需求的購(gòu)物者提供細(xì)致的服務(wù)。當(dāng)然每一個(gè)商品展示的頁(yè)面都包含分頁(yè)操作避免頁(yè)面太長(zhǎng),降低體驗(yàn)值。新手指南界面:圖4.5新手指南 本平臺(tái)為新用戶提供了新手指南的板塊,協(xié)助首次登錄該網(wǎng)站的購(gòu)物者進(jìn)行購(gòu)買。登錄界面: 圖4.5新手指南 當(dāng)購(gòu)物者登錄時(shí)會(huì)檢測(cè)用戶名和密碼,不能正確登錄不能使用購(gòu)物功能。如未

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論