Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第5、6章 購(gòu)物車模塊、基于MVC模式的訂單模塊_第1頁(yè)
Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第5、6章 購(gòu)物車模塊、基于MVC模式的訂單模塊_第2頁(yè)
Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第5、6章 購(gòu)物車模塊、基于MVC模式的訂單模塊_第3頁(yè)
Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第5、6章 購(gòu)物車模塊、基于MVC模式的訂單模塊_第4頁(yè)
Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第5、6章 購(gòu)物車模塊、基于MVC模式的訂單模塊_第5頁(yè)
已閱讀5頁(yè),還剩88頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

JavaWeb應(yīng)用開發(fā)第5章購(gòu)物車模塊■本章要點(diǎn)

商品詳細(xì)信息顯示實(shí)現(xiàn)添加商品到購(gòu)物車功能詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)顯示購(gòu)物車中的商品及金額修改購(gòu)物車中的商品JSP的錯(cuò)誤處理訂單生成功能詳細(xì)設(shè)計(jì)和具體實(shí)現(xiàn)第5章購(gòu)物車模塊■功能分析

會(huì)員在完成系統(tǒng)登錄后,可以進(jìn)行購(gòu)物直至生成訂單的一系列操作。第5章購(gòu)物車模塊■會(huì)員購(gòu)物活動(dòng)概圖

5.1商品詳細(xì)信息展示■功能說明

會(huì)員登錄后,購(gòu)物的操作入口是該件商品的詳細(xì)信息頁(yè)面,在該頁(yè)面上有“放入購(gòu)物車”操作功能。

5.1商品詳細(xì)信息展示■

流程分析及設(shè)計(jì)

●數(shù)據(jù)庫(kù)商品表操作類設(shè)計(jì) 在數(shù)據(jù)庫(kù)商品信息表操作類ProductDao中添加按商品編號(hào)查詢單個(gè)商品信息的方法selectOneProducts,參數(shù)是商品編號(hào)。 方法返回值是代表某件商品的GoodsEntity對(duì)象。可以使用該對(duì)象的getXxx方法獲取各個(gè)字段的內(nèi)容。

5.1商品詳細(xì)信息展示■

流程分析及設(shè)計(jì)

●商品詳細(xì)信息展示功能流程圖5.1商品詳細(xì)信息展示■編程詳解

創(chuàng)建showProductById.jsp,在頁(yè)面中引入數(shù)據(jù)庫(kù)商品信息表操作類ProductDao和實(shí)體類ProductEntity實(shí)現(xiàn)利用ProductDao的selectOneProducts方法從數(shù)據(jù)庫(kù)中檢索出會(huì)員想購(gòu)買的商品,檢索條件為商品編碼,該商品編碼通過頁(yè)面請(qǐng)求參數(shù)獲得。

5.1商品詳細(xì)信息展示■編程詳解

添加生成數(shù)據(jù)庫(kù)商品信息表操作類ProductDao的對(duì)象,調(diào)用selectOneProducts方法檢索商品信息放入ProductEntity對(duì)象goods中,查詢條件是商品的id號(hào)。<ahref="#“onClick="window.open('showProductById.jsp?id=<%=e.getId()%>','','width=500,height=200');">查看詳細(xì)內(nèi)容</a>5.1商品詳細(xì)信息展示■編程詳解

實(shí)現(xiàn)時(shí)將商品信息以提交表單的形式展現(xiàn),而表單的提交按鈕功能由頁(yè)面上“放入購(gòu)物車”鏈接實(shí)現(xiàn),表單的action設(shè)為cartAdd.jsp<formname=“form”method=“post”action=“../cart/cartAdd.jsp">…<inputname="picture"type="image"src="<%=goods.getPicture()%>"商品名稱:<%=goods.getName()%><inputtype="hidden"name="goodsId"value="<%=goods.getId()%>"/>…5.2添加商品到購(gòu)物車■功能說明

點(diǎn)擊“放入購(gòu)物車”操作功能,開始該商品的購(gòu)買流程,購(gòu)物成功的頁(yè)面。5.2添加商品到購(gòu)物車■流程分析及設(shè)計(jì)●購(gòu)物車設(shè)計(jì)購(gòu)物車中的商品需要記錄的只是商品的編號(hào)、商品出售的價(jià)格和數(shù)量,設(shè)計(jì)臨時(shí)實(shí)體類CartGoods,該類對(duì)象代表會(huì)員購(gòu)物車中的商品購(gòu)買信息。5.2添加商品到購(gòu)物車■添加商品到購(gòu)物車功能流程5.2添加商品到購(gòu)物車■編程詳解

●創(chuàng)建cartAdd.jsp,類Vector是java常用的集合類型,用于生成購(gòu)物車,購(gòu)物車?yán)锷唐稧oodsCart的實(shí)例對(duì)象是Vector類實(shí)例中的元素,可以利用Vector類的方法方便的實(shí)現(xiàn)對(duì)購(gòu)物車進(jìn)行維護(hù)。

<%@pageimport="java.util.*"%><%@pageimport="com.mycompany.cart.CartGoods"%>5.2添加商品到購(gòu)物車■編程詳解

●頁(yè)面添加到購(gòu)物車的商品信息、編號(hào)和價(jià)格是由頁(yè)面goodsShowOne.jsp以form表單提交的,使用request對(duì)象的getParameter方法獲取。

intgoodsID=Integer.parseInt(request.getParameter("goodsId"));floatgoodsPrice=Float.parseFloat(request.getParameter("price"));5.2添加商品到購(gòu)物車■編程詳解●生成臨時(shí)實(shí)體類GoodsCart的實(shí)例對(duì)象并賦值,此時(shí)系統(tǒng)設(shè)定商品的數(shù)量為1,此對(duì)象生成以后就準(zhǔn)備好添加到購(gòu)物車了。

CartGoodscartGoods=newCartGoods();cartGoods.ID=goodsID;cartGoods.price=goodsPrice;cartGoods.number=1;●將購(gòu)物車以session的屬性形式存放5.2添加商品到購(gòu)物車■編程詳解

●將新生成的或修改過的購(gòu)物車存放在session對(duì)象的屬性中,然后使用JSP內(nèi)置對(duì)象out在返回到客戶端的頁(yè)面上輸出一段JavaScript代碼,顯示購(gòu)物成功對(duì)話框,并將回到客戶端的頁(yè)面關(guān)閉。

session.setAttribute(“_CART_",cart);out.println("<scriptlanguage='javascript'>alert('購(gòu)買商品成功!');window.close();</script>");5.3顯示購(gòu)物車■功能說明在購(gòu)物車顯示頁(yè)面中列表顯示購(gòu)物車中所選商品的信息:如果沒有購(gòu)買商品,系統(tǒng)顯示“您還沒有購(gòu)物”提示。購(gòu)物車頁(yè)面上需要為會(huì)員提供繼續(xù)購(gòu)物、去收銀臺(tái)結(jié)賬、清空購(gòu)物車和修改某件購(gòu)物車中商品的數(shù)量等功能。5.3顯示購(gòu)物車■顯示購(gòu)物車的頁(yè)面預(yù)覽如下圖

5.3顯示購(gòu)物車■流程分析及設(shè)計(jì)

●購(gòu)物車顯示功能流程設(shè)計(jì)進(jìn)入購(gòu)物車顯示頁(yè)面之前判斷是否是已登錄會(huì)員。在購(gòu)物車顯示頁(yè)面中引入java實(shí)用工具類、代表會(huì)員所選商品的臨時(shí)實(shí)體類和商品信息表操作類。從session中獲取該會(huì)員專有的購(gòu)物車,判斷購(gòu)物車中有無(wú)商品,如果沒有商品,頁(yè)面給出提示信息,返回。依次取出會(huì)員購(gòu)物車中的商品,并生成代表所選商品的臨時(shí)實(shí)體類對(duì)象。5.3顯示購(gòu)物車■

流程分析及設(shè)計(jì)

●購(gòu)物車顯示功能流程圖5.3顯示購(gòu)物車■

流程分析及設(shè)計(jì)

●購(gòu)物車顯示設(shè)計(jì)遍歷購(gòu)物車,各商品的金額和總金額在購(gòu)物車遍歷中完成顯示。設(shè)計(jì)關(guān)鍵是要提供可供會(huì)員修改商品數(shù)量的功能,需要將此信息在頁(yè)面表單中顯示,在會(huì)員需要修改商品數(shù)量時(shí),以請(qǐng)求參數(shù)的形式提交給cartModify.jsp處理。5.3顯示購(gòu)物車■

流程分析及設(shè)計(jì)

●購(gòu)物車中商品數(shù)量修改設(shè)計(jì)如果在本頁(yè)面中實(shí)現(xiàn)對(duì)購(gòu)物車中特定商品數(shù)量修改,則頁(yè)面流程將比較復(fù)雜,也不利于將不同操作以模塊化分離提交給cartModify.jsp處理,由cartModify.jsp處理后再自動(dòng)返回到本頁(yè)面重新顯示購(gòu)物車?!褓?gòu)物車鏈接修改設(shè)計(jì)5.3顯示購(gòu)物車■編程詳解創(chuàng)建cartShow.jsp,在頁(yè)面中引入java實(shí)用工具類Vector和代表會(huì)員所選購(gòu)商品信息的臨時(shí)實(shí)體類GoodsCart,以及商品信息表操作類GoodsDao類。Vector類用于生成對(duì)象存放會(huì)員的購(gòu)物車,GoodsCart用于存放遍歷購(gòu)物車中的商品購(gòu)買信息,ProductDao類用于獲取商品的其他信息。

5.3顯示購(gòu)物車■編程詳解使用session對(duì)象的getAttribute方法獲取會(huì)員購(gòu)物車,如果為空,說明會(huì)員到目前還沒有選購(gòu)商品,系統(tǒng)也沒有為該會(huì)員生成過購(gòu)物車,此時(shí)頁(yè)面顯示“你還沒有購(gòu)物”提示信息,頁(yè)面處理流程終止。<%if(session.getAttribute("_CART_")==null){%>您還沒有購(gòu)物?。?!<%}else{%><!--顯示購(gòu)物車中商品信息-->

5.3顯示購(gòu)物車■編程詳解當(dāng)系統(tǒng)為該會(huì)員生成了購(gòu)物車,表明會(huì)員必定在購(gòu)物車中存有商品,此時(shí),使用Vector類的實(shí)例cart存放此購(gòu)物車;然后,將購(gòu)物車中的商品逐一取出,放入購(gòu)物車臨時(shí)對(duì)象CartGoods類的實(shí)例中進(jìn)行金額計(jì)算等處理。5.3顯示購(gòu)物車■編程詳解<formmethod="post"action="cartModify.jsp"name="form">…<%floatsum=0;//商品總金額

Vectorcart=(Vector)session.getAttribute(“_CAER_");for(inti=0;i<cart.size();i++){CartGoodscartGoods=(CartGoods)cart.elementAt(i);sum=sum+cartGoods.number*cartGoods.price;%>5.3顯示購(gòu)物車■編程詳解會(huì)員在確認(rèn)目前購(gòu)物車的商品后,進(jìn)而可以采取下一步繼續(xù)購(gòu)物、去收銀臺(tái)結(jié)賬、清空購(gòu)物車、修改數(shù)量等操作,頁(yè)面設(shè)計(jì)相應(yīng)的鏈接:<ahref="../product/main.jsp">繼續(xù)購(gòu)物</a>|<ahref="../cart/cartCheckOut.jsp">去收銀臺(tái)結(jié)賬</a>|<ahref="../cart/cartClear.jsp">清空購(gòu)物車</a>|<ahref="#">修改數(shù)量</a>5.3顯示購(gòu)物車■<usebean>與生成實(shí)例的關(guān)系●本質(zhì)上是相同的,主要有兩個(gè)方面的區(qū)別:

1)JavaBean方式實(shí)例的作用域由scope指定的,不限于本JSP頁(yè)面,而new方式生成的實(shí)例對(duì)象的作用域限制在本頁(yè)面。

2)使用new方式是一定會(huì)生成實(shí)例對(duì)象的,而使用<jsp:useBean>則不一定。5.4修改及清空購(gòu)物車■功能說明及頁(yè)面流程在session對(duì)象中獲取該會(huì)員原有的購(gòu)物車,遍歷購(gòu)物車中的商品,并以從cartShow.jsp接收傳來(lái)的表單元素<input>中的商品數(shù)量為準(zhǔn),重新生成一個(gè)購(gòu)物車,把原有商品逐一添加到新購(gòu)物車中,如果商品購(gòu)買的數(shù)量被修改成0,則不再添加。清除購(gòu)物車,實(shí)現(xiàn)時(shí)將session對(duì)象的購(gòu)物車刪除,在購(gòu)物車修改或刪除后,頁(yè)面返回cartShow.jsp。5.4修改及清空購(gòu)物車■編程詳解

使用session對(duì)象的getAttribute方法獲取購(gòu)物車,并將其存入Vector類對(duì)象cart中,生成新購(gòu)物:Vectorcart=(Vector)session.getAttribute("_CART_");隨后遍歷購(gòu)物車cart內(nèi)的商品,每件商品的購(gòu)買數(shù)量由頁(yè)面參數(shù)numX獲得,即request.getParameter("num"+i);將所有購(gòu)買數(shù)量不為0的商品添加到新購(gòu)物車newcart中:5.4修改及清空購(gòu)物車■編程詳解

for(inti=0;i<cart.size();i++){//取商品CartGoodscartGoods=(CartGoods)cart.elementAt(i);//每件商品的購(gòu)買數(shù)量Stringnum=request.getParameter("num"+i);try{ intnewnum=Integer.parseInt(num); cartGoods.number=newnum; if(newnum!=0){//如果數(shù)量為0,相當(dāng)于刪除了這件商品 newcart.addElement(cartGoods); }}…5.4修改及清空購(gòu)物車■編程詳解

將新購(gòu)物車newcart存至session的“_CART_”屬性中,替換原有的購(gòu)物車,完成修改操作:session.setAttribute("_CART_",newcart);response.sendRedirect("cartShow.jsp");在購(gòu)物車修改結(jié)束后,調(diào)用response對(duì)象的sendRedirect方法,將此次對(duì)cartModify.jsp頁(yè)面的請(qǐng)求重新定向到cartShow.jsp頁(yè)面。5.4修改及清空購(gòu)物車■編程詳解

清空購(gòu)物車在清空購(gòu)物車cartClear.jsp頁(yè)面上,使用session對(duì)象的removeAttribute方法,實(shí)際上不僅清除購(gòu)物車中的商品,也刪除了購(gòu)物車,會(huì)員如果繼續(xù)購(gòu)物,將會(huì)重新生成購(gòu)物車。

session.removeAttribute(“_CART_");5.4.3JSP的錯(cuò)誤處理■JSP頁(yè)面的錯(cuò)誤處理JSP頁(yè)面中主要有兩種錯(cuò)誤:編譯時(shí)錯(cuò)誤和運(yùn)行時(shí)錯(cuò)誤。編譯時(shí)錯(cuò)誤是JSP引擎在編譯JSP源代碼時(shí)出現(xiàn)的,編寫JSP時(shí)的語(yǔ)法有錯(cuò)誤,導(dǎo)致JSP容器無(wú)法將JSP網(wǎng)頁(yè)編譯成正確的文件。例如:500InternalServerError,500是指HTTP的錯(cuò)誤狀態(tài)碼,因此是ServerError。5.4.3JSP的錯(cuò)誤處理■JSP頁(yè)面的錯(cuò)誤處理編譯時(shí)錯(cuò)誤頁(yè)面產(chǎn)生這種編譯錯(cuò)誤時(shí),通常是JSP存在語(yǔ)法錯(cuò)誤5.4.3JSP的錯(cuò)誤處理■JSP頁(yè)面的錯(cuò)誤處理運(yùn)行時(shí)錯(cuò)誤則是在已編譯好的JSP頁(yè)面處理客戶端的請(qǐng)求時(shí)出現(xiàn)的。異常處理機(jī)制(ExceptionHandling)會(huì)對(duì)錯(cuò)誤做適當(dāng)?shù)奶幚?,一般采用下列兩種處理方法

1)在頁(yè)面中使用try-catch結(jié)構(gòu)處理異常

2)采用JSP提供的更加簡(jiǎn)潔有效的異常處理機(jī)制5.5生成訂單■功能說明結(jié)賬信息填寫后點(diǎn)擊“提交”,生成新訂單并顯示訂單編號(hào)。 在后續(xù)的操作中會(huì)員可進(jìn)入“查看訂單”查看訂單詳細(xì)信息。5.5生成訂單■生成訂單的頁(yè)面效果如圖

5.5生成訂單■

流程分析及設(shè)計(jì)

●設(shè)計(jì)數(shù)據(jù)庫(kù)訂單信息實(shí)體訂單編號(hào)會(huì)員名稱、真實(shí)姓名聯(lián)系地址、聯(lián)系電話付款方式、送貨方式備注信息、出貨標(biāo)志、訂單生成時(shí)間 是否出貨,1:“出貨”,0表示“未出貨”

5.5生成訂單■

流程分析及設(shè)計(jì)

●設(shè)計(jì)數(shù)據(jù)庫(kù)訂單明細(xì)實(shí)體訂單明細(xì)實(shí)體包括訂單明細(xì)編號(hào)、訂單編號(hào)、商品編號(hào)、商品購(gòu)買價(jià)格和數(shù)量屬性。5.5生成訂單■

流程分析及設(shè)計(jì)設(shè)計(jì)數(shù)據(jù)庫(kù)訂單信息表結(jié)構(gòu)字段名數(shù)據(jù)類型為空主鍵默認(rèn)值描述order_idvarchar(50)NoYes訂單編號(hào)namevarchar(50)NoNULL會(huì)員名稱real_namevarchar(50)YesNULL真實(shí)姓名addressvarchar(50)YesNULL聯(lián)系地址mobilevarchar(50)YesNULL聯(lián)系電話total_pricefloatYesNULL支付金額deliver_methodvarchar(50)YesNULL郵寄方式memovarchar(50)YesNULL備注信息delivery_signbitYesNULL出貨標(biāo)志create_timesmalldatetimeYesNULL訂單生成時(shí)間payment_modevarchar(50)yesNULL送貨方式5.5生成訂單■

流程分析及設(shè)計(jì)

●設(shè)計(jì)數(shù)據(jù)庫(kù)訂單明細(xì)表結(jié)構(gòu)字段名數(shù)據(jù)類型是否為空是否主鍵默認(rèn)值描述idint(4)NoYesID(自動(dòng)編號(hào))order_idvarchar(50)訂單編號(hào)product_idint(4)商品編號(hào)product_namevarchar(50)product_pricefloatNULL商品價(jià)格amountint(4)NULL商品數(shù)量5.5生成訂單■

流程分析及設(shè)計(jì)

●設(shè)計(jì)數(shù)據(jù)庫(kù)_數(shù)據(jù)表之間的關(guān)系

5.5生成訂單■

流程分析及設(shè)計(jì)

●數(shù)據(jù)庫(kù)訂單表和訂單明細(xì)表操作類設(shè)計(jì)操作訂單表、訂單明細(xì)表設(shè)計(jì)OrderDao、OrderItemDao兩個(gè)數(shù)據(jù)庫(kù)操作類添加相應(yīng)數(shù)據(jù)庫(kù)操作的方法5.5生成訂單■訂單生產(chǎn)的功能流程如圖5.5生成訂單■該功能相對(duì)復(fù)雜,主要涉及下述步驟:(1)在購(gòu)物車顯示頁(yè)面頁(yè),添加跳轉(zhuǎn)到生成訂單頁(yè)面;(2)在pages/cart文件夾下,新建頁(yè)面cartCheckOut.jsp和cartToOrder.jsp頁(yè)面,分別實(shí)現(xiàn)提交本次購(gòu)物的訂單基本資料,和生成本次所購(gòu)購(gòu)商品信息的訂單;(3)在cartToOrder.jsp頁(yè)面,先獲取請(qǐng)求參數(shù);5.5生成訂單(4)生成訂單信息實(shí)體類OrderEntity實(shí)例對(duì)象,將訂單信息寫入數(shù)據(jù)庫(kù)。(5)獲取購(gòu)物車,遍歷商品,以此資料填充實(shí)體類OrderItemEntity實(shí)例對(duì)象,并寫入數(shù)據(jù)庫(kù)。(6)修改商品信息表中的商品銷售數(shù)量;(7)清空購(gòu)物車,頁(yè)面提示訂單資料;5.5生成訂單■編程詳解(1)在購(gòu)物車顯示頁(yè)面頁(yè),添加跳轉(zhuǎn)到生成訂單頁(yè)面;在cartShow.jsp頁(yè)面,添加代碼:<ahref=“../cart/cartCheckOut.jsp”>去收銀臺(tái)結(jié)賬</a>;(2)在pages/cart文件夾下,新建頁(yè)面cartCheckOut.jsp和cartToOrder.jsp頁(yè)面;5.5生成訂單■編程詳解(3)創(chuàng)建cartCheckOut.jsp頁(yè)面,并設(shè)計(jì)提交表單,提交數(shù)據(jù)至cartToOrder.jsp;其中訂單編號(hào)由方法StringUitl.createOrderId()自動(dòng)產(chǎn)生,并顯示;郵寄地址、備注由會(huì)員輸入;其它字段根據(jù)商品編號(hào),從數(shù)據(jù)庫(kù)中獲取。5.5生成訂單■編程詳解cartCheckOut.jsp頁(yè)面中引入包java.util,調(diào)用函數(shù)StringUitl.createOrderId產(chǎn)生訂單編號(hào)。引入會(huì)員實(shí)體類,存放從session中獲取的會(huì)員信息:5.5生成訂單■編程詳解(4)生成訂單信息實(shí)體類OrderEntity實(shí)例對(duì)象,將訂單信息寫入數(shù)據(jù)庫(kù)。新建實(shí)體類:OrderEntityorder=newOrderEntity();依第(3)步要求獲取訂單表數(shù)據(jù);

保存orderDao.insertOrder(order);

5.5生成訂單■編程詳解(5)獲取購(gòu)物車,遍歷商品,以此資料填充實(shí)體類OrderItemEntity實(shí)例對(duì)象,并寫入數(shù)據(jù)庫(kù)。(6)修改商品信息表中的商品銷售數(shù)量;

主要為后期商品銷售統(tǒng)計(jì)之用(7)清空購(gòu)物車,頁(yè)面提示訂單資料;5.5生成訂單■編程詳解第5章購(gòu)物車模塊■思考題1、購(gòu)物車為什么保存為session對(duì)象的屬性,能否保存在request對(duì)象或application對(duì)象上?2、在JSP頁(yè)面中可以使用<jsp

:usebean>和<%new%>的形式都可以生成類的實(shí)例對(duì)象,這兩種方法生產(chǎn)的實(shí)例有什么區(qū)別?3、JSP中有哪些常用錯(cuò)誤處理方法?JavaWeb應(yīng)用開發(fā)計(jì)算機(jī)與軟件學(xué)院第6章基于MVC模式的訂單模塊■本章要點(diǎn):

前臺(tái)訂單操作功能設(shè)計(jì)與實(shí)現(xiàn)后臺(tái)訂單操作功能設(shè)計(jì)與實(shí)現(xiàn)Servlet控制器設(shè)計(jì)與實(shí)現(xiàn)模型JavaBean業(yè)務(wù)操作設(shè)計(jì)與實(shí)現(xiàn)MVC開發(fā)模式JSP與Servlet關(guān)系6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)前臺(tái):會(huì)員查看自己所有的訂單在前臺(tái)JSP頁(yè)面(cartSelect.jsp)可以提交四種請(qǐng)求:

1.查看自己的所有訂單

2.在自己所有的訂單中查看已經(jīng)出貨的訂單

3.在自己所有的訂單中查看尚未出貨的訂單

4.查看自己某一訂單的詳細(xì)信息6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)功能圖6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)操作流程6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)

后臺(tái)管理員:后臺(tái)JSP頁(yè)面,可以提交六種請(qǐng)求:

1.查看商城所有的訂單

2.查看所有已經(jīng)出貨的訂單

3.查看所有尚未出貨的訂單

4.查看某一訂單的詳細(xì)信息

5.對(duì)某一訂單進(jìn)行出貨操作

6.刪除某一訂單6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)功能圖6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)

●MVC開發(fā)模式

通常這種分層方式被稱為MVC(ModelViewController)三層結(jié)構(gòu)。請(qǐng)求由Controller(控制器)開始,分發(fā)給對(duì)應(yīng)業(yè)務(wù)操作,Model(模型)代表的數(shù)據(jù)模型承擔(dān)業(yè)務(wù)操作,最后將得到的結(jié)果送到View(視圖)層顯示。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■訂單顯示開發(fā)流程(orderList.jsp)

登錄會(huì)員點(diǎn)擊“查看訂單”菜單,向Servlet容器發(fā)送請(qǐng)求,Servlet容器接收客戶請(qǐng)求,查詢會(huì)員所有訂單信息,最后將響應(yīng)結(jié)果轉(zhuǎn)發(fā)到訂單顯示頁(yè)面。訂單顯示頁(yè)面如下:6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■Servlet容器根據(jù)orderAction區(qū)分客戶請(qǐng)求主要涉及:查當(dāng)前用戶訂單:orderAction="orderAbstract"))返回:list=order.selectOrderByName(curUserName)orderAction.equals("orderDelivered")返回:list=order.selectOrderByNameAndDeliverySign(用戶,出貨標(biāo)志);某個(gè)訂單詳細(xì)信息:orderAction="orderDetail"))返回:list=orderDetail.selectOrderDetailByNumber(orderId);6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■開發(fā)流程1.添加“查詢訂單”入口,發(fā)起的http請(qǐng)求。2.在類OrderDao.java中,定義查詢會(huì)員訂單的方法。3.創(chuàng)建Servlet控制器類OrderServlet.java,重寫doPost()方法,在方法中完成業(yè)務(wù)邏輯:(1)獲取會(huì)員請(qǐng)求類別信息,存到orderAction中;(2)響應(yīng)http查詢訂單請(qǐng)求,執(zhí)行相應(yīng)的業(yè)務(wù)邏輯;(3)調(diào)用方法,從后臺(tái)取得會(huì)員所有訂單資料;(4)轉(zhuǎn)發(fā)頁(yè)面至orderList.jsp頁(yè)面,顯示訂單信息。4.修改配置文件web.xml。5.創(chuàng)建訂單顯示頁(yè)面orderList.jsp頁(yè)面,從request中取得訂單信息并顯示。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■顯示訂單詳細(xì)開發(fā)流程概述(orderItemList.jsp

控制器orderAction和orderId的值,確定需執(zhí)行的操作;其中第一個(gè)參數(shù)確定是顯示詳細(xì)訂單信息,第二個(gè)參數(shù)是訂單編號(hào);形如,http://localhost:8080/estore/OrderServlet?orderAction=orderDetail&orderId=2014100711402202921386.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■編程詳解orderItemList.jsp1.添加查詢?nèi)肟?,傳遞訂單號(hào)orderId,發(fā)起http請(qǐng)求。2.添加方法OrderDetailDao.selectOrderDetailByNumber(StringorderId)。3.在doPost()中響應(yīng)http“訂單詳細(xì)信息”請(qǐng)求,并完成業(yè)務(wù)處理。4.新建orderItemList.jsp頁(yè)面,從request中取得訂單詳細(xì)集合,遍歷集合,顯示訂單信息。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■Servlet控制器OrderServlet.java的實(shí)現(xiàn)Servlet與JspJSP是一種特殊的Servlet,所有的JSP頁(yè)面最終都會(huì)被服務(wù)器轉(zhuǎn)換成Servlet來(lái)執(zhí)行。JSP頁(yè)面被請(qǐng)求時(shí),服務(wù)器會(huì)先根據(jù)JSP頁(yè)面生成Java文件,然后使用jdk的編譯器將此文件編譯,得到的class文件處理用戶的請(qǐng)求并返回響應(yīng)。再次請(qǐng)求JSP頁(yè)面,服務(wù)器先檢查JSP文件是否被修改過修改:重新生成Java,重新編譯沒有修改:直接運(yùn)行上次的class文件

6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■Servlet控制器OrderServlet.java的實(shí)現(xiàn)●JSP文件運(yùn)行過程圖6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例第一步:編寫HelloServlet.java類,編譯成class放在WEB-INF/classes下。packageservlet;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassHelloServletextends

HttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();out.println("hello");}}HelloServlet在doGet()方法中獲取response(響應(yīng)),寫入“hello”。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例第二步:修改WEB-INF目錄下的web.xml,添加HelloServlet的配置信息。<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><servlet><servlet-name>HlloeServlet</servlet-name><servlet-class>servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/HelloServlet</url-pattern></servlet-mapping></web-app>6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例運(yùn)行結(jié)果如下:6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例編寫一個(gè)效果與HelloServlet完全一樣的hello.jsp放在WEB-INF目錄下運(yùn)行結(jié)果6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例Hello.jsp文件編譯后所在文件目錄圖

在Catalina/localhost/org/apache/jsp目錄下,可以看到兩個(gè)文件,分別是hello_jsp.class和hello_jsp.java。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第一步)6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第二步)6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第三步)6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)

1)為OrderServlet添加方法和完善doPost()方法和doget()方法

2)OrderServlet控制器根據(jù)操作元素orderAction的值確定執(zhí)行相應(yīng)原動(dòng)作:前臺(tái)已經(jīng)響應(yīng)了orderList和orderDetails,和按出貨狀態(tài)查詢的請(qǐng)求代碼,后臺(tái)主要涉及到下列標(biāo)識(shí)orderDelivered,deliverySign是訂單發(fā)貨標(biāo)志selectAllOrder是查詢所有用戶訂單Despatch是根據(jù)獲取的orderId設(shè)置出貨狀態(tài)deleteOrder是根據(jù)獲取的orderId刪除指定訂單等實(shí)現(xiàn)了管理員對(duì)訂單的增刪改查要求。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)為OrderServlet添加方法和完善doPost()方法和doget()方法

if(orderAction.equals("despatch")){//根據(jù)獲取的orderId出貨Listlist=newArrayList();Stringi=request.getParameter("i");if(i!=null)request.setAttribute("i",i);order.updateSignOrder(request.getParameter("orderId").toString());//更改出貨狀態(tài)list=order.selectAllOrder();//刷新訂單顯示request.setAttribute("AllOrder",list);request.getRequestDispatcher("pages/admin/order/orderSelect.jsp").forward(request,response);}6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)為OrderServlet添加方法和完善doPost()方法和doget()方法

//后臺(tái)所有客戶訂單顯示if(orderAction.equals("selectAllOrder")){//查詢所有訂單Listlist=newArrayList();Stringi=request.getParameter("i");if(i!=null)request.setAttribute("i",i);list=order.selectAllOrder();request.setAttribute("AllOrder",list);request.getRequestDispatcher("pages/admin/order/orderList.jsp").forward(request,response);}6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)為OrderServlet添加方法和完善doPost()方法和doget()方法if(orderAction.equals("deleteOrder")){//根據(jù)獲取的orderId刪除指定訂單Listlist=newArrayList();Stringi=request.getParameter("i");if(i!=null)request.setAttribute("i",i);order.deleteOrder(request.getParameter("orderId").toString());//刪除指定orderId訂單list=order.selectAllOrder();//所有訂單重新讀取繼續(xù)顯示request.setAttribute("AllOrder",list);request.getRequestDispatcher("pages/admin/order/orderList.jsp").forward(request,response);}6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)為OrderServlet添加方法和完善doPost()方法和doget()方法其它增刪改查的功能均與上述例子類似//若上述標(biāo)志均不滿足,則顯示主頁(yè)面else{//沒有對(duì)應(yīng)的action,顯示主頁(yè)面out.println("<script>parent.location.href='/estore/pages/product/main.jsp';</script>");}out.flush();out.close();…6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■模型和JavaBean

根據(jù)OrderServet方法調(diào)用請(qǐng)求,在OrderDao.java中添加相應(yīng)的方法:6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■Servlet技術(shù)特性分析

Servlet可完成如下功能:

(1)創(chuàng)建動(dòng)態(tài)完整的HTML頁(yè)面(2)創(chuàng)建可嵌入的HTML片段(3)與其它服務(wù)器資源(包括數(shù)據(jù)庫(kù)和基于Java的應(yīng)用程序)進(jìn)行通信(4)實(shí)時(shí)處理多個(gè)客戶的請(qǐng)求(5)對(duì)特殊的處理采用MIME類型過濾數(shù)據(jù),如圖像轉(zhuǎn)換(6)將定制的處理提供給所有服務(wù)器的標(biāo)準(zhǔn)例行程序。例如,Servlet可以修改如何認(rèn)證用戶6.2Servlet知識(shí)總結(jié)■Servlet的生命周期初始化 服務(wù)器創(chuàng)建一個(gè)Servlet實(shí)例并且調(diào)用Servlet的init()方法初始化Servlet裝入:如果已配置自動(dòng)裝入選項(xiàng),則在服務(wù)器啟動(dòng)時(shí)自動(dòng)裝入客戶機(jī)首次向Servlet發(fā)出請(qǐng)求重新裝入Servlet請(qǐng)求處理 服務(wù)器調(diào)用Servlet的service()方法,service()方法從“請(qǐng)求”對(duì)象獲得請(qǐng)求信息、處理該請(qǐng)求并用“響應(yīng)”對(duì)象的方法以將響應(yīng)傳回客戶機(jī)。service()方法可以調(diào)用其它方法來(lái)處理請(qǐng)求,例如doGet()、doPost()或其它的方法。終止 當(dāng)服務(wù)器不再需要Servlet,或重新裝入Servlet的新實(shí)例時(shí),服務(wù)器會(huì)調(diào)用Servlet的destroy()方法。6.2Servlet知識(shí)總結(jié)■JavaServletAPIinit()方法

在Servlet的生命期中,僅執(zhí)行一次init()方法。在服務(wù)器裝入Servlet時(shí)執(zhí)行的??梢赃M(jìn)行配置,在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問Servlet時(shí)裝入Servlet。無(wú)論有多少客戶機(jī)訪問Servlet,都不會(huì)重復(fù)執(zhí)行init()service()方法

service()方法是Servlet的核心。每當(dāng)一個(gè)客戶請(qǐng)求一個(gè)HttpServlet對(duì)象,該對(duì)象的service()方法就要被調(diào)用,而且傳遞給這個(gè)方法一個(gè)“請(qǐng)求”(ServletRequest)對(duì)象和一個(gè)“響應(yīng)”(ServletResponse)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論