版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- j2ee課程設(shè)計(jì)超市收銀系統(tǒng)
- 基于j2ee的c2c網(wǎng)上拍賣(mài)系統(tǒng)—畢業(yè)設(shè)計(jì)論文
- 基于j2ee的網(wǎng)上購(gòu)物商城設(shè)計(jì)
- j2ee課程設(shè)計(jì)報(bào)告--基于ssh的個(gè)人博客系統(tǒng)
- 基于J2EE的網(wǎng)上訂餐系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于J2EE的網(wǎng)上花店管理系統(tǒng).pdf
- 基于J2EE技術(shù)的網(wǎng)上商城系統(tǒng)設(shè)計(jì).pdf
- 基于J2EE網(wǎng)上考試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于J2EE的網(wǎng)上購(gòu)物系統(tǒng)設(shè)計(jì)與開(kāi)發(fā).pdf
- 課程設(shè)計(jì)---基于j2ee的公交查詢(xún)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于J2EE的網(wǎng)上考試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于J2EE的網(wǎng)上辦稅系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于J2EE架構(gòu)的網(wǎng)上閱卷系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于J2EE網(wǎng)上納稅綜合管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于J2EE的網(wǎng)上閱卷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于J2EE的網(wǎng)上選課系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于j2ee的網(wǎng)上銀行系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- j2ee網(wǎng)上商城畢業(yè)論文
- 基于J2EE網(wǎng)上書(shū)店系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于j2ee的網(wǎng)上書(shū)店系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論