版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
/摘要互聯(lián)網(wǎng)技術(shù)發(fā)展到現(xiàn)在已經(jīng)相當(dāng)成熟,互聯(lián)網(wǎng)已經(jīng)成為一個(gè)全世界最大最全的信息中心,越來越多的人在利用互聯(lián)網(wǎng)來完成他們的工作,同時(shí)也有越來越多的人利用互聯(lián)網(wǎng)來解放他們的生活,他們利用互聯(lián)網(wǎng)來完成幾乎所有所有現(xiàn)實(shí)生活中的事物。由于所有的領(lǐng)域都在利用互聯(lián)網(wǎng),傳統(tǒng)商業(yè)也是,現(xiàn)在已經(jīng)有越來越多的商家將他們的生意搬上了互聯(lián)網(wǎng),他們小一點(diǎn)的可以開個(gè)小的網(wǎng)店。大一點(diǎn)的可以開個(gè)。本次畢業(yè)設(shè)計(jì)的題目就是設(shè)計(jì)和實(shí)現(xiàn)一個(gè)網(wǎng)上售書的電子商務(wù)。為一個(gè)傳統(tǒng)的書店提供一個(gè)網(wǎng)上展覽和銷售的平臺。本系統(tǒng)主要以Struts和Hibernate加Mysql為開發(fā)基礎(chǔ),以JSP為前臺表現(xiàn)手段。在功能上面基本實(shí)現(xiàn)一個(gè)電子商務(wù)應(yīng)該有的功能模塊,包括前臺和后臺兩個(gè)層面。前臺方面主要功能有:用戶注冊,登錄,注銷,添加收貨人信息,修改收貨人信息,刪除收貨人信息,瀏覽商品。添加商品進(jìn)購物車,修改購物車中商品,刪除購物車中商品,清空購物車,將購物車中商品生成定單,查看定單,查看定單明細(xì)。后臺方面主要功能有:查看管理員列表,添加管理員,刪除管理員,修改管理員,查看用戶列表,添加用戶,刪除用戶,修改用戶,查看商品列表,添加商品,刪除商品,修改商品,查看定單列表,刪除定單等。關(guān)鍵字:StrutsHibernateB/SAbstractInternettechnologyhasbeendevelopedtoamature,theInternethasbecomeaworld-widelargestandmostoftheinformationcenter,anincreasingnumberofpeopleusingtheInternettocompletetheirwork,andalsomoreandmorepeopleusetheInternettotheliberationoftheirlivesTheyusetheInternettocompletealmostallofallthethingsinreallife.SinceallthefieldsintheuseoftheInternet,traditionalbusinessisalsonowagrowingnumberofbusinessmenwillbetheirbusinessontotheInternet,thesmallertheycanopenasmallshop.Thebigpointcanopenawebsite.ThegraduationprojectisthesubjectofDesignandImplementationofanon-lineBooksellersofe-commercesites.Foratraditionalonlinebookstoretoprovideaplatformforexhibitionandsale.ThissystemismainlytoStrutsandHibernatebasisforthedevelopmentandMysqltoJSPforthefutureperformanceofmeans.Intheabovebasicrealizationofafunctionale-commercesitesshouldhavefunctionalmodules,includingtheprospectsandthebackgroundlevel.Prospectsinthemainfeaturesare:userregistration,signin,write-off,addtheconsignee,theconsigneetoamendtheinformation,deletetheconsigneeinformation,visitthemerchandise.Addgoodsintotheshoppingcart,shoppingcartofgoodsamendedtodeletetheshoppingcartofgoods,emptyshoppingcart,thecartwillgenerategoodsorders,vieworders,ordersDetailsview.Backgroundinthemainfeaturesare:Showthelistadministrators,managersadd,deleteadministrator,modifyadministratortoviewthelistofusers,addusers,deleteusers,modifytheusertoviewthelistofgoods,addedcommodities,commoditiesdelete,modifyMerchandise,vieworderslist,deleteandsoonorders.Keyword:StrutsHibernateB/S目錄TOC\o"1-3"\h\u摘要 1Abstract 2目錄 31緒論 52開發(fā)環(huán)境與開發(fā)工具的介紹 62.1Java語言介紹 62.2JavaBean介紹 62.3Servlet/Jsp介紹 72.4Eclipse介紹 72.5Tomcat介紹 72.6MySql介紹 83開源框架介紹 93.1Hibernate介紹 93.1.1Hibernate的工作方式 93.1.2使用Hibernate的場合 93.1.3Hibernate的兩中類型的配置文件 103.2Struts介紹 113.2.1模型(Model) 113.2.2視圖(View) 113.2.3控制器(Controller) 114需求分析 134.1系統(tǒng)主要功能詳細(xì)描述 134.2系統(tǒng)角色與其功能分析 135系統(tǒng)總體設(shè)計(jì) 145.1DB層設(shè)計(jì) 175.2DAO層設(shè)計(jì) 215.3SERVICE層設(shè)計(jì) 215.4WEB層設(shè)計(jì) 215.4.1控制器(Controller) 215.4.2模型(Model) 225.4.3表現(xiàn)(View) 225.5系統(tǒng)數(shù)據(jù)流圖(產(chǎn)品模塊,定單模塊,購物車模塊) 226詳細(xì)設(shè)計(jì) 246.1系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì) 246.1.1Product表 245.1.2Order表 255.1.3OrderItem表 255.2系統(tǒng)模塊的劃分 265.2.1產(chǎn)品模塊主要子模塊 265.3.2購物車模塊主要子模塊 265.3.3定單模塊主要子模塊 265.3系統(tǒng)模塊的具體實(shí)現(xiàn) 265.3.1產(chǎn)品模塊主要子模塊 26增加產(chǎn)品 265.3.2購物車模塊主要子模塊 305.3.3定單模塊主要子模塊 33總結(jié)與體會 35致 36參考文獻(xiàn) 37緒論
近年來,隨著Internet的迅速崛起,互聯(lián)網(wǎng)已日益成為收集提供信息的最佳渠道并進(jìn)入傳統(tǒng)的流通領(lǐng)域。于是電子商務(wù)開始流行起來,一種全新的購物理念開始形成并逐步發(fā)展。網(wǎng)上購物是一種具有交互功能的商業(yè)信息系統(tǒng)。它向用戶提供靜態(tài)和動態(tài)兩類信息資源。所謂靜態(tài)信息是指那些比經(jīng)常變動或更新的資源,如公司簡介等;動態(tài)信息是指隨時(shí)變化的商務(wù),是通過電子化的手段來完成商業(yè)貿(mào)易活動的一種方式。等等。那么究竟什么是電子商務(wù)?
電子商務(wù),顧名思義是指在互聯(lián)網(wǎng)上進(jìn)行的電子化的商務(wù)活動。從狹義上看,電子商務(wù)也就是電子交易,主要指利用Web提供的通信手段在網(wǎng)上進(jìn)行交易活動,包括通過Internet買賣產(chǎn)品和提供服務(wù)。產(chǎn)品可以是實(shí)體化的,如汽車、電視,也可以是數(shù)字化的,如新聞、錄像、軟件等基于比特的產(chǎn)品。此外,還可以提供各類服務(wù),如安排旅游、遠(yuǎn)程教育等??傊?,電子商務(wù)并不僅僅局限于在線買賣,它將從的信息,如商品報(bào)價(jià),會議安排和培訓(xùn)信息等。網(wǎng)上購物系統(tǒng)具有強(qiáng)大的交互功能,可使商家和用戶方便的傳遞信息,完成電子貿(mào)易或EDI交易。這種全新的交易方式實(shí)現(xiàn)了公司間文檔與資金的無紙化交換。今天,我們已經(jīng)可以確信電子商務(wù)毋庸置疑是未來的發(fā)展方向。但是電子商務(wù)卻還沒有一個(gè)標(biāo)準(zhǔn)的定義。Intel公司認(rèn)為:電子商務(wù)=電子市場+電子交易+電子服務(wù);IBM認(rèn)為:電子商務(wù)=web;HP公司則說:“電子生產(chǎn)到消費(fèi)各個(gè)方面影響進(jìn)行商務(wù)活動的方式。除了網(wǎng)上購物,電子商務(wù)還大大改變了產(chǎn)品的定制、分配和交換的手段。而對于顧客,查找和購買產(chǎn)品乃至服務(wù)的方式也大為改進(jìn)。
而從廣義上講,電子商務(wù)還包括企業(yè)部商務(wù)活動,如生產(chǎn)、管理、財(cái)務(wù)等以與企業(yè)間的商務(wù)活動,它不僅僅是硬件和軟件的結(jié)合,更是把買家、賣家、廠家和合作伙伴在Internet、Intranet和Extranet上利用Internet技術(shù)與現(xiàn)有的系統(tǒng)結(jié)合起來開展的業(yè)務(wù)活動。從最初的、電報(bào)到電子以與20多年前開始的EDI,都可以說是電子商務(wù)的某種形式;發(fā)展到今天,人們已提出了包括通過網(wǎng)絡(luò)來實(shí)現(xiàn)從原材料的查詢、采購、產(chǎn)品的展示、定購到出品、儲運(yùn)以與電子支付等一系列貿(mào)易活動在的完整電子商務(wù)的概念。在發(fā)達(dá)國家,電子商務(wù)已發(fā)展迅速,通過Internet進(jìn)行交易已成為潮流。
2開發(fā)環(huán)境與開發(fā)工具的介紹2.1Java語言介紹Java語言是一門高級程序設(shè)計(jì)語言.它在各個(gè)重要的行業(yè)部門得到了廣泛的應(yīng)用,Java技術(shù)的通用性、高效性、平臺移植性和安全性,使之成為網(wǎng)絡(luò)計(jì)算的理想技術(shù).除上面的技術(shù)之外還有其他的特點(diǎn):Java語言是面向?qū)ο蟮恼Z言,主要集中在對象和接口的設(shè)計(jì)。Java將具有一樣特性的數(shù)據(jù)封裝成一個(gè)類,實(shí)現(xiàn)了對現(xiàn)實(shí)實(shí)體的抽象,也就是對對象的總體描述;Java可以實(shí)現(xiàn)模塊化和信息隱藏,Java將數(shù)據(jù)和操作數(shù)據(jù)的方法封裝在一起,使得數(shù)據(jù)全都隱藏起來,暴露給外面程序的僅是對數(shù)據(jù)操作的方法;一個(gè)類提供了一類對象的原型,通過Java的繼承機(jī)制,子類可以使用父類所提供的方法,從而實(shí)現(xiàn)了代碼的復(fù)用;多態(tài)就是一個(gè)實(shí)體多種形態(tài),在Java中表現(xiàn)的最突出的就是一個(gè)類實(shí)現(xiàn)了多個(gè)接口,從而可以有多個(gè)功能。另外Java語言是安全的,Java不支持指針,一切對存的訪問都必須通過對象的實(shí)例變量來實(shí)現(xiàn),這樣就防止程序員使用"特洛伊"木馬等欺騙手段訪問對象的私有成員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。Java程序是可移植的,與平臺無關(guān)的特性使Java程序可以方便地被移植到網(wǎng)絡(luò)上的不同機(jī)器。同時(shí)Java的類庫中也實(shí)現(xiàn)了與不同平臺的接口,使這些類庫可以移植。另外,Java編譯器是由Java語言實(shí)現(xiàn)的,Java運(yùn)行時(shí)系統(tǒng)由標(biāo)準(zhǔn)C實(shí)現(xiàn),這使得Java系統(tǒng)本身也具有可移植性。Java語言和其它解釋執(zhí)行的語言如BASIC不同,Java字節(jié)碼的設(shè)計(jì)使之能很容易地直接轉(zhuǎn)換成對應(yīng)于特定CPU的機(jī)器碼,從而得到較高的性能。2.2JavaBean介紹簡單地說,JavaBean是用Java語言描述的軟件組件模型,其實(shí)際上是一個(gè)類。這些類遵循一個(gè)接口格式,以便于使函數(shù)命名、底層行為以與繼承或?qū)崿F(xiàn)的行為,可以把類看作標(biāo)準(zhǔn)的JavaBean組件進(jìn)行構(gòu)造和應(yīng)用。JavaBean有以下特點(diǎn):易于維護(hù)、使用、編寫??蓪?shí)現(xiàn)代碼的重用性??梢浦残詮?qiáng),但僅限于Java工作平臺。便于傳輸,不限于本地還是網(wǎng)絡(luò)??梢砸云渌考哪J竭M(jìn)行工作。Java程序中往往有重復(fù)使用的段落,JavaBean就是為了能夠重復(fù)使用而設(shè)計(jì)的程序段落,而且這些段落并不只服務(wù)于某一個(gè)程序,而且每個(gè)JavaBean都具有特定功能,當(dāng)需要這個(gè)功能的時(shí)候就可以調(diào)用相應(yīng)的JavaBean。從這個(gè)意義上來講,JavaBean大大簡化了程序的設(shè)計(jì)過程,也方便了其他程序的重復(fù)使用。2.3Servlet/Jsp介紹Jsp(JavaServerPage)是在普通Html中嵌入了Java代碼的一個(gè)腳本,在這一點(diǎn)上,它與其它的腳本語言一樣,但它與其它語言不同的是:其它腳本語言由服務(wù)器直接解釋這個(gè)腳本,而Jsp則由Jsp容器(如Tomcat)首先將其轉(zhuǎn)化為Servlet,然后再調(diào)用Javac將Servlet編譯為Class文件.最終,服務(wù)器解釋的是Class文件.那么什么是Servlet呢?Servlet其實(shí)是一個(gè)特殊的Java類,Servlet類一般從Servlet類繼承而來,在這個(gè)類中至少要實(shí)現(xiàn)doGet或者doPost函數(shù),在這兩個(gè)函數(shù)中處理來自客戶的請求,然后將結(jié)果返回.2.4Eclipse介紹
Eclipse是一種可擴(kuò)展的開放源代碼IDE.,業(yè)界廠商合作創(chuàng)建了Eclipse平臺.Eclipse允許在同一IDE中集成來自不同供應(yīng)商的工具,并實(shí)現(xiàn)了工具之間的互操作性,從而顯著改變了項(xiàng)目工作流程,使開發(fā)者可以專注在實(shí)際的業(yè)務(wù)上.
利用Eclipse,我們可以將高級設(shè)計(jì)(也許是采用UML)與低級開發(fā)工具(如應(yīng)用調(diào)試器等)結(jié)合在一起.如果這些互相補(bǔ)充的獨(dú)立工具采用Eclipse擴(kuò)展點(diǎn)彼此連接,那么當(dāng)我們用調(diào)試器逐一檢查應(yīng)用時(shí),UML對話框可以突出顯示我們正在關(guān)注的器件.事實(shí)上,由于Eclipse并不了解開發(fā)語言,所以無論Java語言調(diào)試器、C/C++調(diào)試器還是匯編調(diào)試器都是有效的,并可以在一樣的框架同時(shí)瞄準(zhǔn)不同的進(jìn)程或節(jié)點(diǎn).
Eclipse的最大特點(diǎn)是它能接受由Java開發(fā)者自己編寫的開放源代碼插件,這類似于微軟公司的Visual
Studio和Sun微系統(tǒng)公司的NetBeans平臺.Eclipse為工具開發(fā)商提供了更好的靈活性,使他們能更好地控制自己的軟件技術(shù)。2.5Tomcat介紹Tomcat是一個(gè)免費(fèi)的開源的Serlvet容器,是一個(gè)開源的服務(wù)器,里面可以裝載WAR的類似于JAR的壓縮文件,這個(gè)文件按一定目錄結(jié)構(gòu)來組織:通常其根目錄下包含有Html和Jsp文件或者包含這兩種文件的目錄,另外還會有一個(gè)WEB-INF目錄,這個(gè)目錄很重要.通常在WEB-INF目錄下有一個(gè)web.xml文件和一個(gè)classes目錄,web.xml是這個(gè)應(yīng)用的配置文件,而classes目錄下則包含編譯好的Servlet類和Jsp或Servlet所依賴的其它類(如JavaBean)在Tomcat中,應(yīng)用程序的部署很簡單,你只需將你的WAR放到Tomcat的webapp目錄下,Tomcat會自動檢測到這個(gè)文件,并將其解壓.你在瀏覽器中訪問這個(gè)應(yīng)用的Jsp時(shí),通常第一次會很慢,因?yàn)門omcat要將Jsp轉(zhuǎn)化為Servlet文件,然后編譯.編譯以后,訪問將會很快2.6MySql介紹MySQL是一個(gè)真正的多用戶、多線程SQL數(shù)據(jù)庫服務(wù)器,它是一個(gè)客戶機(jī)/服務(wù)器結(jié)構(gòu)的實(shí)現(xiàn)。MySQL是現(xiàn)在流行的關(guān)系數(shù)據(jù)庫中其中的一種,相比其它的數(shù)據(jù)庫管理系統(tǒng)(DBMS)來說,MySQL具有小巧、功能齊全、查詢迅捷等優(yōu)點(diǎn)。MySQL主要目標(biāo)是快速、健壯和易用。關(guān)鍵的是它是免費(fèi)的,可以在Internet上免費(fèi)下載到,并可免費(fèi)使用。MySQL對于一般中小型,甚至大型應(yīng)用都能夠勝任。MySQL是開源的,開源意味著任何人都可以使用和修改該軟件,任何人都可以從Internet上下載和使用MySQL而不需要支付任何費(fèi)用.如果你愿意,你可以研究其源代碼,并根據(jù)你的需要修改它3開源框架介紹3.1Hibernate介紹3.1.1Hibernate的工作方式使用Hibernate惟一需要做的就是創(chuàng)建一份XML“映射文檔”,告訴Hibernate希望保存在數(shù)據(jù)庫中的類,以與它們?nèi)绾侮P(guān)聯(lián)到該數(shù)據(jù)庫中的表和列,然后就可以要求Hibernate以對象的形式獲取數(shù)據(jù),或者把對象保存為數(shù)據(jù).Hibernate在運(yùn)行時(shí),Hibernate首先讀取映射文檔,然后動態(tài)構(gòu)建Java類,以便管理數(shù)據(jù)庫與Java之間的轉(zhuǎn)換.在Hibernate中有一個(gè)簡單而直觀的API,用于對數(shù)據(jù)庫所表示的對象執(zhí)行查詢.要修改這些對象,(一般情況下)只需在程序中與它們進(jìn)行交互,然后告訴Hibernate保存修改即可.類似地,創(chuàng)建新對象也很簡單;只需以常規(guī)方式創(chuàng)建它們,然后告訴Hibernate有關(guān)它們的信息,這樣就能在數(shù)據(jù)庫中保存它們.HibernateAPI學(xué)習(xí)起來很簡單,而且它與程序流的交互相當(dāng)自然.在適當(dāng)?shù)奈恢谜{(diào)用它,就可以達(dá)成目的.它帶來了很多自動化和代碼節(jié)省方面的好處,所以花一點(diǎn)時(shí)間學(xué)習(xí)它是值得的.而且還可以獲得另一個(gè)好處,即代碼不用關(guān)心要使用的數(shù)據(jù)庫種類.借助于Hibernate,只需要簡單地修改Hibernate配置文件即可.3.1.2使用Hibernate的場合如果應(yīng)用對于數(shù)據(jù)存儲的需要十分簡單——例如,您只想管理一組用戶優(yōu)先選擇——就根本不需要數(shù)據(jù)庫,更不用說一個(gè)優(yōu)秀的對象-關(guān)系映射系統(tǒng)了對于熟悉使用關(guān)系數(shù)據(jù)庫和了解如何執(zhí)行完美的SQL查詢與企業(yè)數(shù)據(jù)庫交互的人來說,Hibernate似乎有些礙手礙腳,這就像帶有動力和自動排擋的快艇車會使注重性能的賽車駕駛員不耐煩一樣.如果您屬于這種人,如果您所在的項(xiàng)目團(tuán)隊(duì)擁有一個(gè)強(qiáng)大的DBA,或者有一些存儲過程要處理,您可能想研究一下iBATIS.當(dāng)然,還有其他的外部原因會導(dǎo)致采用另外的方法.比如,在一個(gè)企業(yè)環(huán)境中,必須使用成熟的E架構(gòu)(或者其他的一些非普通對象映射系統(tǒng)).可以為提供自己的數(shù)據(jù)存儲工具的平臺量身定做代碼,比如MacOSX'sCoreData.使用的可能是像XMLDTD這樣的存儲規(guī),而它根本不涉與關(guān)系數(shù)據(jù)庫.但是,如果您使用的是富對象模型,而且想要靈活、輕松且高效地保存它,那么Hibernate很可能就是您理想的選擇.您可能會驚訝于節(jié)省的時(shí)間之多,以與您將會多么地喜歡使用它.3.1.3Hibernate的兩中類型的配置文件首先創(chuàng)建系統(tǒng)的Hibernate配置文件hibernate.cfg.xml,該文件中存放著數(shù)據(jù)庫連接驅(qū)動程序類、登錄數(shù)據(jù)庫的用戶名/密碼、映射持久化類配置文件的位置等,Hibernate初始化時(shí)會自動在classes路徑中尋找這個(gè)文件,并讀取其中的配置信息,為后期數(shù)據(jù)庫操作做準(zhǔn)備,其完整代碼如下。<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configuration
PUBLIC"-//Hibernate/HibernateConfigurationDTD//EN"
"/hibernate-configuration-3.0.dtd"><hibernate-configuration>
<session-factory>
<propertyname="connection.driver_class"><!--指定連接數(shù)據(jù)庫用的驅(qū)動-->
.microsoft.jdbc.sqlserver.SQLServerDriver
</property>
<propertyname="connection.url"><!--指定連接數(shù)據(jù)庫的路徑-->
jdbc:microsoft:sqlserver://:1433;databaseName=db_Material
</property>
<propertyname="connection.username">sa</property><!--指定連接數(shù)據(jù)庫的用戶名-->
<propertyname="connection.password"></property><!--指定連接數(shù)據(jù)庫的密碼-->
<propertyname="show_sql">true</property><!--當(dāng)show_sql屬性為true時(shí)表示在程序運(yùn)行時(shí)在控制臺輸出SQL語句,默認(rèn)為false,建議在調(diào)試程序時(shí)設(shè)為true,發(fā)布程序之前再改為false,因?yàn)檩敵鯯QL語句會影響程序的運(yùn)行速度-->
<mappingresource="/actionForm/GoodsForm.hbm.xml"/><!--指定持久化類映射文件-->
……
<!--此處省略了指定其他持久化類映射文件的代碼-->
</session-factory></hibernate-configuration>創(chuàng)建持久化類的映射文件<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC "-//Hibernate/HibernateMappingDTD3.0//EN" "/hibernate-mapping-3.0.dtd"><hibernate-mappingpackage=".tarena.bookshop.entity"> <classname="Catalog"table="e_catalog"> <idname="catalogid"column="catalogid"type="integer"> <generatorclass="identity"></generator> </id><--此處省略屬性配置--> </class></hibernate-mapping>3.2Struts介紹Struts是一個(gè)基于SunJ2EE平臺的MVC框架,主要是采用Servlet和JSP技術(shù)來實(shí)現(xiàn)的.由于Struts能充分滿足應(yīng)用開發(fā)的需求,簡單易用,敏捷迅速,在過去的這段時(shí)間里.Struts把Servlet、JSP、自定義標(biāo)簽和信息資源(messageresources)整合到一個(gè)統(tǒng)一的框架中,開發(fā)人員利用其進(jìn)行開發(fā)時(shí)不用再自己編碼實(shí)現(xiàn)全套MVC模式,極大的節(jié)省了時(shí)間,所以說Struts是一個(gè)非常不錯(cuò)的應(yīng)用框架.Struts主要有三個(gè)部分組成,首先是支持MVC模式的的三個(gè)部分,其次是關(guān)于Struts的配置文件struts-config.xml。下面來介紹下他們。3.2.1模型(Model)本質(zhì)上來說在Struts中Model是一個(gè)Action類(這個(gè)會在后面詳細(xì)討論),開發(fā)者通過其實(shí)現(xiàn)商業(yè)邏輯,同時(shí)用戶請求通過控制器(Controller)向Action的轉(zhuǎn)發(fā)過程是基于由struts-config.xml文件描述的配置信息的.3.2.2視圖(View)View是由與控制器Servlet配合工作的一整套JSP定制標(biāo)簽庫構(gòu)成,利用她們我們可以快速建立應(yīng)用系統(tǒng)的界面.3.2.3控制器(Controller)本質(zhì)上是一個(gè)Servlet,將客戶端請求轉(zhuǎn)發(fā)到相應(yīng)的Action類.struts-config.xml配置文件是整個(gè)框架的主心骨.web.xml文件定義了一個(gè)請求到來應(yīng)向何處轉(zhuǎn)發(fā)后,后面的工作就全權(quán)由struts-config.xml管理控制了.可以說struts-config.xml就是整個(gè)Struts框架的核心,只有它清楚所有請求與動作的映射關(guān)系。如今的應(yīng)用系統(tǒng),XML形式的配置文件越來越多,如果整個(gè)系統(tǒng)只使用一個(gè)這樣的配置文件的話,那么保持整個(gè)系統(tǒng)的模塊化和可維護(hù)性都非常的輕松.使用配置文件來描述請求-動作的控制過程和相互關(guān)系,而不是在代碼中將對象之間的調(diào)用關(guān)系寫死,那么當(dāng)應(yīng)用系統(tǒng)有變動時(shí),我們只用修改配置文件就行了,而不是再重新編譯發(fā)布程序了.Controller通過struts-config.xml文件的配置信息確定當(dāng)有請求時(shí)應(yīng)該調(diào)用那個(gè)對象來處理,從效率的角度出發(fā),這些信息都是在系統(tǒng)啟動時(shí)讀入并存在存中的.4需求分析4.1系統(tǒng)主要功能詳細(xì)描述()用戶可以注冊,登錄。()登錄用戶可以查看用戶資料,修改密碼,添加收貨人,刪除收貨人。(1)所有用戶可以瀏覽商品列表與每個(gè)商品的詳細(xì)信息。(2)所有用戶可以進(jìn)行查詢本站所擁有的自己需要的物品。(3)所有用戶可以查看用戶留言列表,登錄用戶可以留言。(3)登錄用戶可以進(jìn)行購物,并會像超市的購物車一樣放入自己需要的物品以便后面的下單。()登錄用戶可以對自己的購物車進(jìn)行相關(guān)操作。(4)登錄用戶可以在進(jìn)行購物后,進(jìn)行下單,可以對定單進(jìn)行處理。(5)用戶只能查看自己已經(jīng)有的定單,并能看到每個(gè)定單的詳細(xì)信息。(6)后臺管理員可以對用戶進(jìn)行添加,刪除,修改和查詢操作。(6)后臺管理員可以對商品進(jìn)行添加,刪除,修改和查詢操作。(7)后臺管理員可以查看所有的用戶對應(yīng)的定單。并能對每個(gè)定單進(jìn)行刪除操作。(6)后臺管理員可以對用戶留言進(jìn)行刪除操作。4.2系統(tǒng)角色與其功能分析系統(tǒng)主要用戶有三類:游客,登陸用戶,管理員。游客主要可以用的功能是:查看所有商品,搜索商品,查看商品詳細(xì)信息,查看用戶留言列表。登錄用戶主要可以用的功能:查看修改自己的資料,查看所有商品,搜索商品,查看商品詳細(xì)信息,購買商品,下定單,查看定單,查看用戶留言列表,留言。管理員主要功能:操作普通管理員信息,操作用戶信息,操作產(chǎn)品信息,操作定單信息,操作用戶留言信息。5系統(tǒng)總體設(shè)計(jì)網(wǎng)上書城系統(tǒng)是基于B/S架構(gòu)。實(shí)現(xiàn)網(wǎng)上售書的電子商務(wù)。系統(tǒng)使用Java語言開發(fā),利用到Hibernate和Struts等開源框架,整個(gè)系統(tǒng)分成多層,有效實(shí)現(xiàn)了系統(tǒng)各部分的低偶合.整個(gè)系統(tǒng)主要有:表現(xiàn)層.業(yè)務(wù)層.數(shù)據(jù)訪問層。利用軟件分層把系統(tǒng)偶合度降低。在數(shù)據(jù)訪問層,使用接口和和實(shí)現(xiàn)分離。上層的服務(wù)只依賴于底層的接口,底層的實(shí)現(xiàn)方式改變不會影響到上層的服務(wù)。這樣就會最大程度的降低了軟件各部分之間的偶合。便于以后修改底層的實(shí)現(xiàn)。在分層的基礎(chǔ)上。有將軟件分模塊,從而使系統(tǒng)橫向上面分模塊,縱向上面分層次。整個(gè)軟件的層次是:表現(xiàn)層業(yè)務(wù)層數(shù)據(jù)訪問層DB整個(gè)軟件根據(jù)系統(tǒng)需求分析,可得出系統(tǒng)兩種用戶的業(yè)務(wù)流程圖。前臺用戶操作業(yè)務(wù)流程為:開始瀏覽用戶留言信息覽商品列表登錄瀏覽商品詳細(xì)信息登錄NN登錄YY添加商品進(jìn)購物車用戶留言購物車生成定單退出結(jié)束在用戶業(yè)務(wù)流里面,首先用戶連接到主界面,主界面顯示所有商品,并且提供商品的搜索服務(wù),在主界面可以直接連接到用戶留言列表界面,在主界面還可以連接到用戶登錄界面。用戶在主界面可以瀏覽所有的商品,也可以查看商品的詳細(xì)信息,在用戶主界面和商品詳細(xì)信息界面,用戶可以將商品添加進(jìn)購物車,此操作只有登錄用戶可以使用,非登錄用戶選自添加進(jìn)購物車會被攔截到未登錄界面。用戶在留言主界面可以進(jìn)行留言。非登錄用戶不能留言。用戶可以點(diǎn)擊購物車,進(jìn)入購物車界面,在購物車界面,用戶可以對購物車?yán)锏纳唐愤M(jìn)行刪除操作,也可以將購物車中的商品修改數(shù)量,還可以清空購物車。也可以在購物車界面選擇繼續(xù)購物,連接到主界面繼續(xù)選擇商品。用戶還可以在購物車界面進(jìn)行下單操作。將購物車?yán)锏纳唐飞啥▎?。生成定單后,用戶可以查看自己的定單。后臺管理員的業(yè)務(wù)流程為:開始登錄管理員主界面有權(quán)限N權(quán)限出錯(cuò)頁面Y管理員管理用戶管理產(chǎn)品管理定單管理留言管理退出結(jié)束在后臺中,管理員可以直接進(jìn)入管理員入口登錄管理員管理界面。在管理員管理的主界面顯示的是管理員所有的操作。管理員可直接選擇操作進(jìn)入不同的管理界面,對管理員管理主要有超級管理員來實(shí)現(xiàn),其他管理員沒有此操作。用戶管理界面直接顯示所有用戶的列表,在用戶管理界面。管理員可以選擇添加和刪除用戶,在產(chǎn)品管理界面,管理員可以添加和刪除產(chǎn)品。定單管理界面。管理員可以刪除定單。留言管理界面。管理員可以刪除留言。5.1DB層設(shè)計(jì)DB主要是保存實(shí)體與實(shí)體之間關(guān)系的,這里只些關(guān)于此次系統(tǒng)中作者設(shè)計(jì)的幾個(gè)模塊的E-R圖:4.4.1User于Order關(guān)系圖createtimeorderItemsorderstatepayinfototalpriceorderiduseruserItemOrdernhave1UserUseridusernameCreatetimestateordersrolePassworduserItems用戶與定單之間是一對多的關(guān)系,每個(gè)用戶可以同時(shí)有多個(gè)定單,每個(gè)定單卻只能屬于一個(gè)用戶。這樣在定單的實(shí)體類中就會有一個(gè)對用戶的引用,在用戶的實(shí)體類中就會有一個(gè)集合用來保存用戶當(dāng)前所有的定單。在數(shù)據(jù)庫中,用戶和定單是兩表,定單表中的外鍵是用戶表中的主鍵,在這里要注意一點(diǎn)。在查找用戶的時(shí)候會同時(shí)把用戶所有的定單都拿到,所以要在用戶實(shí)體類的hibernate配置文件中將定單集合的延遲加載設(shè)置為false;這樣就能在查出的用戶中直接拿到用戶所有的定單.4.4.2Order與OrderItemcreatetimeorderItemsorderstatepayinfototalpriceorderiduseruserItemOrder1 OrderbynOrderItem OrderOrder_item_id product quality定單與定單條目之間是一對多的關(guān)系,每個(gè)定單可以同時(shí)有多個(gè)定單條目,每個(gè)定單條目卻只能屬于一個(gè)定單。這樣在定單條目的實(shí)體類中就會有一個(gè)對定單的引用,在定單的實(shí)體類中就會有一個(gè)集合用來保存用戶當(dāng)前所有的定單條目。在數(shù)據(jù)庫中,定單和定單條目是兩表,定單條目表中的外鍵是定單表中的主鍵,在這里要注意一點(diǎn)。在查找定單的時(shí)候要同時(shí)把定單所有的定單條目都拿到,所以要在定單實(shí)體類的hibernate配置文件中將定單條目集合的延遲加載設(shè)置為false;這樣就能在查出的定單時(shí)直接拿到定單所有的定單條目.4.4.3OrderItem與ProductnameorderItemspriceothers...Product1 hasnOrderItem OrderOrder_item_id product quality產(chǎn)品與定單條目之間是一對多的關(guān)系,每個(gè)定單條目只包含一中產(chǎn)品。每個(gè)產(chǎn)品對應(yīng)多個(gè)定單條目,這里多個(gè)定單條目不是屬于同一個(gè)定單。這樣在定單條目大實(shí)體類中就會有喲個(gè)屬性用來保存產(chǎn)品的引用,產(chǎn)品中也相應(yīng)的有一個(gè)結(jié)合來保存所有包含此產(chǎn)品的定單條目。在數(shù)據(jù)庫中,產(chǎn)品和定單條目是兩表,定單條目表中的外鍵是產(chǎn)品表中的主鍵。這里不需要在得到產(chǎn)品的時(shí)候就拿到定單條目的集合,所以使用默認(rèn)的hibernate配置就可以了。4.4.4Order與UserItemcreatetimeorderItemsorderstatepayinfototalpriceorderiduseruserItemOrdernTo1UserItemuser_item_iduserItem_nameordersitem_address收貨人與定單之間是一對多的關(guān)系,每個(gè)收貨人可以同時(shí)有多個(gè)定單,每個(gè)定單卻只能屬于一個(gè)收貨人。這樣在定單的實(shí)體類中就會有一個(gè)對收貨人的引用,在收貨人的實(shí)體類中就會有一個(gè)集合用來保存用戶當(dāng)前所有的定單。在數(shù)據(jù)庫中,收貨人和定單是兩表,定單表中的外鍵是定收貨人表中的主鍵。5.2DAO層設(shè)計(jì)在數(shù)據(jù)訪問層,將全部使用接口和實(shí)現(xiàn)分離,這樣便于以后更換數(shù)據(jù)庫等工作。在這層中,主要是對數(shù)據(jù)庫的表操作。我們利用的是Hibernate技術(shù)。這是一種ORM技術(shù),可以將關(guān)系數(shù)據(jù)庫中存的每條記錄都對應(yīng)成一個(gè)實(shí)體,由于所有數(shù)據(jù)庫中的表都只通過DAO來訪問,所以在DAO中要有每個(gè)表的入口。因此,要為每和實(shí)體類對應(yīng)一個(gè)DAO。5.3SERVICE層設(shè)計(jì)Service主要是系統(tǒng)的業(yè)務(wù)邏輯,也就是系統(tǒng)的實(shí)際的業(yè)務(wù)邏輯活動,是系統(tǒng)的真正的核心,這一層主要都是一些業(yè)務(wù)。同時(shí)這一層中應(yīng)該加上事務(wù),因?yàn)?,對?shù)據(jù)庫的操作可能出現(xiàn)異常,而Service完全依賴于DAO,所以當(dāng)數(shù)據(jù)庫出現(xiàn)異常后,這里可以對未完成的事務(wù)進(jìn)行回滾。5.4WEB層設(shè)計(jì)WEB層主要是用來接收用戶請求,并通過請求的不同選擇相應(yīng)的服務(wù)來處理請求,再把結(jié)果表現(xiàn)給用戶。這樣在WEB中把請求,服務(wù)和表現(xiàn)分開。我們在Java的開源框架中選擇Struts來做WEB層,我們首先利用Action來接收請求,在Action中有不同的方法來處理不同的請求,再在Action中調(diào)用相應(yīng)的Service來處理請求。對執(zhí)行結(jié)果進(jìn)行判斷后,選擇不同的JSP來進(jìn)行表現(xiàn)。Struts中這種開發(fā)我們成為MVC模式,下面是MVC模式的圖解,以與在本系統(tǒng)中的具體作用: C控制層 ActionnewRequestreturnM模型層瀏覽器forward/redirectResponseV視圖層Jsp5.4.1控制器(Controller)Controller是這個(gè)框架中扮演“交通警察”的角色,當(dāng)客戶端與服務(wù)器有交互動作時(shí),都由她來控制.Controller將請求封包并轉(zhuǎn)發(fā)到框架中相應(yīng)的對象,這些對象可能是一個(gè)JSP頁面或一個(gè)Action.Controller在web.xml中設(shè)置為org.apache.struts.action.ActionServlet的一個(gè)實(shí)例。在一個(gè)完整的控制過程中,也就是處理一個(gè)請求時(shí),在控制過程之初,這個(gè)Servlet會從求情的路徑中解析出具體的Struts的路徑,再從配置文件struts-config.xml中獲取請求與控制動作向?qū)?yīng)的配置信息,Controller通過這些配置信息來決定請求該往何處轉(zhuǎn)發(fā),而這些Action在接收到轉(zhuǎn)發(fā)來的請求后,再實(shí)現(xiàn)真正的商業(yè)邏輯。5.4.2模型(Model)所謂Model就是在對用戶請求的整個(gè)控制過程中,真正處理用戶請求并保存處理結(jié)果的對象,在整個(gè)過程中,我們一般利用JavaBean來把一些信息保存起來以便在各個(gè)對象之間傳遞.因?yàn)樵诳蚣苤?,Model對象是真正處理商業(yè)邏輯功能的對象,因此也就是框架中應(yīng)用需現(xiàn)相關(guān)性最大的部分.在Struts的實(shí)現(xiàn)里,Model的具體表現(xiàn)形式就是ActionForm對象和與其對應(yīng)的Action對象了.對用戶提交表單的數(shù)據(jù)進(jìn)行校驗(yàn),甚至對數(shù)據(jù)進(jìn)行預(yù)處理都能在ActionForm中完成.通常的應(yīng)用中,一般是一個(gè)Model對象和一個(gè)請求頁面對應(yīng)的關(guān)系,但也可以一個(gè)Model對象對應(yīng)多個(gè)頁面請求.如果struts-config.xml配置文件沒有指定一個(gè)Model對象對應(yīng)的Action,那么控制器將直接把(通過Model對象完成數(shù)據(jù)封裝的)請求轉(zhuǎn)到一個(gè)View對象.5.4.3表現(xiàn)(View)View只是用來向用戶表現(xiàn)信息。不進(jìn)行業(yè)務(wù)處理。這里主要是一些JSP頁面5.5系統(tǒng)數(shù)據(jù)流圖(產(chǎn)品模塊,定單模塊,購物車模塊)登陸訪問數(shù)據(jù)庫 用戶和管理員 購物系統(tǒng) 數(shù)據(jù)庫中的 顯示信息 返回結(jié)果 各種資源 0層圖數(shù)據(jù)庫中的定單定單模塊表與定單條目表用戶購物車模塊數(shù)據(jù)庫中的產(chǎn)品模塊產(chǎn)品表1層圖數(shù)據(jù)庫中的定單定單管理表與定單條目表管理員數(shù)據(jù)庫中的產(chǎn)品管理產(chǎn)品表1層圖6詳細(xì)設(shè)計(jì)6.1系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)6.1.1Product表Product表是用來存儲產(chǎn)品信息的.應(yīng)有的字段是:Productidnumbernamevarcharisbnvarcharprintervarcharauthorvarcharpricenumberbooknumvarchardescriptionvarcharimagepathvarcharcetatetimedatestatenumbercatalog(fid)numberProduct表的建表語句為:CREATETABLEe_product(productidint(10)NOTNULLauto_increment,namevarchar(50)NOTNULL,isbnvarchar(100)defaultNULL,printervarchar(50)defaultNULL,authorvarchar(50)defaultNULL,pricedoubledefaultNULL,booknumint(4)defaultNULL,catalogidint(10)NOTNULL,descriptionvarchar(1000)defaultNULL,imagepathvarchar(100)defaultNULL,createtimedatedefaultNULL,stateint(2)default'0',PRIMARYKEY(productid),KEYcatalogid(catalogid))DEFAULTCHARACTERSETutf8;6.12Order表Order表主要用來存儲定單的一些信息.主要有下面一些字段:orderidnumbertotalpricenumberorderstatenumberpayinfonumbercreatetimedateusernumberuserItemnumberOrder對應(yīng)表的建表語句為:CREATETABLEe_order(orderidint(11)NOTNULLauto_increment,totalpricedoubledefault'0',orderstateint(11)default'0',payinfoint(11)defaultNULL,createtimedatedefaultNULL,useridint(11)NOTNULL,user_item_idint(11)NOTNULL,PRIMARYKEY(orderid),KEYuser_item_id(user_item_id),KEYuserid(userid))DEFAULTCHARACTERSETutf8;6.1.3OrderItem表OrderItem表主要記錄定單條目信息,有兩個(gè)外鍵分別是Orderid和productid,具體字段為:Order_item_idnumberqualitynumberproductnumberordernumberOrderItem對應(yīng)表的建表語句是:CREATETABLEe_order_item(order_item_idint(11)NOTNULLauto_increment,productidint(11)NOTNULL,orderidint(11)NOTNULL,qualityint(11)NOTNULL,PRIMARYKEY(order_item_id),KEYproductid(productid),KEYorderid(orderid))DEFAULTCHARACTERSETutf8;6.2系統(tǒng)模塊的劃分6.2.1產(chǎn)品模塊主要子模塊產(chǎn)品模塊主要子模塊有:(1).增加產(chǎn)品;(2).刪除產(chǎn)品;(3).修改產(chǎn)品(4).查看產(chǎn)品列表;(5).查看產(chǎn)品詳細(xì)信息6.2.2購物車模塊主要子模塊購物車模塊主要子模塊有:(1).生成購物車;(2).刪除購物車;(3).刪除購物車中的商品;(4).清空購物車中的商品;(5).修改購物車中商品數(shù)量;(6).向購物車中添加商品;6.2.3定單模塊主要子模塊定單模塊主要子模塊有:(1).創(chuàng)建定單;(2).刪除定單;(3).查看定單列表;(4).查看定單中的詳細(xì)條目;6.3系統(tǒng)模塊的具體實(shí)現(xiàn)6.3.1產(chǎn)品模塊主要子模塊增加產(chǎn)品添加產(chǎn)品只能有管理員來操作,管理員由瀏覽器輸入產(chǎn)品信息,通過Request的參數(shù)形式,傳到服務(wù)器端,瀏覽器端和服務(wù)器端主要代碼有:JSP中接收用戶輸入的代碼段是:<formaction="<%=request.getContextPath()%>/admin/addProduct.do"method="post"> <tablecellpadding=3cellspacing=1align=centerclass=tableborder1> <tr> <tdclass=tablebody1valign=middlealign=centerwidth="20%">[書 名] </td> <tdclass=tablebody1valign=middlewidth="80%"> <inputtype="text"name="name"/><fontcolor="#FF0000"> *</font> </td> </tr> <--此處省略了部分JSP代碼--> <tr> <tdclass=tablebody2valign=middlealign=centercolspan="2"> <inputtype="submit"name="Submit"value="提交"/> <inputtype="button"value="返 回"class="button" onclick="javascript:history.go(-1)"/> </td> </tr> </table></form>Action中主要用來接收用戶信息來進(jìn)行業(yè)務(wù)操作,主要代碼為:publicActionForwardaddProduct(ActionMappingmapping,ActionFormform, ServletRequestrequest,ServletResponseresponse) throwsException{ ActionForwardforward=mapping.findForward("error"); try{ Stringname=request.getParameter("name"); //省略部分定義幾個(gè)用來接收用戶輸入的變量 Catalogcatalog=productService.getCatalog(catalogid); Productproduct=newProduct(); product.setCatalog(catalog); //省略部分將接收到的信息包裝成一個(gè)Product; product.setState(0); productService.addProduct(product);//將Product保存到DB中 Collectionproducts=productService.getProducts(); request.getSession().setAttribute("products",products); //查找產(chǎn)品生成集合.再將集合放到Session中; intsize=products.size(); request.setAttribute("size",size); request.setAttribute("products",products); forward=mapping.findForward("success"); }catch(Exceptione){ e.printStackTrace(); } returnforward; } 在此Action中,調(diào)用了服務(wù)層的ProductService的addProduct()方法;addProduct()方法有調(diào)用DAO層的addProduct()方法;在Service層中加了事物處理;在DAO層有對數(shù)據(jù)庫的操作;對數(shù)據(jù)庫的操作如下:publicvoidaddProduct(Productproduct){ Sessionsession=null; try{ session=HbnUtil.getSession(); session.save(product); }catch(Exceptionex){ thrownewStoreException(ex); }} 這里直接對數(shù)據(jù)庫操作,直接調(diào)用session的save()方法;刪除產(chǎn)品;刪除產(chǎn)品只能由管理員倆進(jìn)行,管理員選擇要刪除的產(chǎn)品,然后由request參數(shù)的形式將productid傳給服務(wù)器,在服務(wù)器端將產(chǎn)品刪除,JSP主要代碼有:<inputtype="checkbox"name="checkbox"value="${ductid}"/>在服務(wù)器端,Action接收到的chochbox的String數(shù)組,利用循環(huán)將數(shù)組中的productid拿到并且根據(jù)productid來刪除product,代碼為:String[]productIds=request.getParameterValues("checkbox");if(productIds==null) returnforward=mapping.findForward("success");for(inti=0;i<productIds.length;i++){ IntegerproductId=Integer.parseInt(productIds[i]); productService.removeProduct(productId);}此處仍然調(diào)用service中的removeProduct()方法來處理數(shù)據(jù);在removeProduct()中又調(diào)用拉DAO中的deleteProduct()方法;DAO中的主要實(shí)現(xiàn)代碼為:Sessionsession=null;try{ session=HbnUtil.getSession(); session.delete(product);}catch(Exceptionex){ thrownewStoreException(ex);}這里直接調(diào)用了session.delete()方法;修改產(chǎn)品修改產(chǎn)品只能由管理員倆進(jìn)行,管理員選擇要修改的產(chǎn)品,然后由get請求參數(shù)的形式將productid傳給服務(wù)器,在服務(wù)器端將產(chǎn)品修改,JSP主要代碼有:<td><ahref="<%=request.getContextPath()%>/admin/getProduct.do?productId=${ductid}">修改</a></td>//這里就是通過這個(gè)連接來修改產(chǎn)品的;在服務(wù)器端接收到get請求后,拿到productid在從數(shù)據(jù)庫里查出此product放入request中,轉(zhuǎn)向修改頁面,修改各屬性后,在通過Form表單的形式將參數(shù)傳給服務(wù)器,在服務(wù)器端,先拿到各屬性值,在通過productid在數(shù)據(jù)庫中將product查出,再將得到的各屬性放到查出的product中.在將product保存入數(shù)據(jù)庫.這里Action中的代碼斷為:Stringname=request.getParameter("name");intcatalogid=Integer.valueOf(request.getParameter("catalog"));//上面省略部分為獲得請求中參數(shù)的過程;Catalogcatalog=productService.getCatalog(catalogid);IntegerproductId=Integer.valueOf(request.getParameter("productId"));Productproduct=productService.getProductById(productId);//通過productid來從數(shù)據(jù)庫中得到product;product.setCatalog(catalog);product.setImagepath(imagepath);//上面省略將屬性值放入product中的部分代碼;productService.modifyProduct(product);//將product放入數(shù)據(jù)庫;查看產(chǎn)品列表;查看產(chǎn)品列表是所有的用戶都可以作的一向操作;用戶在登陸首頁后就可看到所有產(chǎn)品的列表,此請求先對數(shù)據(jù)庫進(jìn)行查詢;將查詢到的產(chǎn)品生成一個(gè)collect,在將collect傳給JSP去進(jìn)行表現(xiàn).這里主要有一個(gè)實(shí)現(xiàn)分頁查詢的方法:intpage=1;try{//第一次因?yàn)闆]有設(shè)置page屬性,所以會拋個(gè)空指針異常,捕獲之后將page設(shè)置為1; page=Integer.parseInt(request.getParameter("page"));}catch(Exceptionex){ page=1;}PageHelperpageHelper=newPageHelper();//這里PageHelper為一個(gè)輔助pageHelper.setPageSize(Globals.PAGE_SIZE);//類用來實(shí)現(xiàn)分頁.pageHelper.setCurrentPage(page);pageHelper.setMaxCount(productService.getProudctCount());Collection<Product>products=productService.getProductsByPages(page);request.setAttribute("navigation",pageHelper.showNavigation("listAll"));request.setAttribute("products",products);在此過程的DAO中用到了hibernate的分頁查詢;List<Product>products=newArrayList<Product>();Sessionsession=null;try{session=HbnUtil.getSession(); products=session.createQuery( "fromProductporderbyductid") .setFirstResult((1)*Globals.PAGE_SIZE) .setMaxResults(Globals.PAGE_SIZE) .list(); returnproducts;}catch(Exceptionex){ thrownewStoreException(ex);}這里首先設(shè)置了從什么地方開始放到結(jié)果集中,在設(shè)置了結(jié)果集的長度.從而實(shí)現(xiàn)了分頁查詢;查看產(chǎn)品詳細(xì)信息;此操作也是用戶可以操作.而且不需要登陸的情況下就可以查看了,用戶只需要在首頁點(diǎn)下查看詳細(xì)信息的超連接,就可以看到產(chǎn)品的詳細(xì)信息了.在JSP中有這樣的一個(gè)連接:<ahref='<%=request.getContextPath()%>/page/product.do?method=listDetail&productid=${ductid}'>${}</a>在服務(wù)器接收到這個(gè)請求后從數(shù)據(jù)庫中把product查出來,在將product放進(jìn)request中,在將request轉(zhuǎn)向顯示產(chǎn)品詳細(xì)信息的頁面.從而在顯示詳細(xì)信息的頁面將產(chǎn)品的所有信息顯示出來.6.3.2購物車模塊主要子模塊生成購物車;此過程有兩個(gè)地方要用到.第一是在第會話空間一創(chuàng)建的時(shí)候就創(chuàng)建一個(gè)購物車放到session空間中.此動作是有一個(gè)監(jiān)聽器來實(shí)現(xiàn)的.具體實(shí)現(xiàn)過程是:publicvoidsessionCreated(SessionEventarg0){ Sessionsession=arg0.getSession(); Cartcart=newCart(); session.setAttribute("cart",cart); }這個(gè)方法在session被創(chuàng)建時(shí)自動執(zhí)行,這個(gè)方法是將創(chuàng)建的session中放入一個(gè)空的購物車.第二個(gè)用到的地方是在清空購物車后,再加商品進(jìn)購物車時(shí),session中沒有Cart,從而創(chuàng)建一個(gè)新的購物車.此過程在Action中實(shí)現(xiàn):Cartcart=(Cart)session.getAttribute("cart");if(cart==null){ cart=newCart();}刪除購物車;在session被銷毀的時(shí)候,既用戶推出時(shí),或者session過期時(shí)候,有監(jiān)聽器自動實(shí)現(xiàn).publicvoidsessionDestroyed(SessionEventarg0){Sessionsession=arg0.getSession();Cartcart=(Cart)session.getAttribute("cart");session.removeAttribute("cart");cart=null;Useruser=(User)session.getAttribute("user");session.removeAttribute("user");user=null;}刪除購物車中的商品;此操作需要登陸用戶才可操作,登陸用戶在對購物車主界面中.點(diǎn)擊刪除按鈕.<inputtype="button"value="刪除"class="button" onclick="javascript:window.location='<%=request.getContextPath()%>/biz/cart.do?method=remove&productid=${ductid}';">在服務(wù)器端拿到要刪除的商品的prodictid,進(jìn)行刪除;此操作不進(jìn)行數(shù)據(jù)庫的操作.所以不用調(diào)DAO;在Action中直接對Cart對象操作;Action中代碼片段為:Sessionsession=request.getSession();Integerproductid=Integer.parseInt(request.getParameter("productid"));Cartcart=(Cart)session.getAttribute("cart");cart.removeCart(productid);session.setAttribute("cart",cart);returnmapping.findForward("removecartsuccess");這里先拿到購物車,再通過productid來從購物車中刪除商品.在將刪除后的購物車從新放到session中;通過productid刪除商品是這樣來進(jìn)行的:publicvoidremoveCart(Integerid){ ducts.remove(id);}這里的products是一個(gè)以productid為key的Map;清空購物車中的商品;清空購物車操作在Action中是直接將購物車刪除來進(jìn)行清空.在Action中代碼片段為:Sessionsession=request.getSession();Cartcart=(Cart)session.getAttribute("cart");session.removeAttribute("cart");returnmapping.findForward("success");這里直接調(diào)用session的removeAttribute()方法實(shí)現(xiàn)刪除購物車.修改購物車中商品數(shù)量;修改購物車中商品的數(shù)量是在JSP中利用from表單的隱藏域來實(shí)現(xiàn)的.在隱藏域中定義了修改后商品的數(shù)量.定義拉方法名,定義了productid;代碼如下:<formmethod="post" action="<%=request.getContextPath()%>/biz/cart.do"name="f1"> <inputtype="hidden"name="productid"value="${ductid}"> <inputtype="hidden"name="number"value="${carproducts.num}"> <inputtype="hidden"name="method"value="modify"> <tdclass=tablebody1valign=middlealign=centerwidth=""> <inputtype="text"name="num"value="${carproducts.num}"size="4" onblur="javascript:if(this.value<1){alert('對不起,產(chǎn)品數(shù)量不能小于1');this.focus();}else{number.value=this.value;}"/> </td> <td> <inputtype="submit"value="保存修改"class="button"> </td></form>這里在進(jìn)行了javascript攔截; 通過隱藏域中的參數(shù),Action就可以修改商品的數(shù)量了;Integerproductid=Integer.parseInt(request.getParameter("productid"));intnum=Integer.parseInt(request.getParameter("num"));Sessionsession=request.getSession();Cartcart=(Cart)session.getAttribute("cart");cart.modifyNum(productid,num);此處先將productid拿到,在將商品數(shù)量拿到,在修改購物車中的商品數(shù)量.此處用的方法是:modufyN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年大學(xué)輕工紡織食品專業(yè)大學(xué)物理下冊期末考試試題A卷-含答案
- 石河子大學(xué)《中學(xué)歷史課程標(biāo)準(zhǔn)與教材分析》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《遙感數(shù)字圖像處理》2023-2024學(xué)年第一學(xué)期期末試卷
- 一抹紅的詩句
- 石河子大學(xué)《習(xí)近平總書記關(guān)于教育的重要論述研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《生藥學(xué)實(shí)驗(yàn)》2021-2022學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《基礎(chǔ)素描》2023-2024學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《專業(yè)創(chuàng)新課程-嵌入式計(jì)算機(jī)產(chǎn)品案例》2023-2024學(xué)年期末試卷
- 沈陽理工大學(xué)《信號與系統(tǒng)》2021-2022學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《人工智能實(shí)例與應(yīng)用》2023-2024學(xué)年期末試卷
- 《春節(jié)的文化與習(xí)俗》課件
- 手機(jī)棋牌平臺網(wǎng)絡(luò)游戲商業(yè)計(jì)劃書
- 學(xué)校體育與社區(qū)體育融合發(fā)展的研究
- 醫(yī)療機(jī)構(gòu)高警示藥品風(fēng)險(xiǎn)管理規(guī)范(2023版)
- 一年級體質(zhì)健康數(shù)據(jù)
- 八年級物理(上)期中考試分析與教學(xué)反思
- 國家開放大學(xué)《財(cái)政與金融(農(nóng))》形考任務(wù)1-4參考答案
- 2023銀行網(wǎng)點(diǎn)年度工作總結(jié)
- 工廠反騷擾虐待強(qiáng)迫歧視政策
- 計(jì)算機(jī)教室(微機(jī)室)學(xué)生上機(jī)使用記錄
- FAI首件檢驗(yàn)報(bào)告
評論
0/150
提交評論