基于j2ee架構(gòu)的電子商務(wù)系統(tǒng)畢業(yè)設(shè)計(jì)_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設(shè)計(jì)論文</b></p><p>  基于J2EE架構(gòu)的電子商務(wù)系統(tǒng)設(shè)計(jì)</p><p><b>  教學(xué)單位: </b></p><p><b>  專業(yè)名稱: </b></p><p><b>  學(xué) 號: </b&g

2、t;</p><p><b>  學(xué)生姓名: </b></p><p><b>  指導(dǎo)教師: </b></p><p><b>  指導(dǎo)單位: </b></p><p><b>  完成時(shí)間: </b></p><p>  基于J

3、2EE架構(gòu)的電子商務(wù)系統(tǒng)設(shè)計(jì)</p><p>  【摘要】 IBM公司對未來世界有句預(yù)言----“要么電子商務(wù),要么無商可務(wù)!”。隨著經(jīng)濟(jì)全球化的發(fā)展,網(wǎng)絡(luò)影響著人們生活的方方面面?,F(xiàn)如今,電子商務(wù)風(fēng)暴越刮越烈,人們越來越傾向于網(wǎng)上購物,足不出戶就可以在網(wǎng)上買到各種各樣的商品。所以,如何建立適合公司的電子商務(wù)系統(tǒng)成則為了許多企業(yè)家的煩惱。出于此現(xiàn)狀,本文主要研究了如何建立一個(gè)網(wǎng)上購書系統(tǒng)。</p>

4、<p>  本人所設(shè)計(jì)制作的“珍書網(wǎng)”網(wǎng)上購書系統(tǒng),是建立在J2EE架構(gòu)上的,并運(yùn)用了Struts2框架,JQuery框架,Ajax技術(shù)等現(xiàn)如今熱門的技術(shù)。該系統(tǒng)主要擁有產(chǎn)品瀏覽,分類顯示,注冊登錄,購物車,下訂單五大模塊。各個(gè)模塊間相互依賴,并共同組成了一個(gè)較為完整的網(wǎng)上購書系統(tǒng)。</p><p>  【關(guān)鍵詞】 電子商務(wù),J2EE, Struts2,網(wǎng)上購書</p><p&g

5、t;  Design of E-Commerce System based on J2EE Architecture</p><p>  【Abstract】 IBM says when predicting the future world ---- “Either electronic commerce or no commercial

6、 affairs”. As the economic globalization is developing, the computer network is affecting every aspect of human life. Today, e-commerce storm based on computer network is becoming stronger and stronger. More and more peo

7、ple tend to do online shopping, and they can buy any kinds of commodities via the network without going out of their houses. Therefore, how to establish an e-commerce system su</p><p>  【Key Words】 E-comme

8、rce,J2EE,Struts2,Online book shopping</p><p><b>  目錄</b></p><p><b>  第1章 緒論1</b></p><p><b>  1.1項(xiàng)目背景1</b></p><p>  1.1.1電子商務(wù)的定義1&

9、lt;/p><p>  1.1.2創(chuàng)建電子商務(wù)網(wǎng)站的必要性2</p><p>  1.2 需求分析2</p><p>  1.2.1 項(xiàng)目概況2</p><p>  第2章 技術(shù)背景4</p><p><b>  2.1框架簡介4</b></p><p>  2.2

10、J2EE 框架4</p><p>  2.3 Struts2框架5</p><p>  2.4 OGNL表達(dá)式6</p><p>  2.5 JQuery 框架7</p><p>  2.6 AJAX技術(shù)7</p><p>  第3章 系統(tǒng)設(shè)計(jì)9</p><p><b> 

11、 3.1系統(tǒng)設(shè)計(jì)9</b></p><p>  3.1.1系統(tǒng)架構(gòu)9</p><p>  3.1.2 代碼文件詳情9</p><p>  3.2數(shù)據(jù)庫設(shè)計(jì)11</p><p>  3.2.1數(shù)據(jù)庫簡介11</p><p>  3.2.2概念模型設(shè)計(jì)(E-R圖)12</p><

12、p>  第4章 系統(tǒng)實(shí)現(xiàn)14</p><p>  4.1模塊實(shí)現(xiàn)14</p><p>  4.1.1產(chǎn)品瀏覽模塊15</p><p>  4.1.2注冊登陸模塊17</p><p>  4.1.3分類顯示模塊22</p><p>  4.1.4購物車模塊23</p><p> 

13、 4.1.5訂單模塊26</p><p><b>  結(jié)論30</b></p><p><b>  參考文獻(xiàn)31</b></p><p><b>  致謝33</b></p><p><b>  圖目錄</b></p><p&g

14、t;  圖2.1 J2EE框架架構(gòu)圖5</p><p>  圖2.2 Struts2框架6</p><p>  圖2.3 Struts2流程圖7</p><p>  圖3.1 系統(tǒng)架構(gòu)圖10</p><p>  圖3.2 代碼文件12</p><p>  圖3.3數(shù)據(jù)庫ER圖13</p>&l

15、t;p>  圖4.1模塊實(shí)現(xiàn)圖15</p><p>  圖4.2產(chǎn)品瀏覽頁面16</p><p>  圖4.3產(chǎn)品瀏覽模塊16</p><p>  圖4.4登陸頁面18</p><p>  圖4.5注冊登陸模塊18</p><p>  圖4.6注冊與注冊驗(yàn)證頁面20</p><p&

16、gt;  圖4.7郵箱驗(yàn)證頁面22</p><p>  圖4.8分類顯示頁面23</p><p>  圖4.9分類顯示模塊23</p><p>  圖4.10購物車頁面24</p><p>  圖4.11購物車模塊25</p><p>  圖4.12訂單頁面27</p><p>  

17、圖4.13訂單模塊27</p><p>  圖4.13地址管理頁面28</p><p><b>  表目錄</b></p><p>  表3.1表現(xiàn)層文件及功能10</p><p>  表3.2控制層文件及功能11</p><p>  表3.3業(yè)務(wù)層文件及功能11</p>

18、<p>  表3.4持久層文件及功能11</p><p>  表3.5其他文件及功能11</p><p>  表3.6數(shù)據(jù)庫表功能13</p><p><b>  第1章 緒論</b></p><p><b>  1.1項(xiàng)目背景</b></p><p>  根

19、據(jù)中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)2009年發(fā)布的《中國網(wǎng)絡(luò)購物市場研究報(bào)告》,截至2009年6月,我國網(wǎng)購用戶規(guī)模已達(dá)8788萬,同比增加2459萬,年增長率為38.9%。值得注意的是,用戶對C2C(Customer to Customer,消費(fèi)者之間的電子商務(wù))購物網(wǎng)站。相對而言,B2C購物網(wǎng)站在產(chǎn)品品質(zhì)和服務(wù)質(zhì)量上都領(lǐng)先于C2C購物網(wǎng)站。因此,擁有自己的B2C網(wǎng)站是每個(gè)企業(yè)在當(dāng)今信息時(shí)代實(shí)現(xiàn)飛躍的一個(gè)轉(zhuǎn)折點(diǎn)。</p>

20、<p>  報(bào)告中還指出,2009年上半年有85.7%的網(wǎng)民在網(wǎng)上查詢過商品信息,但是只有26%的網(wǎng)民實(shí)現(xiàn)了網(wǎng)絡(luò)購物。這表明,我國存在著龐大的潛在網(wǎng)購用戶群體,只是進(jìn)行必要的引導(dǎo)和培養(yǎng),這部分用戶將為網(wǎng)購市場帶來廣闊的前景。IBM公司對未來世界有句預(yù)言----“要么電子商務(wù),要么無商可務(wù)!”。雖然這有些夸大其詞,但從CNNIC報(bào)告發(fā)布的數(shù)據(jù)中,我們可以清晰的意思到電子商務(wù)時(shí)代正向我們走來。</p><p

21、>  1.1.1電子商務(wù)的定義</p><p>  電子商務(wù)網(wǎng)站是利用軟、硬件基礎(chǔ)設(shè)施,通過Internet相互連接起來的,為用戶提供網(wǎng)頁服務(wù)(Web Server)、數(shù)據(jù)傳輸服務(wù)(FTP Server)、數(shù)據(jù)庫服務(wù)(Database Server)和郵件服務(wù)(Mail Server)等多種服務(wù)的信息載體。電子商務(wù)網(wǎng)站由服務(wù)器、工作站和各種網(wǎng)站設(shè)備作為技術(shù)支撐,通常以虛擬主機(jī)方式或主機(jī)托管方式存放和運(yùn)行,網(wǎng)

22、站一般擁有固定的域名。</p><p>  電子商務(wù)離不開Internet,因此,在電子商務(wù)系統(tǒng)中,商務(wù)網(wǎng)站就是最基礎(chǔ)的設(shè)施。目前,在Internet上建立商務(wù)網(wǎng)站是電子商務(wù)主要的實(shí)現(xiàn)形式。</p><p>  商務(wù)網(wǎng)站是從事電子商務(wù)活動(dòng)的基礎(chǔ)平臺(tái),是企業(yè)樹立形象、展示產(chǎn)品或服務(wù)的窗口,是實(shí)現(xiàn)現(xiàn)代化辦公的標(biāo)志,是商務(wù)活動(dòng)中交易雙方信息交匯與傳遞的重要渠道,也是企業(yè)與用戶進(jìn)行交互的界面。利用

23、Internet、Web網(wǎng)站和手機(jī)網(wǎng)絡(luò)等現(xiàn)代信息工具實(shí)現(xiàn)相關(guān)業(yè)務(wù)是電子商務(wù)企業(yè)的基本特征。</p><p>  1.1.2創(chuàng)建電子商務(wù)網(wǎng)站的必要性</p><p>  (1) 用戶數(shù)量龐大,蘊(yùn)涵無數(shù)商機(jī)</p><p>  全世界現(xiàn)在有數(shù)以億計(jì)的用戶接入互聯(lián)網(wǎng)。據(jù)專家統(tǒng)計(jì),到2010年底電子商務(wù)規(guī)??蛇_(dá)5700億,比2009年增長一倍。另一個(gè)快速增長的電子商務(wù)網(wǎng)站發(fā)

24、布平臺(tái)----手機(jī)網(wǎng)絡(luò)的發(fā)展也很快。截至2009年6月底,中國手機(jī)上網(wǎng)用戶已達(dá)到1.554億。</p><p>  (2) 提供商業(yè)信息,及時(shí)更新變化</p><p>  利用網(wǎng)絡(luò)來建立黃頁廣告,能夠更加及時(shí)地提供企業(yè)的商業(yè)信息,并隨時(shí)提供最新的商業(yè)資訊。</p><p>  (3) 加強(qiáng)與客戶的聯(lián)系,提供優(yōu)質(zhì)的服務(wù)</p><p>  通過

25、構(gòu)建商務(wù)網(wǎng)站,企業(yè)可以在網(wǎng)頁上每天24小時(shí)向成千上萬的人提供聯(lián)系與溝通的渠道,任何人在任何時(shí)間都可以利用這個(gè)渠道。當(dāng)今的商務(wù)過程更注重為客戶提供優(yōu)質(zhì)的服務(wù),在網(wǎng)站上可以采用更多、更便捷的途徑為客戶提供各種服務(wù)。</p><p>  (4) 加快新產(chǎn)品的發(fā)布周期,及時(shí)反饋用戶信息</p><p>  利用網(wǎng)絡(luò),新產(chǎn)品和新服務(wù)可以迅速發(fā)布到全球范圍,其成本低廉。通過增加一個(gè)新項(xiàng)目來更新網(wǎng)頁所花

26、費(fèi)的費(fèi)用只是印刷一本新產(chǎn)品目錄的零頭。</p><p><b>  1.2 需求分析</b></p><p>  1.2.1 項(xiàng)目概況</p><p>  “珍書網(wǎng)”電子商務(wù)系統(tǒng)主要包含有五大模塊,分別是:產(chǎn)品瀏覽,注冊登陸,分類顯示,購物車和訂單模塊。</p><p>  本系統(tǒng)的頁面顯示是基于頁面框架的,主要使用CS

27、S+DIV的布局方式。它的作用是把一個(gè)完整的頁面分割成幾個(gè)不同的區(qū)域。這樣做的好處是,某些所有頁面都有的共同的部分可以只寫一次,減少代碼量,加快開發(fā)速度。并且使用框架可以非常方便的完成網(wǎng)頁導(dǎo)航工作,不但可以讓網(wǎng)站的結(jié)構(gòu)更加清晰,而且可以讓各大搜索引擎更容易搜索到網(wǎng)站。其次,各個(gè)框架之間決不會(huì)存在相互干擾問題。利用框架最大的特點(diǎn)就是使網(wǎng)站的風(fēng)格一致,把一個(gè)網(wǎng)站中頁面相同的部分單獨(dú)制作成一個(gè)頁面,作為框架結(jié)構(gòu)的一個(gè)子框架的內(nèi)容給整個(gè)網(wǎng)站公用

28、。</p><p>  頁面與后臺(tái)的數(shù)據(jù)交換是通過OGNL表達(dá)式和EL表達(dá)式來綁定交換的。這樣一來,可以簡化數(shù)據(jù)交換的代碼,比起傳統(tǒng)的servlet中使用的Request,Response,Session等數(shù)據(jù)載體來進(jìn)行數(shù)據(jù)交換,它無疑方便很多。</p><p>  系統(tǒng)的請求,跳轉(zhuǎn)是由Struts2框架來控制的。使用Struts2框架來控制請求的跳轉(zhuǎn),只需在對應(yīng)的Struts2.xml文

29、件中配置完成就行了。與傳統(tǒng)的servlet相比,它可以大大減少開發(fā)人員編寫的代碼量。如使用傳統(tǒng)的servlet,首先必須獲取當(dāng)前完整的URL,并對其進(jìn)行切割,找出請求語句,然后使用大量的if-else語句來判斷請求,才能找到相應(yīng)的方法。并且返回?cái)?shù)據(jù)必須使用Response,Session,ApplicationContext等交互給頁面來顯示。</p><p><b>  第2章 技術(shù)背景</b&

30、gt;</p><p><b>  2.1框架簡介</b></p><p>  框架(Framework)是指整個(gè)或者部分系統(tǒng)的可重用設(shè)計(jì),它表現(xiàn)為一組抽象構(gòu)件以及構(gòu)件實(shí)例之間的交互的方法;另一種定義認(rèn)為,它是被應(yīng)用開發(fā)者自由定的應(yīng)用系統(tǒng)的骨架。前者是從應(yīng)用方面陳述而后者是從目的方面給出了定義??梢哉f,框架就是個(gè)可重用的設(shè)計(jì)構(gòu)件,它制定了程序的體系架構(gòu),闡明了整個(gè)系統(tǒng)

31、的設(shè)計(jì)、協(xié)作構(gòu)件之間的相互依賴關(guān)系、責(zé)任分配和控制流程的規(guī)則,表現(xiàn)出抽象類與其實(shí)例間的依賴方法,它為構(gòu)件重用提供了連接關(guān)系。</p><p>  應(yīng)用框架的概念很簡單。它并不是應(yīng)用程序中包含構(gòu)件的程序片段,而是實(shí)現(xiàn)了應(yīng)用系統(tǒng)開發(fā)中普遍使用的功能的底層服務(wù)。使用應(yīng)用框架的開發(fā)人員可以在一個(gè)常用功能已實(shí)現(xiàn)的平臺(tái)上來開始具體系統(tǒng)的開發(fā)。它強(qiáng)調(diào)的是軟件設(shè)計(jì)重用性和系統(tǒng)功能的可擴(kuò)展性,以縮短大型應(yīng)用系統(tǒng)軟件的開發(fā)周期,提升

32、開發(fā)質(zhì)量。與傳統(tǒng)的面向?qū)ο箝_發(fā)相比較,應(yīng)用框架更加注重于專業(yè)領(lǐng)域的模塊重用。應(yīng)用框架具有專業(yè)領(lǐng)域相關(guān)性,組件根據(jù)框架進(jìn)行復(fù)合生成可運(yùn)行的系統(tǒng)??蚣艿牧6仍酱?,其中包含的領(lǐng)域知識就更加完整。</p><p>  2.2 J2EE 框架</p><p>  J2EE的全稱是Java2平臺(tái)企業(yè)版(Java 2 Platform,Enterprise Edition)。</p>&l

33、t;p>  它是一套和傳統(tǒng)應(yīng)用開發(fā)完全不同的新的技術(shù)架構(gòu),其中包含了許多組件,主要功能是可簡化并且規(guī)范了應(yīng)用系統(tǒng)的開發(fā)與部署,進(jìn)而提高了系統(tǒng)的可移植性、安全與再用價(jià)值。</p><p>  如今,Java 2平臺(tái)擁有3個(gè)版本,它們分別是適用于小型設(shè)備和智能卡上的Java 2平臺(tái)Micro版本(Java 2 Platform Micro Edition,J2ME)、適用于桌面操作系統(tǒng)的Java 2平臺(tái)標(biāo)準(zhǔn)版(

34、Java 2 Platform Standard Edition,J2SE)、適用于服務(wù)器應(yīng)用程序的創(chuàng)建和服務(wù)的Java 2平臺(tái)企業(yè)版(Java 2 Platform Enterprise Edition,J2EE)。</p><p>  圖2.1 J2EE框架架構(gòu)圖</p><p>  2.3 Struts2框架</p><p>  Struts 2以WebWor

35、k優(yōu)秀的設(shè)計(jì)思想為核心,吸收了Struts 1的部分優(yōu)點(diǎn),建立了一個(gè)兼容WebWork和Struts 1的MVC框架,Struts 2的目標(biāo)是希望可以讓原來使用Struts 1、WebWork的開發(fā)人員,都可以平穩(wěn)過渡到使用Struts 2框架。</p><p>  圖2.2 Struts2框架</p><p>  Struts 2框架的大致處理流程如下:</p><p

36、>  (1)瀏覽器發(fā)送請求,例如請求/mypage.action等。</p><p>  (2)核心控制器FilterDispatcher根據(jù)請求決定調(diào)用合適的Action。</p><p>  (3)WebWork的攔截器鏈自動(dòng)對請求應(yīng)用通用功能,例如workflow、validation或文件上傳等功能。</p><p>  (4)回調(diào)Action的exe

37、cute方法,該execute方法先獲取用戶請求參數(shù),然后執(zhí)行某種數(shù)據(jù)庫操作,既可以是將數(shù)據(jù)保存到數(shù)據(jù)庫,也可以從數(shù)據(jù)庫中檢索信息。實(shí)際上,因?yàn)锳ction只是一個(gè)控制器,它會(huì)調(diào)用業(yè)務(wù)邏輯組件來處理用戶的請求。</p><p>  (5)Action的execute方法處理結(jié)果信息將被輸出到瀏覽器中,可以是HTML頁面、圖像,也可以是PDF文檔或者其他文檔。此時(shí)支持的視圖技術(shù)非常多,既支持JSP,也支持Veloc

38、ity、FreeMarker等模板技術(shù)。</p><p>  圖2.3 Struts2流程圖</p><p>  2.4 OGNL表達(dá)式</p><p>  ognl – Object-Graph Navigation Language(對象圖導(dǎo)航語言), OGNL可以讓我們用非常簡單的表達(dá)式訪問對象層, Struts2中使用OGNL來做界面數(shù)據(jù)綁定,即把界面元素(

39、例如一個(gè)textfield)和對象層某個(gè)類的某個(gè)屬性綁定在一起,修改和顯示自動(dòng)同步。根對象ValueStack的實(shí)現(xiàn)類為OgnlValueStack配合struts標(biāo)簽使用,例如:</p><p>  <s:property value="name"/></p><p>  <s:property value="user.username&

40、quot;/></p><p>  <s:property value=“username.length()"/></p><p>  <s:property value="users[1]"/></p><p>  2.5 JQuery 框架</p><p>  jQuery由美國

41、人John Resig創(chuàng)建,至今已吸引了來自世界各地的眾多javascript高手加入其team,包括來自德國的J&ouml;rn Zaefferer,羅馬尼亞的Stefan Petre等等。jQuery是繼prototype之后又一個(gè)優(yōu)秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE,寫更少的代碼,做更多的事情。它是輕量級的js庫(壓縮后只有21k) ,這是其它的js庫所不及的,它兼容CSS3,還

42、兼容各種瀏覽器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jQuery是一個(gè)快速的,簡潔的javaScript庫,使用戶能更方便地處理HTML documents、events、實(shí)現(xiàn)動(dòng)畫效果,并且方便地為網(wǎng)站提供AJAX交互。jQuery還有一個(gè)比較大的優(yōu)勢是,它的文檔說明很全,而且各種應(yīng)用也說得很詳細(xì),同時(shí)還有許多成熟的插件可供選擇。jQuery能夠使用戶的html頁保持代碼和html內(nèi)容

43、分離,也就是說,不用再在html里面插入一堆js來調(diào)用命令了,只需定義id即可。</p><p>  2.6 AJAX技術(shù)</p><p>  Ajax的全稱是:AsynchronousJavaScript+XML,Ajax不是一個(gè)技術(shù),它實(shí)際上是幾種技術(shù),每種技術(shù)都有其獨(dú)特這處,合在一起就成了一個(gè)功能強(qiáng)大的新技術(shù)。Ajax包括:XHTML和CSS 使用文檔對象(Document

44、ObjectModel)作動(dòng)態(tài)顯示和交互 使用XML和XSLT做數(shù)據(jù)交互和操作使XMLHttpRequest進(jìn)行異步數(shù)據(jù)接收使用JavaScript將它們綁定在一起。</p><p>  Ajax(AsynchronousJavaScriptandXML)是結(jié)合了Java技術(shù)、XML以及JavaS-</p><p>  cript等編程技術(shù),可以讓開發(fā)人員構(gòu)建基于Java技術(shù)的W

45、eb應(yīng)用,并打破了使用頁面重載的慣例。 </p><p>  Ajax是使用客戶端腳本與Web服務(wù)器交換數(shù)據(jù)的Web應(yīng)用開發(fā)方法。這樣,Web頁面不用打斷交互流程進(jìn)行重新加裁,就可以動(dòng)態(tài)地更新。使用Ajax,用戶可以創(chuàng)建接近本地桌面應(yīng)用的直接、高可用、更豐富、更動(dòng)態(tài)的Web用戶界面。 </p><p>  異步JavaScript和XML(AJAX)不是什么新技術(shù),而是

46、指這樣一種方法:使用幾種現(xiàn)有技術(shù)——包括級聯(lián)樣式表(CSS)、JavaScript、XHTML、XML和可擴(kuò)展樣式語言轉(zhuǎn)換(XSLT),開發(fā)外觀及操作類似桌面軟件的Web應(yīng)用軟件。實(shí)現(xiàn)Ajax的所有組件都已存在了許多年。AdaptivePath的用戶體驗(yàn)戰(zhàn)略部門主管兼創(chuàng)辦合伙人JesseJamesGarrett今年2月發(fā)表在AdaptivePath網(wǎng)站上的一篇文章中杜撰了這個(gè)術(shù)語。</p><p>  異步這個(gè)詞

47、是指AJAX應(yīng)用軟件與主機(jī)服務(wù)器進(jìn)行聯(lián)系的方式。如果使用舊模式,每當(dāng)用戶執(zhí)行某種操作、向服務(wù)器請求獲得新數(shù)據(jù),Web瀏覽器就會(huì)更新當(dāng)前窗口。如果使用AJAX的異步模式,瀏覽器就不必等用戶請求操作,也不必更新整個(gè)窗口就可以顯示新獲取的數(shù)據(jù)。只要來回傳送采用XML格式的數(shù)據(jù),在瀏覽器里面運(yùn)行的JavaScript代碼就可以與服務(wù)器進(jìn)行聯(lián)系。JavaScript代碼還可以把樣式表加到檢索到的數(shù)據(jù)上,然后在現(xiàn)有網(wǎng)頁的某個(gè)部分加以顯示。</

48、p><p><b>  第3章 系統(tǒng)設(shè)計(jì)</b></p><p><b>  3.1系統(tǒng)設(shè)計(jì)</b></p><p><b>  3.1.1系統(tǒng)架構(gòu)</b></p><p>  本電子商務(wù)網(wǎng)站采用四層架構(gòu):</p><p>  (1) 表現(xiàn)層:JSP頁面 涉

49、及標(biāo)簽,OGNL表達(dá)式,jQuery,Ajax</p><p>  (2) 控制層:使用Struts2控制器,涉及struts.xml配置</p><p>  (3) 業(yè)務(wù)層:Action組件</p><p>  (4) 持久層:DAO組件</p><p>  圖3.1 系統(tǒng)架構(gòu)圖</p><p>  3.1.2 代碼

50、文件詳情</p><p>  表3.1表現(xiàn)層文件及功能</p><p>  表3.2控制層文件及功能</p><p>  表3.3業(yè)務(wù)層文件及功能</p><p>  表3.4持久層文件及功能</p><p>  表3.5其他文件及功能</p><p><b>  圖3.2 代碼文件&

51、lt;/b></p><p><b>  3.2數(shù)據(jù)庫設(shè)計(jì)</b></p><p>  3.2.1數(shù)據(jù)庫簡介</p><p>  (1) 數(shù)據(jù)庫是信息系統(tǒng)的核心和基礎(chǔ),把信息系統(tǒng)中大量的數(shù)據(jù)按一定的模型組織起來,提供存儲(chǔ)、維護(hù)、檢索數(shù)據(jù)的功能,使信息系統(tǒng)可以方便、及時(shí)、準(zhǔn)確地從數(shù)據(jù)庫中獲得所需的信息。</p><p&g

52、t;  (2) 數(shù)據(jù)庫是信息系統(tǒng)的各個(gè)部分能否緊密地結(jié)合在一起以及如何結(jié)合的關(guān)鍵所在。</p><p>  (3) 數(shù)據(jù)庫設(shè)計(jì)是信息系統(tǒng)開發(fā)和建設(shè)的重要組成部分。</p><p>  3.2.2概念模型設(shè)計(jì)(E-R圖)</p><p>  數(shù)據(jù)模型是是數(shù)據(jù)特征的抽象,從抽象層次上描述了系統(tǒng)的靜態(tài)特征、動(dòng)態(tài)行為和約束條件,為數(shù)據(jù)庫系統(tǒng)的信息表與操作提供一個(gè)抽象的框架。

53、描述了數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作及數(shù)據(jù)約束。</p><p><b>  本系統(tǒng)的ER圖:</b></p><p>  圖3.3數(shù)據(jù)庫ER圖</p><p>  表3.6數(shù)據(jù)庫表功能</p><p><b>  第4章 系統(tǒng)實(shí)現(xiàn)</b></p><p><b>  4.1模

54、塊實(shí)現(xiàn)</b></p><p>  “珍書網(wǎng)”電子商務(wù)系統(tǒng)包含有五大模塊,分別是:產(chǎn)品瀏覽,分類顯示,注冊登陸,購物車和訂單模塊。</p><p>  (1) 產(chǎn)品瀏覽下包括最新上架,熱銷圖書,編輯推薦三個(gè)小模塊。</p><p>  (2) 分類顯示下有一個(gè)分頁模塊</p><p>  (3) 注冊登陸下有兩個(gè)模塊,分別是注冊和

55、登陸,注冊下又有一個(gè)注冊驗(yàn)證模塊,注冊驗(yàn)證下還有個(gè)郵箱驗(yàn)證模塊。</p><p>  (4) 購物車下?lián)碛性黾樱瑒h除,修改數(shù)量三個(gè)模塊</p><p>  (5) 訂單模塊包括一個(gè)地址管理模塊</p><p><b>  圖4.1模塊實(shí)現(xiàn)圖</b></p><p>  4.1.1產(chǎn)品瀏覽模塊</p><

56、;p>  圖4.2產(chǎn)品瀏覽頁面</p><p>  圖4.3產(chǎn)品瀏覽模塊</p><p>  <%@taglib prefix="s" uri="/struts-tags"%>//引入OGNL表達(dá)式</p><p>  <%@include file="../common/head.jsp&q

57、uot;%>//加入共同的頭尾部頁面</p><p>  <%@include file="../common/foot.jsp"%></p><p>  (1) 左邊分類導(dǎo)航欄</p><p>  private List<Category> cats; //傳到頁面的數(shù)據(jù)</p><p>

58、  public String execute(){</p><p>  CategoryDAO catDao=new CategoryDAOImpl();</p><p><b>  try {</b></p><p>  List<Category> all=catDao.findAll();//查找出所有的類別,放入一個(gè)Lis

59、t里,然后傳到頁面</p><p>  cats=findSubCatsByParentId(all,1);</p><p>  for(Category c:cats){</p><p>  c.setSubCats(findSubCatsByParentId(all,c.getId()));// 通過過濾獲取一級級別</p><p>&l

60、t;b>  }</b></p><p>  return "success";</p><p>  } catch (SQLException e) {</p><p>  e.printStackTrace();</p><p>  return"error";</p>

61、<p><b>  }</b></p><p><b>  }</b></p><p>  <s:iterator value="cats" var="subcats">//使用OGNL表達(dá)式迭代cats,循環(huán)顯示出各個(gè)類別</p><p>  </s:

62、iterator></p><p>  (2) 最新上架圖書(根據(jù)上架時(shí)間,取前8個(gè)商品)</p><p>  select * from d_product where has_deleted=0 order by add_time desc limit 0,8</p><p><b>  (3) 熱銷圖書</b></p>

63、<p>  select * from d_product where has_deleted=0 limit 0,1</p><p>  (4) 編輯推薦(三表聯(lián)合查詢,根據(jù)入庫時(shí)間由近到遠(yuǎn),查出產(chǎn)品信息)</p><p>  "select dp.*,db.* from d_category_product dcp join d_product dp on(dcp

64、.product_id=dp.id) join d_book db on(dp.id=db.id) where dcp.cat_id=? order by dp.add_time desc limit ?,?"</p><p>  4.1.2注冊登陸模塊</p><p><b>  圖4.4登陸頁面</b></p><p>  圖4.

65、5注冊登陸模塊</p><p><b>  (1) 登陸</b></p><p>  //Struts2控制登陸命令,根據(jù)不同的返回值,跳至不同的action</p><p>  <action name="login" class="com.tarena.dang.action.user.LoginActi

66、on"></p><p>  <result name="verify">verify_form.jsp</result></p><p>  <result name="login">login_form.jsp</result></p><p>  <r

67、esult name="main">/main/main.jsp</result></p><p>  <result name="order" type="redirectAction">../cart/cartlist</result></p><p>  <result nam

68、e="notfound">login_form.jsp</result></p><p>  <result name="input">/user/login_form.jsp</result></p><p><b>  </action></b></p>&

69、lt;p><b>  //登陸查詢</b></p><p>  UserDAO dao=new UserDAOImpl();</p><p><b>  try {</b></p><p>  user=dao.findByEmail(email); //根據(jù)Email找到用戶</p>&l

70、t;p>  if(user==null){</p><p>  return "error";//如果用戶為空,返回error</p><p><b>  }</b></p><p>  if(!user.isEmailVerify())</p><p>  return "verif

71、y";//如果用戶未驗(yàn)證郵箱,跳至郵箱驗(yàn)證</p><p>  }else if(!user.getPassword().equals(password)){</p><p>  return "login";//如果成功找到用戶,但密碼不匹配,跳登錄界面</p><p><b>  }else{</b></

72、p><p>  user.setLastLoginTime(System.currentTimeMillis());//設(shè)置最后登陸時(shí)間</p><p>  String ip=ServletActionContext.getRequest().getRemoteAddr();//獲得當(dāng)前登陸IP</p><p>  user.setLastLoginIp(ip); /

73、/設(shè)置當(dāng)前IP</p><p>  ActionContext.getContext().getSession().put("user", user);</p><p>  user.setLastLoginIp(ActionContext)</p><p>  dao.update(user);</p><p>  r

74、eturn "main";//如果成功找到用戶,且密碼匹配,跳產(chǎn)品瀏覽界面</p><p><b>  }</b></p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p>  return "error

75、";</p><p><b>  }</b></p><p>  圖4.6注冊與注冊驗(yàn)證頁面</p><p><b>  (2) 注冊</b></p><p>  private User user;//拿到頁面?zhèn)鱽淼膗ser</p><p>  public St

76、ring execute(){</p><p>  UserDAO userDao=new UserDAOImpl();</p><p><b>  try {</b></p><p>  user.setUserIntegral(0);//設(shè)置積分</p><p>  user.setLastLoginTime(Sys

77、tem.currentTimeMillis());//設(shè)置最后登陸時(shí)間</p><p>  String ip=ServletActionContext.getRequest().getRemoteAddr();//獲得當(dāng)前登陸IP</p><p>  user.setLastLoginIp(ip);//設(shè)置當(dāng)前IP</p><p>  user.setEma

78、ilVerify(false);//設(shè)置郵箱是否驗(yàn)證</p><p>  String verifyCode=VerifyUtil.createVerifyCode();//生成郵箱驗(yàn)證碼</p><p>  user.setEmailVerifyCode(verifyCode);//設(shè)置郵箱驗(yàn)證碼</p><p>  userDao.save(user);//將u

79、ser存入d_user表中</p><p>  return "success";</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p>  return "error";</p><p>

80、;<b>  }</b></p><p><b>  }</b></p><p><b>  (3) 注冊驗(yàn)證</b></p><p>  //發(fā)送Ajax請求驗(yàn)證注冊郵箱</p><p>  $(function() {</p><p>  $(

81、9;#txtEmail').blur(function() {//通過ID獲取到元素,添加鼠標(biāo)焦點(diǎn)失去事件</p><p>  $('#email\\.info').html('');</p><p>  var txt = $('#txtEmail').val();</p><p>  //判斷郵箱地址的可用

82、性</p><p>  if (!txt) {</p><p>  $('#email\\.info').html('<img src="../images/wrong.gif"/>郵箱地址不能為空');</p><p>  emailflag = false;</p><p>

83、<b>  } else {</b></p><p>  //利用正則表達(dá)式判斷郵箱是否符合格式</p><p>  var pattern = /\b(^['_A-Za-z0-9-]+(\.['_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\.[A-Za-z0-9-]+)*((\.[A-Za-z0-9]{2,})|(\.[A-Za-

84、z0-9]{2,}\.[A-Za-z0-9]{2,}))$)\b/;</p><p>  if (!pattern.test(txt)) {</p><p>  emailflag = false;</p><p>  $('#email\\.info').html('<img src="../images/wrong.gif

85、"/>郵箱地址不符合規(guī)則');</p><p><b>  } else {</b></p><p>  $.post("user/validEmail.action",</p><p>  {"email" : txt},</p><p>  functi

86、on(data) {</p><p>  if (data) {</p><p>  $('#email\\.info').html('<img src="../images/right.gif"/><span style="color:blue">郵箱地址可以使用</span>')

87、;</p><p>  //$('#emailflag').val(true);</p><p>  emailflag = true;</p><p><b>  } else {</b></p><p>  emailflag = false;</p><p>  //判斷郵箱

88、是否已經(jīng)被注冊了</p><p>  $('#email\\.info').html('<img src="../images/wrong.gif"/>郵箱地址被占用');</p><p><b>  }</b></p><p><b>  });</b>&l

89、t;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  });</b></p><p><b>  (4) 驗(yàn)證郵箱</b></p><p>  圖4.7郵箱驗(yàn)證頁面</p&g

90、t;<p>  UserDAO dao=new UserDAOImpl();</p><p><b>  try {</b></p><p>  System.out.println("verifyemail:"+email); //在控制臺(tái)打印郵箱驗(yàn)證碼</p><p>  User user=dao.

91、findByEmail(email);</p><p>  if(user.getEmailVerifyCode().equals(verify)){ //判斷用戶輸入的驗(yàn)證碼和發(fā)的是否一致</p><p>  user.setEmailVerify(true);</p><p>  dao.update(user);</p><p>  v

92、erifyok=true;</p><p><b>  }</b></p><p>  return "success";</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p>  re

93、turn "error";</p><p><b>  }</b></p><p><b>  }</b></p><p>  4.1.3分類顯示模塊</p><p>  圖4.8分類顯示頁面</p><p>  圖4.9分類顯示模塊</p>

94、<p><b>  (1) 分頁</b></p><p>  CategoryDAO catDao=new CategoryDAOImpl();</p><p><b>  try {</b></p><p>  pCat=catDao.findCategoryById(pid);</p><

95、;p>  cats=catDao.findByParentId(pid);</p><p>  //統(tǒng)計(jì)給個(gè)類別一共包含多少種商品,totalNum</p><p>  totalNum=catDao.numOfPid(pid);//類別一共包含多少種商品</p><p>  BookDAO bookDao=new BookDAOImpl();</p&g

96、t;<p>  int begin=(page-1)*size;</p><p>  maxPage=catDao.numOfProductByCategoryId(id)/size+1; //計(jì)算出最大頁數(shù)</p><p>  books=bookDao.findByCatId(id,begin,size); //根據(jù)所給的三個(gè)條件找出商品集</p><

97、p>  return "success";</p><p>  } catch (SQLException e) {</p><p>  e.printStackTrace();</p><p>  return "error";</p><p><b>  }</b><

98、;/p><p>  //分頁顯示查詢語句</p><p>  "select dp.*,db.* from d_category_product dcp join d_product dp on(dcp.product_id=dp.id) join d_book db on(dp.id=db.id) where dcp.cat_id=? limit ?,?";</p&

99、gt;<p>  4.1.4購物車模塊</p><p>  圖4.10購物車頁面</p><p>  圖4.11購物車模塊</p><p><b>  //創(chuàng)建購物車實(shí)例</b></p><p>  public static CartImpl getInstance() {</p><

100、p>  //從ActionContext中獲取session,再從session中獲取購物車實(shí)例,如果獲取不到,則新建實(shí)例,并放入session中</p><p>  Map<String, Object> session = ActionContext.getContext().getSession();</p><p>  CartImpl cart = (CartI

101、mpl) session.get("cart");</p><p>  if (cart == null) {</p><p>  cart = new CartImpl();</p><p><b>  try {</b></p><p>  cart.load(CookieUtil.findCoo

102、kie("cart", request));</p><p>  } catch (UnsupportedEncodingException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  session.put(&q

103、uot;cart", cart);</p><p><b>  }</b></p><p>  return cart;</p><p><b>  }</b></p><p>  (1) 購物車中增加商品方法</p><p>  //遍歷購物車,如果發(fā)現(xiàn)要添加的商

104、品的ID和購物車中某件商品的ID相同,將返回,您以添加過商品</p><p>  public boolean add(int id) {</p><p>  for (CartItem item : items) {</p><p>  if (item.getProduct().getId() == id) {</p><p>  ret

105、urn false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  ProductDAO proDao = new ProductDAOImpl();</p><p>  Product p = null;</p><p>

106、;<b>  try {</b></p><p>  p = proDao.findById(id);</p><p>  } catch (SQLException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p>

107、<p>  CartItem item = new CartItem();</p><p>  item.setProduct(p);</p><p>  item.setQty(1);</p><p>  items.add(item); //根據(jù)ID查找出商品,然后加入購物車中</p><p><b>  try {

108、</b></p><p>  CookieUtil.addCookie("cart", store(), response);</p><p>  } catch (UnsupportedEncodingException e) {</p><p>  e.printStackTrace();</p><p>

109、<b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  (2) 刪除,遍歷購物車,將商品ID和刪除的ID相同的商品的Buy字段set為false</p><p>  CookieUtil.addCookie("car

110、t", store(), response);</p><p>  } catch (UnsupportedEncodingException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b&g

111、t;</p><p>  (3) 修改數(shù)量,遍歷購物車,將商品的qty屬性改成頁面?zhèn)鱽淼囊牡纳唐窋?shù)量</p><p>  public void modify(int id, int qty) {</p><p>  for (CartItem c : items) { </p><p>  if (c.getProduct().getI

112、d() == id) {</p><p>  c.setQty(qty);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  try {</b></p><p>  CookieUtil.addC

113、ookie("cart", store(), response);</p><p>  } catch (UnsupportedEncodingException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b

114、>  }</b></p><p><b>  4.1.5訂單模塊</b></p><p><b>  圖4.12訂單頁面</b></p><p><b>  圖4.13訂單模塊</b></p><p>  public String execute(){<

115、;/p><p>  Map<String, Object> session = ActionContext.getContext().getSession();//獲得Session</p><p>  User user=(User) session.get("user");//獲得已存入Session里的用戶</p><p>  if

116、(user==null){</p><p>  return "login";</p><p><b>  }</b></p><p>  int id=user.getId();</p><p>  AddressDAO aDao=new AddressDAOImpl();</p>&

117、lt;p><b>  try {</b></p><p>  adds=aDao.findAddressByUserId(id);//根據(jù)用戶ID找到用戶地址</p><p>  return "success";</p><p>  } catch (SQLException e) {</p><

118、p>  e.printStackTrace();</p><p>  return "error";</p><p><b>  }</b></p><p><b>  }</b></p><p>  圖4.13地址管理頁面</p><p><

119、b>  //生成新地址</b></p><p>  Map<String, Object> session = ActionContext.getContext().getSession();</p><p>  User user=(User)session.get("user");</p><p>  CartI

120、mpl cart = CartImpl.getInstance();//獲取購物車實(shí)例</p><p>  OrderDAO oDao=new OrderDAOImpl();</p><p>  if(user==null){</p><p>  return "login";</p><p><b>  }&l

121、t;/b></p><p>  if(id==-1){</p><p>  Order o=new Order(); </p><p>  o.setUserId(user.getId());</p><p>  o.setOrderTime(System.currentTimeMillis());</p><p&g

122、t;  o.setTotalPrice(cart.sum());</p><p>  o.setReceiveName(receiveName);</p><p>  o.setFullAddress(fullAddress);</p><p>  o.setPostalCode(postalCode);</p><p>  o.setMob

123、ile(mobile);</p><p>  o.setPhone(phone);</p><p><b>  try {</b></p><p>  oDao.insert(o);</p><p>  } catch (SQLException e) {</p><p>  e.print

124、StackTrace();</p><p><b>  }</b></p><p>  AddressDAO aDao=new AddressDAOImpl();</p><p><b>  try {</b></p><p>  address=aDao.findAddressById(id);

125、//自動(dòng)填寫已有地址</p><p>  return "success";</p><p>  } catch (SQLException e) {</p><p>  e.printStackTrace();</p><p>  return "error";</p><p>

126、;<b>  }</b></p><p><b>  //顯示之前的地址</b></p><p>  $(function(){</p><p>  $('#address').change(function(){</p><p>  $('#addressId').

127、val("-1");</p><p>  $('#receiveName').val('');;</p><p>  $('#fullAddress').val('');</p><p>  $('#postalCode').val('');</

128、p><p>  $('#phone').val('');</p><p>  $('#mobile').val('');</p><p>  var id=$('#address').val().trim();</p><p>  if(id==-1){</p&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論