《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第14章_第1頁
《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第14章_第2頁
《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第14章_第3頁
《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第14章_第4頁
《JavaWeb程序設(shè)計基礎(chǔ)教程》課件第14章_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第14章

綜合實訓(xùn):購物車管理和訂單管理

14.1實訓(xùn)的目標(biāo)

14.2存儲結(jié)構(gòu)

14.3實訓(xùn)指導(dǎo)

小結(jié)

14.1實?訓(xùn)?的?目?標(biāo)

購物車管理功能包括如下幾個方面:

●用戶在查看圖書詳細(xì)情況的時候,可以把當(dāng)前圖書添加到購物車。

●如果用戶的購物車中有物品,則隨時可以查看購物車中的物品。

●用戶在查看購物車中物品的時候,可以修改購物車中物品的數(shù)量,也可以刪除購物車中的某件物品。

●用戶在查看購物車的時候,可以下訂單。下訂單的時候,如果不是注冊用戶,則可以讓用戶輸入訂單所需信息。訂單管理功能包括如下幾個方面:

●管理員可以查看訂單,在顯示訂單的時候先顯示訂單列表。要處理某個訂單時,可以點擊查看該訂單的詳細(xì)情況。

●在查看訂單的時候,如果要處理,則只需修改訂單狀態(tài)即可。

14.2存

結(jié)

構(gòu)

訂單處理需要保存訂單信息。通常訂單需要使用兩張表保存,一張表保存訂單的基本信息,另一張表保存訂單的詳細(xì)信息。

訂單基本信息表的表結(jié)構(gòu)可以參考表14.1。

表14.1訂

表14.2訂單明細(xì)表

14.3實

訓(xùn)

導(dǎo)

14.3.1購物車的基本原理

讀者一定使用過超市中的購物車,顧客在超市中可以隨心所欲地向購物車中添加物品,可以隨時增加或者減少某種物品的數(shù)量,在選擇物品的過程中也可以放棄某些已經(jīng)選擇的物品。Web用戶訪問網(wǎng)站的過程可能會持續(xù)很長時間,在這個過程中必須保存購物車,但是購物車如何保存呢?在Web應(yīng)用中,可以保存信息的地方包括當(dāng)前頁面pageContext、請求request、會話session、應(yīng)用application和數(shù)據(jù)庫。pageContext保存的信息只能在當(dāng)前頁面使用,所以不能使用pageContext存儲購物車。request中保存的信息只能在本次請求中使用,因為在訪問網(wǎng)站的過程中會有很多request,所以也不能使用request存儲購物車。application中存儲的信息是所有用戶共享的,而每個購物車中存儲的信息是與個人相關(guān)的,所以也不能使用application存儲購物車。如果存儲在數(shù)據(jù)庫中,用戶在訪問的過程中需要不斷修改數(shù)據(jù)庫,并且需要記錄與哪個用戶相關(guān),管理比較麻煩,所以通常也不使用數(shù)據(jù)庫存儲購物車。而session中存儲的是與個人相關(guān)的信息,并且持續(xù)的時間會與用戶的訪問時間一樣長,所以使用session存儲購物車。

使用session存儲購物車,購物車中的物品在不斷發(fā)生變化,那么采用什么數(shù)據(jù)結(jié)構(gòu)表示購物車呢?因為購物車中可能會有很多物品,所以不能使用普通對象,必須使用集合。在Java中,集合可以使用數(shù)組和Collection框架中的集合對象表示。但是因為數(shù)組是長度固定的,而購物車中的物品是變化的,所以不能使用數(shù)組。因此通常使用Collection框架中的ArrayList或者Vector表示購物車。ArrayList或者Vector對象表示多個對象的集合,每個元素就是一個對象。ArrayList和Vector的用法非常類似。

購物車中可能會有很多物品,如何表示每種類型的物品呢?我們稱購物車中的每項物品為購物條目,通常包含物品信息和數(shù)量。在本書的應(yīng)用中物品信息就是Book對象。

購物條目可以定義如下:

publicclassBookItemimplementsSerializable

{

//圖書

privateBookbook;

//數(shù)量

privateintquantity;

publicvoidsetBook(Bookbook)

{

this.book=book;

}

publicBookgetBook()

{

returnbook;

}

publicvoidsetQuantity(intquantity)

{

this.quantity=quantity;

}

publicintgetQuantity()

{

returnquantity;

}

}

購物車的數(shù)據(jù)結(jié)構(gòu)可以參考下面的代碼:

publicclassCartimplementsjava.io.Serializable{

//圖書列表

ArrayListbooks;

//對應(yīng)的用戶

Stringuserid;

//電話

Stringphone;

//地址

Stringaddress;

//訂單編號

Stringorderid;

//添加圖書

publicArrayListaddBook(Stringbookid){

}

//刪除圖書

publicArrayListremoveBook(Stringbookid)[

}

//修改圖書數(shù)量

publicArrayListupdateBookQuantity(Stringbookid,intquantity){

}

//清空圖書

pubicvoidclear(){

}

//返回所有圖書

publicArrayListgetBooks(){

returnbooks;

}

}購物車的應(yīng)用主要有以下幾個方面:

(1)創(chuàng)建購物車:

ArrayListbooks=newArrayList();

(2)向購物車中添加訂單項:

BookItemitem=newBookItem();

books.add(item);

(3)從購物車中刪除信息:

books.remove(item);

或者

books.remove(index);

前者根據(jù)物品刪除,后者根據(jù)索引號刪除。

(4)用Java代碼遍歷購物車中的信息:

Object[]o=books.toArray();

for(inti=0;i<o.length;i++)

{

BookItemitem=(BookItem)o[i];

//對item進(jìn)行處理

}

(5)界面中使用標(biāo)準(zhǔn)標(biāo)簽庫遍歷購物車的代碼:

<c:forEachvar="item"items="booklist">

<!--每個item進(jìn)行處理-->

</c:forEach>

(6)修改購物車中的信息,需要先查找到要修改的信息,然后修改。查找可以使用遍歷的方式,修改可以使用下面的代碼:

books.set(index,item);

14.3.2購物車管理

1.為圖書瀏覽過程添加購物車功能

該功能涉及以下過程:

●在圖書信息查看界面上添加超鏈接“添加到購物車”。

●編寫JavaBean完成添加過程。

●編寫Servlet接收“添加到購物車”請求。

下面分別描述關(guān)鍵點。

(1)修改圖書信息查看界面。超鏈接的代碼是:

<ahref="目標(biāo)文件">添加到購物車</a>

其中,目標(biāo)文件是要訪問的Servlet的映射路徑。因為添加的時候需要知道書號,所以應(yīng)該把書號作為參數(shù)傳遞到服務(wù)器,可以使用“?”傳遞。格式如下:

<ahref="目標(biāo)文件?bid=${book.bid}">添加到購物車</a>

這里假設(shè)當(dāng)前圖書信息保存在book變量中。

(2)在購物車JavaBean中完成添加過程。購物車JavaBean主要用來封裝購物車信息,主要成員變量如下:

ArrayListbooks;

向購物車添加圖書需要在JavaBean中添加一個addBook方法,該方法的參數(shù)是圖書的編號,返回值是圖書列表。該方法定義如下:

publicArrayListaddBook(Stringbookid)方法體執(zhí)行的主要過程如下:

根據(jù)bookid查找圖書信息。

判斷購物車中是否已經(jīng)存在圖書:

●如果不存在,則創(chuàng)建購物車對象,然后以圖書和1(數(shù)量)構(gòu)造訂單項,然后把訂單項添加到列表中。

●如果存在,則遍歷圖書列表,查看是否有當(dāng)前圖書。如果有,就把圖書列表中該圖書對應(yīng)的訂單項的數(shù)量增加1(假設(shè)每次添加一本);如果沒有,就以圖書和1(數(shù)量)構(gòu)造訂單項,然后把訂單項添加到列表中。

③把圖書列表返回。

(3)編寫Servlet,進(jìn)行控制。Servlet主要完成控制功能,功能如下:

●接收用戶添加購物車的請求,然后獲取要添加的圖書的編號。

●從session中獲取購物車信息。

●以購物車信息為參數(shù)創(chuàng)建購物車管理JavaBean。

●以圖書編號為參數(shù)調(diào)用購物車管理JavaBean的addBook方法。

●把a(bǔ)ddBook返回的結(jié)果(購物車信息)重新保存到session中。

●跳轉(zhuǎn)到圖書查看界面。

2.添加購物車查看功能

購物車信息保存在session中,所以查看購物車信息時只需從session中獲取然后顯示即可,不需要控制文件Servlet和JavaBean。

添加購物車查看功能的步驟是:首先需要在所有相關(guān)的界面添加“查看購物車”功能超鏈接,然后編寫查看購物車界面。主要代碼如下:

<c:iftest="{emptysessionScope.booklist}">

購物車中沒有任何圖書

</c:if>

<c:iftest="{!emptysessionScope.booklist}">

購物車中物品如下

<c:setvar="totalPrice"value="0">

<table>

<tr>

<th>書名</th>

<th>數(shù)量</th>

<th>單價</th>

<th>合計</th>

</tr>

<!--booklist表示圖書列表,item表示某一種圖書

-->

<c:forEachvar="item"items="booklist">

<tr>

<!--圖書的名字

-->

<td>${item.book.bookname}</td>

<!--圖書的數(shù)量

-->

<td>${item.quantity}</td>

<!--圖書的單價

-->

<td>${item.book.price}</td>

<!--某一種圖書的總價

-->

<td>${item.book.price*item.quantity}</td>

<!--計算所有圖書的總價

-->

<c:setvar="totalPrice"value="${totalPrice+item.book.price*item.quantity}"/>

</tr>

</c:forEach>

<tr>

<tdcolomnSpan="3">總計</td>

<td>${totalPrice}</td>

</tr>

</table>

</c:if>

3.添加圖書數(shù)量修改功能

添加圖書數(shù)量修改功能時,首先應(yīng)該有修改界面,然后有接收修改請求的Servlet,最后必須有完成修改的方法。

(1)界面。應(yīng)該在查看購物車界面添加“修改”。修改的時候需要確定兩項信息:圖書編號和數(shù)量。每種類型的圖書數(shù)量都可以修改,所以需要給出與圖書種類相同的修改按鈕。

為了在點擊按鈕的時候能夠修改相應(yīng)圖書的數(shù)量,對于每種圖書都使用一個form,每個form包含相應(yīng)的按鈕、數(shù)量輸入框和編號。因為編號不能修改,所以需要使用隱藏域。

關(guān)鍵代碼參考如下:

<tr>

</formaction="目標(biāo)文件"method="post">

<td>${item.book.bookname}</td>

<td><inputtype="text"name="quantity"value="${item.quantity}"></td>

<td>${item.book.price}</td>

<td>${item.book.price*item.quantity}</td>

<inputtype="hidden"name="bookid"value="${item.book.bookid}">

<td><inputtype="submit"value="修改"></td>

<c:setvar="totalPrice"value="${totalPrice+item.book.price*item.quantity}"/>

</form>

</tr>

(2)在購物車JavaBean中添加修改數(shù)量功能。需要在購物車JavaBean中添加一個方法updateQuantity,方法的參數(shù)是圖書編號和數(shù)量,返回值是數(shù)量修改后的圖書列表,方法的定義如下:

publicArrayListupdateBookQuantity(Stringbookid,intquantity)

方法的主要執(zhí)行過程如下:

●遍歷購物車,查找要修改的圖書對應(yīng)的訂單項。

●修改該訂單項的數(shù)量。

●返回圖書列表。

(3)編寫Servlet進(jìn)行控制。Servlet主要完成以下控制功能:

●接收用戶的修改圖書數(shù)量的請求,獲取要修改的圖書的編號和數(shù)量。

●從session中獲取購物車信息。

●以購物車信息為參數(shù)創(chuàng)建購物車管理JavaBean。

●以圖書編號和數(shù)量為參數(shù)調(diào)用購物車管理JavaBean的updateBookQuantity方法。

●把updateBookQuantity方法返回的結(jié)果(購物車信息)重新保存到session中。

●跳轉(zhuǎn)到購物車信息查看界面。

4.添加購物車刪除功能

購物車刪除功能和圖書數(shù)量修改功能非常類似,并且相對更簡單。

界面的修改方法基本相同,并且刪除功能不需要輸入框。

在購物車JavaBean中編寫的刪除方法與修改方法基本相同,查找到之后刪除即可。

控制器Servlet的功能基本相同。

5.添加清空購物車功能

清空購物車就是刪除購物車中的所有訂單項,只要直接刪除session中存儲的購物車即可??梢允褂孟旅娴拇a實現(xiàn)該功能:

<c:removevar="booklist"scope="session"/>

6.添加訂單生成功能

可以在訂單查看界面添加一個訂單生成按鈕。當(dāng)用戶點擊這個按鈕的時候,給出一個界面,讓用戶輸入送貨信息。如果用戶已經(jīng)登錄,則可以把用戶信息中相關(guān)的送貨信息顯示在相應(yīng)的位置。當(dāng)用戶輸入完信息之后,點擊確定按鈕,可以生成訂單。

該功能涉及的文件如下:訂單生成預(yù)處理Servlet、送貨信息輸入界面、購物車管理JavaBean、訂單生成處理Servlet及訂單生成反饋界面。

主要功能分別描述如下。

(1)訂單生成預(yù)處理Servlet。它完成的主要功能是判斷當(dāng)前用戶是否登錄,如果登錄則獲取用戶信息,然后把用戶信息保存在request中,使用request的setAttribute方法。然后跳轉(zhuǎn)到送貨信息輸入界面。使用RequestDisatcher的forward方法。

(2)送貨信息輸入界面。送貨信息主要包括收貨人、送貨地址和聯(lián)系電話。對這些信息應(yīng)該有要求,并且需要進(jìn)行驗證。要求收貨人必須大于4位小于10位。送貨地址應(yīng)該大于10位。聯(lián)系電話可以有兩個,第一個不能為空并且必須是7位以上,只能包含數(shù)字和連字符。第二個電話可以沒有,如果有則必須是7位以上,只能包含數(shù)字和連字符。

如果用戶已經(jīng)登錄,先提取用戶信息,然后保存在變量中。參考代碼如下:

<c:iftest="{!emptyuserinfo}">

<c:setvar="username"value="${userinfo.username}"/>

<c:setvar="phone"value="${userinfo.phone}"/>

<c:setvar="address"value="${userinfo.address}"/>

</c:if>

如果用戶沒有登錄,則變量中保存空字符串:

<c:iftest="{emptyuserinfo}">

<c:setvar="username"value=""/>

<c:setvar="phone"value=""/>

<c:setvar="address"value=""/>

</c:if>

之后就可以把這些信息顯示在相應(yīng)的輸入框中,例如:

<inputtype="text"name="address"value="${address}">

需要編寫客戶端代碼對用戶輸入信息進(jìn)行驗證。

(3)在購物車管理JavaBean中添加生成訂單的方法。該方法根據(jù)購物車中的信息和用戶輸入的送貨信息生成訂單。其返回值是訂單號。

該方法的定義如下:

publicStringproduceOrder()

該方法的基本處理過程如下:

●生成訂單號??梢杂泻芏喾N方式來生成訂單號,讀者可以使用年月日加上流水號,例如20070318000001,表示2007年3月18日的第一個訂單。

●開始一個事務(wù)。因為訂單和訂單項需要單獨寫入數(shù)據(jù)庫中,多個數(shù)據(jù)庫操作組成一個事務(wù),所以需要進(jìn)行事務(wù)處理。

●在數(shù)據(jù)庫中添加訂單。把用戶編號、用戶名、地址、電話和訂單號組成一個記錄,插入到訂單表中。

●把訂單項添加到數(shù)據(jù)庫中。對于每個訂單項,需要提取圖書編號,提取圖書數(shù)量,把圖書編號、圖書數(shù)量、訂單編號插入到訂單明細(xì)表中。

●提交事務(wù)。

●返回訂單號。

(4)訂單生成處理Servlet。其主要功能是接收用戶的送貨信息,并根據(jù)session中的圖書列表生成購物車對象,然后調(diào)用購物車對象的生成訂單方法?;具^程如下:

●獲取用戶輸入信息,通過request對象的getParameter方法。

●獲取session對象。

●從session中獲取用戶選擇的圖書列表。

●根據(jù)圖書列表構(gòu)造購物車。

●把用戶輸入的送貨信息賦值給購物車對象。

●調(diào)用購物車對象的生成訂單方法。

●把訂單號保存在request中。

●重定向到訂單生成反饋界面。

(5)訂單生成反饋界面。編寫界面對用戶響應(yīng),提示用戶訂單生成并顯示訂單信息。

14.3.3訂單管理

管理員可以使用訂單管理功能查看有哪些訂單,然后選擇訂單進(jìn)行處理,必要的時候可以查詢訂單,默認(rèn)地顯示還沒有處理的訂單。

1.訂單查看功能

訂單查看通常先看訂單列表,因為訂單可能比較多,所以應(yīng)該提供分頁顯示功能。在訂單列表中不會顯示訂單的詳細(xì)信息,如果要查看某個訂單的詳細(xì)情況,就選擇該訂單,然后詳細(xì)查看該訂單的所有訂單項。所以訂單查看涉及如下文件:訂單管理JavaBean、訂單列表查看Servlet、訂單列表界面、訂單詳細(xì)信息查看Servlet及訂單詳細(xì)信息查看界面。

主要功能分別描述如下:

(1)訂單管理JavaBean。訂單查看功能中涉及兩項查詢,查詢所有訂單和查詢某個訂單的詳細(xì)信息。這兩個功能在訂單管理JavaBean中完成。

查詢訂單,即從訂單表中查詢所有沒有被處理過的訂單,這個過程與前面介紹的用戶信息查詢完全相同。對于查詢到的每個訂單,使用一個order表示,然后把這些order對象封裝到ArrayList對象中,返回這個ArrayList對象。

查詢訂單的詳細(xì)信息,是根據(jù)訂單編號查詢某個訂單的所有訂單項。該功能與查詢某一個用戶的信息非常類似。該方法返回一個order對象。

(2)訂單列表查看Servlet。這個Servlet是訂單管理功能要訪問的第一個文件,其基本處理過程如下:

●創(chuàng)建訂單管理JavaBean的對象。

●調(diào)用訂單管理JavaBean對象的查詢訂單列表的方法。

●把訂單列表保存到request中。

●重定向到訂單列表界面。

(3)訂單列表查看界面。該界面完成的主要功能如下:

●顯示所有的訂單。

●在每個訂單上面添加一個超鏈接,連接到訂單詳細(xì)信息查看Servlet。

●在界面上添加訂單查詢功能。

●訂單數(shù)量較多的時候需要提供分頁顯示功能。

(4)訂單詳細(xì)信息查看Servlet。該功能主要是根據(jù)訂單的編號,查詢該訂單所涉及的所有訂單項。其主要處理過程如下:

●從請求對象request中獲取訂單編號。

●創(chuàng)建訂單管理JavaBean的對象。

●調(diào)用詳細(xì)信息查看方法。

●把查詢到的訂單詳細(xì)信息保存在request中。

●重定向到訂單詳細(xì)信息查看界面。

(5)訂單詳細(xì)信息查看界面??梢允褂?lt;c:forEach>標(biāo)簽顯示訂單的詳細(xì)信息。

2.訂單處理功能

該功能主要針對沒有處理過的訂單,在查看這些訂單的時候進(jìn)行處理。此過程涉及3個文件:訂單詳細(xì)信息查看界面、訂單管理JavaBean及訂單處理Servlet。

(1)訂單詳細(xì)信息查看界面。在訂單詳細(xì)信息查看界面中顯示信息的時候,如果該訂單還沒有被處理,則在該界面上顯示“處理該訂單”按鈕??梢允褂?lt;c:if>標(biāo)簽進(jìn)行控制。如果該訂單已經(jīng)處理過,則不顯示該按鈕。

(2)訂單管理JavaBean。在該JavaBean中添加一個訂單處理方法,即根據(jù)訂單編號修改訂單的狀態(tài),修改完之后查詢并返回訂單的相關(guān)信息。

(3)訂單處理Servlet。其主要功能是接收訂單編號,調(diào)用訂單

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論