j2ee課程設(shè)計(jì)---網(wǎng)上拍賣(mài)系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩32頁(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)介

1、<p><b>  目錄</b></p><p><b>  一 設(shè)計(jì)題目1</b></p><p><b>  二 設(shè)計(jì)目的1</b></p><p><b>  三 總體設(shè)計(jì)1</b></p><p><b>  3.1需求分

2、析1</b></p><p>  3.2 系統(tǒng)設(shè)計(jì)3</p><p>  3.2.1 開(kāi)發(fā)技術(shù)與工具3</p><p>  3.3 概要設(shè)計(jì)4</p><p>  3.4 數(shù)據(jù)庫(kù)設(shè)計(jì)5</p><p>  3.4.1 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)5</p><p>  3.5 詳細(xì)設(shè)計(jì)

3、7</p><p>  3.5.1 設(shè)計(jì)視圖層7</p><p>  3.5.2 設(shè)計(jì)控制層9</p><p>  3.5.3 設(shè)計(jì)對(duì)象模型10</p><p>  3.5.4 設(shè)計(jì)數(shù)據(jù)訪問(wèn)層11</p><p>  四 算法描述與實(shí)現(xiàn)14</p><p>  4.1 實(shí)現(xiàn)瀏覽拍賣(mài)物

4、品種類(lèi)頁(yè)面14</p><p>  4.2 實(shí)現(xiàn)查看物品詳細(xì)信息及出價(jià)界面17</p><p>  4.3 實(shí)現(xiàn)查看競(jìng)得的商品界面18</p><p><b>  五 結(jié)論20</b></p><p><b>  附錄:源代碼21</b></p><p><b

5、>  一 設(shè)計(jì)題目</b></p><p><b>  網(wǎng)上拍賣(mài)系統(tǒng)</b></p><p><b>  二 設(shè)計(jì)目的</b></p><p>  隨著信息化技術(shù)在生活中的應(yīng)用越來(lái)越廣泛,網(wǎng)上購(gòu)物也逐漸成為人們的一種生活方式。本系統(tǒng)正是基于這樣一種環(huán)境下應(yīng)運(yùn)而生。計(jì)機(jī)網(wǎng)絡(luò)為商務(wù)活動(dòng)開(kāi)辟了新的空間,提供了新

6、的手段,同時(shí)為公司業(yè)務(wù)發(fā)展賦予了更多的機(jī)會(huì),成為現(xiàn)代商務(wù)的潮流。網(wǎng)上拍賣(mài)是建立在電子網(wǎng)絡(luò)技術(shù)上的一種全新的電子商務(wù)模式。它具有成本低廉,方式靈活,運(yùn)行快捷等特點(diǎn),通過(guò)Internet將拍賣(mài)活動(dòng)變成每一位網(wǎng)民都可以加入其中的交易方式。但它在給人們帶來(lái)便利的同時(shí)也帶來(lái)了很多的問(wèn)題。它的公平、公正、公開(kāi)性受到大家的關(guān)注。其可靠性和安全性更是大家關(guān)心的問(wèn)題。這就要求不僅要在系統(tǒng)的設(shè)計(jì)上做到公平合理,也要在信息的傳輸上做到安全可靠,以構(gòu)建一個(gè)公平

7、又安全的交易平臺(tái)。</p><p><b>  三 總體設(shè)計(jì)</b></p><p><b>  3.1需求分析</b></p><p>  需求分析是介于系統(tǒng)分析和軟件設(shè)計(jì)階段之間的重要橋梁。一方面,需求分析以系統(tǒng)規(guī)格說(shuō)明和項(xiàng)目規(guī)劃作為分析活動(dòng)的基本出發(fā)點(diǎn),并從軟件角度對(duì)它們進(jìn)行檢查與調(diào)整;另一方面,需求規(guī)格說(shuō)明又是軟件

8、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試直至維護(hù)的主要基礎(chǔ)。良好的分析活動(dòng)有助于避免或盡早剔除早期錯(cuò)誤,從而提高軟件生產(chǎn)率,降低開(kāi)發(fā)成本,改進(jìn)軟件質(zhì)量。需求分析框圖如圖3-1。</p><p>  圖3-1 網(wǎng)上拍賣(mài)系統(tǒng)需求框圖</p><p><b>  3.2 系統(tǒng)設(shè)計(jì)</b></p><p>  本系統(tǒng)是基于B/S模式開(kāi)發(fā)的JAVA EE多層體系結(jié)構(gòu)WEB應(yīng)用

9、。系統(tǒng)開(kāi)發(fā)主要分為以下幾層:表示層、業(yè)務(wù)層、DAO層、持久層。業(yè)務(wù)層和DAO層都通過(guò)接口與其它層進(jìn)行連接從而減小了各層之間的耦合度,實(shí)現(xiàn)高內(nèi)聚、低耦的思想。</p><p>  3.2.1 開(kāi)發(fā)技術(shù)與工具</p><p>  主要開(kāi)發(fā)工具為:MyEclipse8.6、Mysql6.0、Tomcat6.0。</p><p>  主要技術(shù)包括:JavaEE輕量級(jí)框架S2

10、SH、Log4j、Ajax。</p><p>  S2SH集成框架是Struts、Spring 和Hibernate 三種技術(shù)的有機(jī)融合, 是目前應(yīng)用最廣泛的Java EE 架構(gòu)。在S2SH集成框架中,Struts 的作用是提供MVC 模型, 將界面、業(yè)務(wù)邏輯和數(shù)據(jù)分離, 并提供一個(gè)高可擴(kuò)展的架構(gòu)。Spring作為核心,向上整合MVC框架,向下整合ORM框架,使用Spring的IoC容器來(lái)管理各組件之間之間的依賴(lài)

11、關(guān)系,Spring的聲明事務(wù)將負(fù)責(zé)邏輯層組件的事務(wù)管理。而Hibernate 提供了一個(gè)抽象的數(shù)據(jù)服務(wù)視圖,將用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)進(jìn)行高度抽象。 </p><p>  Struts 是目前創(chuàng)建Web 應(yīng)用最常用的表現(xiàn)層MVC 框架實(shí)現(xiàn),是Jakarta Apache 的一個(gè)開(kāi)源項(xiàng)目?;贛odel2 的Struts 框架利用控制器和定制標(biāo)簽庫(kù)將應(yīng)用中的模型和視圖分離,達(dá)到了層間松散耦合的效果,同時(shí)提高系統(tǒng)的靈活性、

12、重用性和維護(hù)性。作為開(kāi)源項(xiàng)目,Struts 經(jīng)受了大量實(shí)踐的檢驗(yàn),功能越來(lái)越強(qiáng)大,體系也日臻完善,并且對(duì)其他技術(shù)和框架顯示出良好的融合性。</p><p>  Spring 由Rod Johnson 創(chuàng)建,它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring 使用基本的JavaBean 來(lái)完成以前只可能由EJB 完成的事情。然而,Spring 的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,

13、任何Java 應(yīng)用都可以從Spring 中受益。簡(jiǎn)單來(lái)說(shuō),Spring 是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。</p><p>  Hibernate 是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC 進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java 程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。Hibernate 可以應(yīng)用在任何使用JDBC 的場(chǎng)合, 既可以在Java 的客戶端程序使用,

14、也可以在Servlet/JSP 的Web 應(yīng)用中使用。</p><p>  AJAX是Asynchronout JavaScript and XML的縮寫(xiě),它并不是一門(mén)新的語(yǔ)言或技術(shù),實(shí)際上是幾項(xiàng)技術(shù)按一定的方式組合在一起,在共同的協(xié)作中發(fā)揮各自的作用,它包括:使用XHTML和CSS標(biāo)準(zhǔn)化呈現(xiàn);使用DOM實(shí)現(xiàn)動(dòng)態(tài)顯示和交互;使用XML和XSLT進(jìn)行數(shù)據(jù)交換和處理;使用XMLHttpRequest進(jìn)行異步數(shù)據(jù)讀??;

15、最后用JavaScript綁定和處理所有數(shù)據(jù)。AJAX的一個(gè)最大的特點(diǎn)是無(wú)需刷新頁(yè)面便可向服務(wù)器傳輸或讀寫(xiě)數(shù)據(jù)(又稱(chēng)無(wú)刷新頁(yè)面),這一特點(diǎn)要得益于XMLHTTP組件XMLHttpRequest對(duì)象。這樣就可以像再發(fā)桌面應(yīng)用程序只同服務(wù)器進(jìn)行數(shù)據(jù)層面的交換,而不用每次都刷新界面,也不用每次將數(shù)據(jù)處理的工作提交給服務(wù)器來(lái)做,這樣即減輕了服務(wù)器的負(fù)擔(dān)又加快了響應(yīng)速度、縮短了用戶等候時(shí)間。</p><p><b&g

16、t;  3.3 概要設(shè)計(jì)</b></p><p>  系統(tǒng)分為前臺(tái)和后臺(tái)兩個(gè)模塊,前臺(tái)主要用來(lái)提供給系統(tǒng)注冊(cè)用戶或者游客瀏覽、查看商品,并提供注冊(cè)的模塊,系統(tǒng)注冊(cè)用戶通過(guò)登錄后還能管理自己的信息和對(duì)指定的商品參與競(jìng)拍。</p><p>  后臺(tái)是系統(tǒng)管理員對(duì)拍賣(mài)系統(tǒng)設(shè)置、管理用戶和管理商品的地方。</p><p>  系統(tǒng)的系統(tǒng)層次概框劃分如圖3-2所示

17、。</p><p>  圖3-2 系統(tǒng)層次概框圖</p><p><b>  3.4 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p>  根據(jù)系統(tǒng)的需求,數(shù)據(jù)庫(kù)中需要?jiǎng)?chuàng)建以下數(shù)據(jù)表。</p><p> ?。?)用戶信息表:用于存放注冊(cè)用戶的資料以及用戶登錄情況。</p><p> ?。?)商品分類(lèi)信息表:商品

18、的主要分類(lèi),和分類(lèi)信息的描述。</p><p>  (3)商品信息表:記錄用戶發(fā)布的商品的信息。</p><p>  (4)用戶出價(jià)信息表:用于記錄用戶對(duì)相關(guān)商品的出價(jià)信息。</p><p>  (5)商品狀態(tài)信息表:用于存放商品狀態(tài)信息。</p><p>  3.4.1 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)</p><p>  數(shù)據(jù)庫(kù)需求

19、分析設(shè)計(jì)完畢后,現(xiàn)在可以將上面的需求分析轉(zhuǎn)化為數(shù)據(jù)庫(kù)系統(tǒng)所支持的實(shí)際數(shù)據(jù)模型,也就是數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu),可以作出各表。</p><p>  網(wǎng)上拍賣(mài)系統(tǒng)數(shù)據(jù)庫(kù)中各個(gè)表的設(shè)計(jì)結(jié)果如下面的表格所示。每個(gè)表格表示在數(shù)據(jù)庫(kù)中的一個(gè)表。</p><p>  如表3-1所示為用戶信息表,記錄了系統(tǒng)中所有用戶的詳細(xì)信息。</p><p>  表中user_id為主鍵并被設(shè)置為IDE

20、NTITY (1, 1),這樣當(dāng)插入一條記錄且user_id字段的數(shù)據(jù)為空(null)時(shí),新記錄的user_id值將由系統(tǒng)自動(dòng)給出,且給出的值將比表中曾經(jīng)曾在的最大的user_id值在1(若是一張新表,則從1開(kāi)始)。這樣可以保證整個(gè)表中的user_id字段在其數(shù)據(jù)類(lèi)型允許的范圍之內(nèi)沒(méi)有重復(fù)的值。</p><p>  表3-1  auction_user用戶信息表</p><p>  如表3

21、-2所示為商品分類(lèi)信息表,記錄了所有商品分類(lèi)的信息。</p><p>  表3-2 kind商品子分類(lèi)信息表</p><p>  如表3-3所示為記錄用戶所發(fā)布的商品的詳細(xì)信息的表。</p><p>  表中item_id為主鍵設(shè)為自動(dòng)增長(zhǎng)。owner_id為auction_user表中user_id的外鍵,kind_id為kind表中kind_id的外鍵,cs

22、ub為subsort表中ssid的外鍵,這些外鍵能保證商品的完整性。cend表示商品的拍賣(mài)是否已經(jīng)結(jié)束。</p><p>  表3-3 item商品信息表</p><p>  如表3-4所示為記錄用戶對(duì)商品出價(jià)情況的信息表。</p><p>  表中bid_id為主鍵設(shè)為自動(dòng)增長(zhǎng)。item_id為商品表item中item_id的外鍵,這樣可以保證用戶的出價(jià)都是針

23、對(duì)已經(jīng)發(fā)布的商品發(fā)出的。user_id為出價(jià)的用標(biāo)識(shí)。howmuch代表用戶對(duì)此商品出了多少錢(qián)。</p><p>  表3-4 bid用戶出價(jià)信息表</p><p>  如表3-5所示為記錄用戶發(fā)布的商品的狀態(tài)的信息表。</p><p>  表中state_id為主鍵設(shè)為自動(dòng)增長(zhǎng)。</p><p>  表3-5 state用戶出價(jià)信息表<

24、;/p><p><b>  3.5 詳細(xì)設(shè)計(jì)</b></p><p>  3.5.1 設(shè)計(jì)視圖層</p><p>  系統(tǒng)的視圖層是一組JSP頁(yè)面,他們通過(guò)Struts結(jié)合JSTL EL表達(dá)式語(yǔ)言將數(shù)據(jù)暴露給用戶,供用戶操作。本系統(tǒng)在界面設(shè)計(jì)上采用了模塊化處理的思想,把很多頁(yè)面共有的部分集成一個(gè)模塊,例如頁(yè)面的頭、尾,這樣在開(kāi)發(fā)的時(shí)候遇到這類(lèi)相似的

25、頁(yè)面部分就不再需要重新編寫(xiě),而只要以一句:<%@include file=”header.jsp”%>就可以重用這部分的內(nèi)容,大大提高了系統(tǒng)的開(kāi)發(fā)效率。根據(jù)系統(tǒng)的功能,JSP的主要頁(yè)面如下。</p><p>  主頁(yè)(main.jsp):主頁(yè)是系統(tǒng)的入口。效果如圖3-3。</p><p>  圖3-3 主頁(yè)效果圖</p><p>  登錄頁(yè)(login

26、.jsp):系統(tǒng)為注冊(cè)的用戶提供一個(gè)進(jìn)入系統(tǒng)并使用系統(tǒng)功能的入口。</p><p>  登出頁(yè)(logout.jsp):用戶離開(kāi)系統(tǒng)時(shí)顯示的頁(yè)面。</p><p>  注冊(cè)新用戶頁(yè)(newuser.jsp):系統(tǒng)提供給普通用戶的注冊(cè)功能。只有注冊(cè)用戶才可以參加競(jìng)拍并管理自己的物品。效果如圖3-4。</p><p>  圖3-4 注冊(cè)頁(yè)面效果圖</p>

27、<p>  管理商品頁(yè)(mrgitem.jsp):系統(tǒng)為注冊(cè)用戶提供商品管理功能。</p><p>  管理分類(lèi)頁(yè)(mrgkind.jsp):系統(tǒng)為注冊(cè)用戶提供商品分類(lèi)管理功能。</p><p>  查看競(jìng)得商品頁(yè)(viewItemSu.jsp):系統(tǒng)為注冊(cè)用戶提供查看用戶自己成功競(jìng)得的商品的功能。</p><p>  查看自己的競(jìng)標(biāo)(viewBid.j

28、sp):系統(tǒng)為注冊(cè)用戶提供查看用戶自己正在參與競(jìng)價(jià)的商品。</p><p>  瀏覽流拍商品(viewFailItem.jsp):所有用戶都可以瀏覽處于流拍狀態(tài)的商品。</p><p>  瀏覽拍賣(mài)商品(viewKind.jsp):所有用戶都可以瀏覽正在拍賣(mài)的商品。</p><p>  查看商品詳細(xì)信息(viewDetail.jsp):所有用戶都可以查看正在拍賣(mài)物品

29、的詳細(xì)信息。但要參與競(jìng)拍必須是注冊(cè)用戶。</p><p>  提示錯(cuò)誤信息頁(yè)面(error.jsp):所有操作錯(cuò)誤的提示信息頁(yè)面。</p><p>  3.5.2 設(shè)計(jì)控制層</p><p>  根據(jù)系統(tǒng)要實(shí)現(xiàn)的功能,構(gòu)成此網(wǎng)上拍賣(mài)系統(tǒng)的各個(gè)控制層動(dòng)作類(lèi)如表3-5-1所示。通過(guò)此表,可以從宏觀上了解各個(gè)控制層動(dòng)作類(lèi)的功能。</p><p> 

30、 表3-5-1 控制層的動(dòng)作類(lèi)</p><p>  此表列出了本系統(tǒng)中主要的動(dòng)作類(lèi)和Form Bean及其功能描述。</p><p>  為了使各個(gè)表單中的數(shù)據(jù)能正確顯示,本系統(tǒng)重載了ActionServlet類(lèi),使其正確處理中文參數(shù)并顯示。設(shè)置步驟如下:</p><p>  (1)重載ActionServlet,代碼如下:</p><p>

31、;  package org.yeeku.struts;</p><p>  import org.apache.struts.action.ActionServlet;</p><p>  import javax.servlet.http.HttpServletRequest;</p><p>  import javax.servlet.http.HttpSe

32、rvletResponse;</p><p>  public class MyActionServlet extends org.apache.struts.action.ActionServlet</p><p><b>  {</b></p><p>  protected void process(HttpServletRequest

33、request, HttpServletResponse response)</p><p>  throws java.io.IOException, javax.servlet.ServletException</p><p><b>  {</b></p><p>  //設(shè)置編碼方式為GB2312,正確處理中文。</p>

34、<p>  request.setCharacterEncoding("GB2312");</p><p>  //將控制權(quán)交給父類(lèi)繼續(xù)處理</p><p>  super.process(request, response);</p><p><b>  }</b></p><p><

35、;b>  }</b></p><p>  (2)在web.xml配置文件中應(yīng)用此重載的MyActionServlet作為前端控制器,部分代碼如下:</p><p><b>  …</b></p><p><b>  <servlet></b></p><p>  <

36、;servlet-name>action</servlet-name></p><p>  <servlet-class>org.yeeku.struts.MyActionServlet</servlet-class></p><p>  <init-param></p><p>  <param-name

37、>config</param-name></p><p>  <param-value>/WEB-INF/struts-config.xml</param-value></p><p>  </init-param></p><p>  <load-on-startup>2</load-on-s

38、tartup></p><p>  </servlet></p><p><b>  …</b></p><p>  應(yīng)用此設(shè)置后,程序?qū)⑹紫韧ㄟ^(guò)MyActionServlet預(yù)處理所有發(fā)送至此控制器設(shè)置中文編碼,然后使用super.process()方法將控制權(quán)交給ActionSerlet處理完成其功能。</p>

39、<p>  3.5.3 設(shè)計(jì)對(duì)象模型</p><p>  MyEclipse,可以自動(dòng)生成這些對(duì)象模型,以及數(shù)據(jù)訪問(wèn)層的相關(guān)類(lèi)。在org.yeeku.model包中有五個(gè)對(duì)象模型各個(gè)類(lèi)的作用如下。</p><p> ?。?)Bid類(lèi):用戶出價(jià)相關(guān)的信息。</p><p>  (2)Item類(lèi):商品類(lèi)。</p><p> ?。?)

40、AcutionUser類(lèi):用戶信息類(lèi)。</p><p>  (4)Kind類(lèi):商品種類(lèi)類(lèi)。</p><p> ?。?)State類(lèi):商品狀態(tài)。</p><p>  在org.yeeku.model.base包中有五個(gè)抽象類(lèi)分別是org.yeeku.model包中類(lèi)的父類(lèi)。每一個(gè)抽象類(lèi)都對(duì)應(yīng)了數(shù)據(jù)庫(kù)中的一張表。</p><p>  3.5.4

41、設(shè)計(jì)數(shù)據(jù)訪問(wèn)層</p><p>  數(shù)據(jù)訪問(wèn)層使用Hibernate來(lái)實(shí)現(xiàn),根據(jù)數(shù)據(jù)庫(kù)表和對(duì)象模型之間的對(duì)應(yīng)關(guān)系,使用MyEclipse可以自動(dòng)生成數(shù)據(jù)訪問(wèn)層的DAO類(lèi)和XXX.hbm.xml文件。此處給出與AuctionUser類(lèi)相關(guān)的AuctionUserDao類(lèi)及其實(shí)現(xiàn)類(lèi)AuctionUserDaoHirbernet和auctionuser.hbm.xml文件,并對(duì)其分析。</p><p

42、>  AuctionUserDaoHirbernet類(lèi)實(shí)現(xiàn)代碼如下:</p><p>  package org.yeeku.dao;</p><p>  import java.util.List;</p><p>  import java.util.ArrayList;</p><p>  import java.util.Ite

43、rator;</p><p>  import org.springframework.orm.hibernate3.support.HibernateDaoSupport;</p><p>  import org.yeeku.model.*;</p><p>  import org.yeeku.business.*;</p><p> 

44、 public class AuctionUserDaoHibernate extends HibernateDaoSupport implements AuctionUserDao </p><p><b>  {</b></p><p><b>  /**</b></p><p>  * 根據(jù)id查找用戶</p

45、><p>  * @param id 需要查找的用戶id</p><p><b>  */ </b></p><p>  public AuctionUser get(Integer id)</p><p><b>  {</b></p><p>  return (Aucti

46、onUser)getHibernateTemplate().get(AuctionUser.class , id);</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 增加用戶</b></p><p>  * @

47、param user 需要增加的用戶</p><p><b>  */ </b></p><p>  public void save(AuctionUser user)</p><p><b>  {</b></p><p>  getHibernateTemplate().save(

48、user);</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 修改用戶</b></p><p>  * @param user 需要修改的用戶</p><p><b>  */

49、 </b></p><p>  public void update(AuctionUser user)</p><p><b>  {</b></p><p>  getHibernateTemplate().saveOrUpdate(user);</p><p><b>  }</b&g

50、t;</p><p><b>  /**</b></p><p><b>  * 刪除用戶</b></p><p>  * @param id 需要?jiǎng)h除的用戶id</p><p><b>  */ </b></p><p>  public void

51、delete(Integer id)</p><p><b>  {</b></p><p>  getHibernateTemplate().delete(getHibernateTemplate().get(AuctionUser.class , id));</p><p><b>  }</b></p>

52、<p><b>  /**</b></p><p><b>  * 刪除用戶</b></p><p>  * @param kind 需要?jiǎng)h除的用戶</p><p><b>  */ </b></p><p>  public void delete(Auctio

53、nUser user)</p><p><b>  {</b></p><p>  getHibernateTemplate().delete(user);</p><p><b>  }</b></p><p><b>  /**</b></p><p&g

54、t;<b>  * 查詢(xún)?nèi)坑脩?lt;/b></p><p>  * @return 獲得全部用戶</p><p><b>  */ </b></p><p>  public List findAll()</p><p><b>  {</b></p><p&

55、gt;  return getHibernateTemplate().find("from AuctionUser");</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 根據(jù)用戶名,密碼查找用戶</p><p>  *

56、@param username 查詢(xún)所需的用戶名</p><p>  * @param pass 查詢(xún)所需的密碼</p><p>  * @return 用戶名,密碼對(duì)應(yīng)的用戶的id</p><p><b>  */ </b></p><p>  public Integer findUserByNameAndPass(

57、String username , String pass)</p><p><b>  {</b></p><p>  String[] args = {username , pass};</p><p>  List ul = getHibernateTemplate().find("from AuctionUser au whe

58、re au.username = ? and au.userpass = ?" , args);</p><p>  if (ul.size() == 1)</p><p><b>  {</b></p><p>  AuctionUser au = (AuctionUser)ul.get(0);</p><p&g

59、t;  return (Integer)au.getId();</p><p><b>  }</b></p><p>  return null;</p><p><b>  }</b></p><p><b>  }</b></p><p>  動(dòng)作

60、類(lèi)將會(huì)根據(jù)此類(lèi)中的方法進(jìn)行數(shù)據(jù)的增、刪、改及查等操作。</p><p>  其他數(shù)據(jù)訪問(wèn)層的xml文件和Dao類(lèi)如下表:</p><p>  表3-5-2 對(duì)象模型與xml文件對(duì)應(yīng)表</p><p>  在org.yeeku.service包中包含兩個(gè)類(lèi),分別是接口AuctionManager及其實(shí)現(xiàn)類(lèi)AuctionManagerImpl。此類(lèi)的作用完成了系統(tǒng)的所

61、有的邏輯功能。</p><p><b>  四 算法描述與實(shí)現(xiàn)</b></p><p>  4.1 實(shí)現(xiàn)瀏覽拍賣(mài)物品種類(lèi)頁(yè)面 </p><p><b> ?。?)表示層實(shí)現(xiàn)</b></p><p>  通過(guò)查看商品種類(lèi)界面,點(diǎn)擊某一種類(lèi)鏈接時(shí),就直接將請(qǐng)求轉(zhuǎn)發(fā)給動(dòng)作viewItem.do處理。最后轉(zhuǎn)

62、向?qū)嶋H的主頁(yè)面(頁(yè)面名稱(chēng)為“viewItem.jsp”)即可。在struts-config.xml文件中的設(shè)置如下:</p><p>  <action path="/viewItem"</p><p>  type="org.springframework.web.struts.DelegatingActionProxy"</p>

63、<p>  scope="request" </p><p>  validate="false"</p><p>  parameter="method"></p><p>  <forward name="input" path="/WEB-INF

64、/jsp/viewKind.do"/></p><p>  <forward name="success" path="/WEB-INF/jsp/viewItem.jsp"/></p><p><b>  </action></b></p><p>  點(diǎn)擊主頁(yè)導(dǎo)航

65、欄上瀏覽拍賣(mài)物品鏈接即可進(jìn)入瀏覽物品種類(lèi)頁(yè)面。如圖4-1所示。</p><p>  圖4-1 瀏覽某類(lèi)所有物品界面</p><p><b>  (2)實(shí)現(xiàn)業(yè)務(wù)邏輯</b></p><p>  瀏覽某一種類(lèi)拍賣(mài)物品頁(yè)面的顯示涉及到得業(yè)務(wù)邏輯為org.yeeku.struts包下的ViewItemAction類(lèi),他用于從數(shù)據(jù)庫(kù)中調(diào)出數(shù)據(jù)供頁(yè)面顯示。

66、其中涉及商品類(lèi)別的分類(lèi)顯示代碼如下:</p><p>  import java.util.List;</p><p>  import org.yeeku.service.AuctionManager;</p><p>  import org.yeeku.exception.AuctionException;</p><p>  impo

67、rt org.yeeku.struts.base.BaseAction;</p><p>  import org.yeeku.model.*;</p><p><b>  /**</b></p><p>  * @author shm songhongmei_529@163.com</p><p>  * @vers

68、ion 1.0</p><p>  * 處理商品顯示動(dòng)作 </p><p><b>  */</b></p><p>  public class ViewItemAction extends BaseAction</p><p><b>  {</b></p><p>

69、  public ViewItemAction()</p><p><b>  { }</b></p><p>  public ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.serv

70、let.http.HttpServletResponse response) throws AuctionException</p><p><b>  {</b></p><p>  String id = request.getParameter("kindId");</p><p>  if (id == null |

71、| id.trim().equals("") )</p><p><b>  {</b></p><p>  request.setAttribute("errMsg" , "您必須選擇有效的種類(lèi)");</p><p>  return mapping.findForward(&quo

72、t;input");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  String kind = mgr.getKind(Integer.parseInt(id)

73、);</p><p>  List items = mgr.getItemsByKind(Integer.parseInt(id) );</p><p>  request.setAttribute("kind" , kind); request.setAttribute("items" , items);</p><p&g

74、t;  return mapping.findForward("success");</p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層</p><p>  涉及到顯示商品種類(lèi)的數(shù)據(jù)訪問(wèn)層方法AuctionM

75、anager的getAllItem()方法,并在該方法中調(diào)用為ItemDao的findItemByKind(Integer kindId)方法,實(shí)現(xiàn)代碼如下:</p><p>  public List getItemsByKind(int kindId) throws AuctionException</p><p><b>  {</b></p>&

76、lt;p><b>  try</b></p><p><b>  {</b></p><p>  List result = new ArrayList();</p><p>  List items = itemDao.findItemByKind(new Integer(kindId));</p>

77、<p>  for (Iterator it = items.iterator() ; it.hasNext() ; )</p><p><b>  {</b></p><p>  Item item = (Item)it.next();</p><p>  ItemBean ib = new ItemBean();</p>

78、;<p>  initItem(ib,item);</p><p>  result.add(ib);</p><p><b>  }</b></p><p>  return result;</p><p><b>  }</b></p><p>  catc

79、h (Exception e)</p><p><b>  {</b></p><p>  log.debug(e.getMessage());</p><p>  throw new AuctionException("底層業(yè)務(wù)異常,請(qǐng)重新試");</p><p><b>  }</

80、b></p><p><b>  }</b></p><p>  public List findItemByKind(Integer kindId)</p><p><b>  {</b></p><p>  return getHibernateTemplate().find("

81、from Item as i where i.kind.id = ? and i.itemState.id = 1" , kindId);</p><p><b>  } </b></p><p>  其中使用的HQL語(yǔ)句為“from Item as i where i.kind.id = ? and i.itemState.id = 1 , kind

82、Id”,即從kind數(shù)據(jù)表中取出所有記錄。</p><p>  4.2 實(shí)現(xiàn)查看物品詳細(xì)信息及出價(jià)界面</p><p>  在顯示同一種類(lèi)所有物品的界面(viewItem.jsp),通過(guò)點(diǎn)擊商品名稱(chēng)進(jìn)入顯示商品詳細(xì)信息界面(ItemDetail.jsp)。此時(shí)可以對(duì)自己喜歡的商品進(jìn)行出價(jià)。如圖4-2所示。</p><p>  圖4-2 商品詳細(xì)信息界面</p&

83、gt;<p>  此頁(yè)面結(jié)合表達(dá)式語(yǔ)言及struts的標(biāo)簽庫(kù)。處理此表單的動(dòng)作為bid.do。它由Struts的Action類(lèi)的子類(lèi)addBidAction實(shí)現(xiàn),在其中加入業(yè)務(wù)邏輯并將主頁(yè)實(shí)際所需要的數(shù)據(jù)從數(shù)據(jù)庫(kù)中提取出來(lái)保存到request對(duì)象或其他對(duì)象中,競(jìng)價(jià)成功后頁(yè)面會(huì)通過(guò)viewBid.do跳轉(zhuǎn)到查看自己競(jìng)標(biāo)頁(yè)面(頁(yè)面名稱(chēng)為“viewBid.jsp”)。</p><p>  在struts-

84、config.xml文件中的設(shè)置如下:</p><p>  <!-- ===============全局ActionForm邏輯名稱(chēng)及路徑配置 --></p><p>  <form-beans></p><p>  <form-bean name="bidForm"type="org.apache.str

85、uts.validator.DynaValidatorForm"></p><p>  <form-property name="itemId" type="java.lang.String"/></p><p>  <form-property name="bidPrice" type=&quo

86、t;java.lang.String"/></p><p>  <form-property name="maxPrice" type="java.lang.String"/></p><p>  <form-property name="vercode" type="java.lang

87、.String"/></p><p>  </form-bean> </p><p>  </form-beans></p><p>  <!-- ============Action類(lèi)及其訪問(wèn)路徑的映射配置 --></p><p>  <action-mappings>&

88、lt;/p><p>  <action path="/viewBid" type="org.springframework.web.struts.DelegatingActionProxy"</p><p>  scope="request"</p><p>  validate="false&

89、quot;</p><p>  parameter="method"></p><p>  <forward name="success" path="/WEB-INF/jsp/viewBid.jsp"/></p><p>  <forward name="login&qu

90、ot; path="/WEB-INF/jsp/login.jsp"/> </p><p>  <action path="/viewDetail" type="org.springframework.web.struts.DelegatingActionProxy"</p><p>  scope

91、="request"</p><p>  validate="false"</p><p>  parameter="method"></p><p>  <forward name="error" path="/WEB-INF/jsp/error.jsp"

92、;/> </p><p>  <forward name="success" path="/WEB-INF/jsp/viewDetail.jsp"/></p><p><b>  </action></b></p><p>  <action path="/b

93、id" type="org.springframework.web.struts.DelegatingActionProxy"</p><p>  name="bidForm"</p><p>  scope="request"</p><p>  validate="true"

94、;</p><p>  input="input"></p><p>  <forward name="input" path="/viewDetail.do"/></p><p>  <forward name="success" path="/vie

95、wBid.do"/></p><p>  <forward name="login" path="/WEB-INF/jsp/login.jsp"/></p><p><b>  </action></b></p><p>  </action-mappings

96、></p><p>  4.3 實(shí)現(xiàn)查看競(jìng)得的商品界面</p><p><b> ?。?)表示層實(shí)現(xiàn)</b></p><p>  點(diǎn)擊查看競(jìng)得的物品鏈接時(shí),就直接將請(qǐng)求轉(zhuǎn)發(fā)給動(dòng)作viewItemSu.do處理。最后轉(zhuǎn)向?qū)嶋H的主頁(yè)面(頁(yè)面名稱(chēng)“viewItemSu.jsp”)。</p><p><b>  

97、(2)實(shí)現(xiàn)業(yè)務(wù)邏輯</b></p><p>  在org.yeeku.schdule包下CheckWinner類(lèi)繼承了TimerTask,實(shí)現(xiàn)每一天自動(dòng)檢查競(jìng)拍獲勝者,主要代碼如下:</p><p>  package org.yeeku.schedule;</p><p>  import java.util.TimerTask;</p>

98、<p>  import org.yeeku.service.AuctionManager;</p><p>  import org.yeeku.exception.AuctionException;</p><p>  public class CheckWiner extends TimerTask</p><p><b>  {<

99、/b></p><p>  private AuctionManager mgr;</p><p>  public void setMgr(AuctionManager mgr)</p><p><b>  {</b></p><p>  this.mgr = mgr;</p><p>&

100、lt;b>  }</b></p><p>  public void run()</p><p><b>  {</b></p><p>  System.out.println("---------------------");</p><p><b>  try<

101、/b></p><p><b>  {</b></p><p>  mgr.updateWiner();</p><p><b>  }</b></p><p>  catch (AuctionException ae)</p><p><b>  {<

102、/b></p><p>  ae.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層</p><p>  涉及到獲得贏取者的數(shù)據(jù)訪問(wèn)層方法AuctionManag

103、er的updateWiner()方法,并在該方法中調(diào)用為ItemDao的findItemByState (Integer stateId)方法,實(shí)現(xiàn)代碼如下:</p><p>  //根據(jù)時(shí)間來(lái)修改物品的贏取者</p><p>  public void updateWiner()throws AuctionException</p><p><b>  

104、{</b></p><p>  List itemList = itemDao.findItemByState(new Integer(1));</p><p>  for (int i = 0 ; i < itemList.size() ; i++ )</p><p><b>  {</b></p><p

105、>  Item item = (Item)itemList.get(i);</p><p>  if (!item.getEndtime().after(new Date()))</p><p><b>  {</b></p><p>  AuctionUser au= bidDao.findUserByItemAndPrice(item

106、.getId() , item.getMaxPrice());</p><p>  if (au != null)</p><p><b>  {</b></p><p>  item.setWiner(au);</p><p>  item.setItemState(stateDao.get(new Integer(2

107、)));</p><p>  itemDao.save(item);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  item.setItemState(s

108、tateDao.get(new Integer(3)));</p><p>  itemDao.save(item);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

109、;<b>  }</b></p><p><b>  }</b></p><p><b>  五 結(jié)論 </b></p><p>  整個(gè)設(shè)計(jì)主要使用了SSH技術(shù)。在設(shè)計(jì)網(wǎng)上拍賣(mài)系統(tǒng)時(shí),需要對(duì)功能需求考慮完善。要求運(yùn)用SSH技術(shù)對(duì)系統(tǒng)做好整體構(gòu)架,這對(duì)我來(lái)說(shuō)是一個(gè)不小的難題。隨著設(shè)計(jì)程度的不斷深入,又

110、遇到了一些早期沒(méi)有想到的問(wèn)題。特別是一些細(xì)節(jié)問(wèn)題。為了解決這些問(wèn)題,有時(shí)還要對(duì)幾個(gè)模塊進(jìn)行大幅度的修改。在設(shè)計(jì)中,還需要進(jìn)行細(xì)致的測(cè)試工作,以發(fā)現(xiàn)程序的錯(cuò)誤和功能上的不足。</p><p>  由于時(shí)間和個(gè)人技術(shù)關(guān)系,本系統(tǒng)還有一些不足和值得改進(jìn)的地方,比如說(shuō)可以在系統(tǒng)中使用數(shù)據(jù)庫(kù)緩沖池技術(shù),這樣可以減少了數(shù)據(jù)庫(kù)的連接時(shí)間并減輕服務(wù)器的負(fù)擔(dān)。再比如說(shuō)查詢(xún)功能,可以進(jìn)行按關(guān)鍵字查詢(xún),這樣系統(tǒng)的靈活性就會(huì)有明顯的提高

111、。通過(guò)這次課程設(shè)計(jì),提高了我在系統(tǒng)整體設(shè)計(jì)上的能力,增長(zhǎng)了分析、解決問(wèn)題的經(jīng)驗(yàn),對(duì)一些知識(shí)有了更深一步的掌握??梢哉f(shuō),這次課程設(shè)計(jì)既鍛煉了我動(dòng)腦分析問(wèn)題的能力,又鍛煉了我動(dòng)手解決實(shí)際問(wèn)題的能力,這將對(duì)我以后的學(xué)習(xí)起到不可估量的作用。</p><p>  通過(guò)課程設(shè)計(jì)這次磨礪,我的能力也提高了。所以它對(duì)于我們來(lái)說(shuō)有著十分重要的意義。我會(huì)運(yùn)用從中得到的寶貴經(jīng)驗(yàn)來(lái)指導(dǎo)我今后的學(xué)習(xí)和工作,不斷的實(shí)踐,不斷地學(xué)習(xí),讓自己變

112、得更加充實(shí)自己,更適合于軟件行業(yè)發(fā)展的需要。</p><p><b>  附錄:源代碼</b></p><p>  商品分類(lèi)區(qū)動(dòng)態(tài)實(shí)現(xiàn)代碼如下:</p><p>  <logic:iterate id="kind" name="kinds" indexId="index">

113、</p><p>  <tr class="pt9" height="24"></p><p>  <td bgcolor="#FFFFFF">種類(lèi)名</td></p><p>  <td bgcolor="#FFFFFF"><a h

114、ref='viewItem.do kindId=<bean:write name="kind" property="id"/>'><bean:write name="kind" property="kindName"/></a></td></p><p><b

115、>  </tr></b></p><p>  <tr class="pt9" height="24"></p><p>  <td bgcolor="#FFFFFF">種類(lèi)描述</td></p><p>  <td bgcolor=&q

116、uot;#FFFFFF"><bean:writename="kind"</p><p>  property="kindDesc"/></p><p><b>  </td></b></p><p><b>  </tr></b>&

117、lt;/p><p>  </logic:iterate></p><p>  查看某種類(lèi)所有商品界面主要代碼如下:</p><p>  <table width="780" align="center" cellspacing=0 background="images/bodybg.jpg"&

118、gt;</p><p><b>  <tr></b></p><p><b>  <td></b></p><p><b>  <br></b></p><p>  <table width=80% border=0 align=&qu

119、ot;center" cellpadding=0 cellspacing="1" bgcolor="#CCCCCC"></p><p>  <tr bgcolor="#e1e1e1" ></p><p>  <td colspan="5" ><div class=&

120、quot;mytitle">當(dāng)前種類(lèi)是:<bean:write name="kind"/></div></td> </p><p><b>  </tr></b></p><p>  <tr class="pt9" height="30"&

121、gt;</p><p>  <td bgcolor="#FFFFFF"><b>物品名</b></td></p><p>  <td bgcolor="#FFFFFF"><b>起拍時(shí)間</b></td></p><p>  <t

122、d bgcolor="#FFFFFF"><b>最高價(jià)格</b></td></p><p>  <td bgcolor="#FFFFFF"><b>所有者</b></td></p><p>  <td bgcolor="#FFFFFF"&g

123、t;<b>物品備注</b></td></p><p><b>  </tr></b></p><p>  <logic:iterate id="item" name="items" indexId="index"></p><p&

124、gt;  <tr class="pt9" height="24"></p><p>  <td bgcolor="#FFFFFF">< ahref='viewDetail.do?itemId=<bean:write name="item" property="id"/&g

125、t;'><bean:write name="item" property="name"/></a></td></p><p>  <td bgcolor="#FFFFFF"><bean:write name="item" property="addTime&

126、quot;/></td></p><p>  <td bgcolor="#FFFFFF"><bean:write name="item" property="maxPrice"/></td></p><p>  <td bgcolor="#FFFFFF"

127、;><bean:write name="item" property="owner"/></td></p><p>  <td bgcolor="#FFFFFF"><bean:write name="item" property="pic"/></td&g

128、t;</p><p><b>  </tr></b></p><p>  </logic:iterate></p><p>  商品類(lèi)別的分類(lèi)顯示代碼如下:</p><p>  import java.util.List;</p><p>  import org.yeek

129、u.service.AuctionManager;</p><p>  import org.yeeku.exception.AuctionException;</p><p>  import org.yeeku.struts.base.BaseAction;</p><p>  import org.yeeku.model.*;</p><p

130、><b>  /**</b></p><p>  * @author shm songhongmei_529@163.com</p><p>  * @version 1.0</p><p>  * 處理商品顯示動(dòng)作 </p><p><b>  */</b></p><

131、;p>  public class ViewItemAction extends BaseAction</p><p><b>  {</b></p><p>  public ViewItemAction()</p><p><b>  { }</b></p><p>  public

132、ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws AuctionException</p><p><b>  {</b

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論