JSP購(gòu)物車(chē)實(shí)例_第1頁(yè)
JSP購(gòu)物車(chē)實(shí)例_第2頁(yè)
JSP購(gòu)物車(chē)實(shí)例_第3頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目標(biāo):l掌握購(gòu)物車(chē)的信息如何存儲(chǔ);l掌握購(gòu)物車(chē)常用功能的實(shí)現(xiàn)。主要內(nèi)容:l首先分析用戶(hù)上網(wǎng)購(gòu)物的一般過(guò)程;l介紹采用什么樣的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)購(gòu)物信息;l編寫(xiě)購(gòu)物界面;l完成向購(gòu)物車(chē)添加物品的功能。1、用戶(hù)上網(wǎng)購(gòu)物的一般過(guò)程在瀏覽物品的過(guò)程中如果對(duì)某件物品感興趣,會(huì)添加到購(gòu)物車(chē)(購(gòu)物籃)中,隨時(shí)可以查看購(gòu)物車(chē)中的信息,如果不想要某件物品的話,可以刪除,或者修改某種物品的數(shù)量,或者整個(gè)清空購(gòu)物車(chē),可以繼續(xù)選擇物品向購(gòu)物車(chē)中添加。最后用戶(hù)可以購(gòu)物這些物品,經(jīng)過(guò)輸入個(gè)人的送貨地址信息和設(shè)定交易方式之后,可以生成訂單。網(wǎng)站的管理員可以對(duì)訂單進(jìn)行管理。本實(shí)例模擬這個(gè)過(guò)程,但是進(jìn)行了簡(jiǎn)化:只能在物品列表中選擇物

2、品向購(gòu)物車(chē)中添加。確定購(gòu)買(mǎi)后,不需要設(shè)置交易方式以及付款等。實(shí)際處理過(guò)程,可以使用我們前面介紹的功能完成。2、購(gòu)物車(chē)信息組織因?yàn)樵谟脩?hù)訪問(wèn)網(wǎng)站的整個(gè)過(guò)程中都可以訪問(wèn)購(gòu)物車(chē)信息,所以購(gòu)物車(chē)對(duì)象應(yīng)該存放在session中。因?yàn)橛脩?hù)購(gòu)買(mǎi)的物品的種類(lèi)和數(shù)量都不確定,所以需要使用一個(gè)合適的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),我們選擇ArrayList。每一種物品都涉及數(shù)量,需要進(jìn)行封裝,把物品和數(shù)量封裝成購(gòu)物項(xiàng),使用Item,每個(gè)Item對(duì)應(yīng)一種物品以及該種物品的數(shù)量。需要編寫(xiě)物品類(lèi)表示物品的基本信息。參考代碼如下:2.1 物品類(lèi)該類(lèi)中包含兩個(gè)與分頁(yè)顯示相關(guān)的方法。其中用到的DBBean是前面介紹的。packagejavab

3、ean;import;importjava.sql.*;publicclassGoodsprivateStringgoodsid;privateStringgoodsname;privatefloatprice;/物品編號(hào)publicvoidsetGoodsid(Stringgoodsid)this.goodsid=goodsid;publicStringgetGoodsid()returngoodsid;/物品名稱(chēng)publicvoidsetGoodsname(Stringgoodsname)this.goodsname=goodsname;publicStringgetGoodsname()

4、returngoodsname;/物品價(jià)格publicvoidsetPrice(floatprice)this.price=price;publicfloatgetPrice()returnprice;publicArrayListgetGoodsByPage(intpageNo)intnumber=10;/每一頁(yè)顯示的記錄數(shù)intbegin=(pageNo*number)-9;intend=pageNo*number;intindex=1;DBBeandb=newDBBean();/要返回的結(jié)果對(duì)象ArrayListgoods=newArrayList();Stringsql="s

5、elect*fromgoods"ResultSetrs;tryrs=db.executeQuery(sql,null);while(rs.next()/在begin之前的記錄是不顯示的if(index<begin)index+;continue;/在end之后的記錄也不顯示if(index>end)break;index+;Stringgoodsid=rs.getString(1);Stringgoodsname=rs.getString(2);floatprice=rs.getFloat(3);Goodsg=newGoods();g.setGoodsid(goodsid

6、);g.setGoodsname(goodsname);g.setPrice(price);goods.add(g);catch(Exceptione)e.printStackTrace();finallydb.close();returngoods;publicGoodsfindGoodsById(Stringgoodsid)try/編寫(xiě)查詢(xún)數(shù)據(jù)庫(kù)信息的SQL語(yǔ)句Stringsql="select*fromgoodswheregoodsid=?"DBBeandb=newDBBean();ArrayListparams=newArrayList();params.add(g

7、oodsid);ResultSetrs=db.executeQuery(sql,params);if(rs.next()/Stringgoodsid=rs.getString(1);Stringgoodsname=rs.getString(2);floatprice=rs.getFloat(3);Goodstemp=newGoods();temp.setGoodsid(goodsid);temp.setGoodsname(goodsname);temp.setPrice(price);db.close();returntemp;elsereturnnull;catch(Exceptione)J

8、returnnull;publicintgetPageCount()try/編寫(xiě)查詢(xún)數(shù)據(jù)庫(kù)信息的SQL語(yǔ)句Stringsql="selectcount(*)fromgoods"DBBeandb=newDBBean();ResultSetrs=db.executeQuery(sql,null);intnumber=0;if(rs.next()number=rs.getInt(1);db.close();return(number-1)/10+1;catch(Exceptione)return0;2.2 Item類(lèi)packagejavabean;/購(gòu)物項(xiàng)publicclassI

9、temprivateGoodsgoods;privateintquantity;publicItem(Goodsd,intquantity)this.goods=d;this.quantity=quantity;publicvoidsetGoods(Goodsgoods)this.goods=goods;publicGoodsgetGoods()returngoods;publicvoidsetQuantity(intquantity)this.quantity=quantity;publicintgetQuantity()returnquantity;3、物品信息顯示功能采用MVC模式,考慮

10、視圖部分,不需要輸入界面,只需要顯示信息的界面。模型部分,在前面的代碼中已經(jīng)實(shí)現(xiàn)??刂破鞑糠?,需要編寫(xiě)GetAllGoods.java。參考代碼分別如下:3.1 界面代碼文件名:goodslist.jsp<%pagecontentType="text/html;charset=gb2312"%><%taglibprefix="c"uri="/jstl/core"%><c:iftest="$pageNo!=1"><ahref="getAllGoods?pageNo=

11、1">第一頁(yè)</a><ahref="getAllGoods?pageNo=$pageNo-1">上一頁(yè)</a></c:if><c:iftest="$pageNo!=pageCounter"><ahref="getAllGoods?pageNo=$pageNo+1">下一頁(yè)</a><ahref="getAllGoods?pageNo=$pageCounter">最后一頁(yè)</a></c:if

12、><br><tablewidth="200"border="1"height="56"><tbody><tr><td>物品編號(hào)</td><td>物品名稱(chēng)</td><td>物品價(jià)格</td></tr><c:forEachvar="g"items="$goods"><tr><td>$g.goodsid</td><

13、;td>$g.goodsname</td><td>$g.price</td><td><ahref="addToCart?goodsid=$g.goodsid">添加到購(gòu)物車(chē)</a></td></tr></c:forEach></tbody></table>3.2 控制器代packageservlet;importjava.io.*;importjavax.servlet.*;import;importjavabean.*;importja

14、va.util.*;publicclassGetAllGoodsextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponsethrowsIOException,ServletException/response.setContentType("text/html;charset=gb2312");/PrintWriterout=response.getWriter();/第一步:獲取用戶(hù)的輸入信息StringpageNo=request.getParameter("p

15、ageNo");intiPageNo=1;if(pageNo!=null)iPageNo=Integer.parseInt(pageNo);/第二步:調(diào)用JavaBeanGoodsg=newGoods();ArrayListgoods=null;goods=g.getGoodsByPage(iPageNo);intpageCount=g.getPageCount();/out.println("記錄數(shù):"+users.size();/out.println("當(dāng)前頁(yè)碼:"+iPageNo);/out.println("總頁(yè)碼:&quo

16、t;+pageCount);/第三步:傳值request.setAttribute("goods",goods);request.setAttribute("pageNo",newInteger(iPageNo);request.setAttribute("pageCounter",newInteger(pageCount);/第四步:選擇一個(gè)界面對(duì)用戶(hù)進(jìn)行響應(yīng)Stringforward="goodslist.jsp"RequestDispatcherrd=request.getRequestDispatcher(

17、forward);rd.forward(request,response);response)response)response)publicvoiddoPost(HttpServletRequestrequest,HttpServletResponsethrowsIOException,ServletExceptiondoGet(request,response);4、顯示購(gòu)物車(chē)中信息該功能直接從session中獲取購(gòu)物車(chē)信息,所以不需要控制器和模型部分,只需要編寫(xiě)顯示購(gòu)物車(chē)信息的JSP文件即可,文件名為cart.jsp,參考代碼如下:<%pagecontentType="t

18、ext/html;charset=gb2312"%><%taglibprefix="c"uri="/jstl/core"%>購(gòu)物車(chē)中的信息<br><tableborder=1><tr><td>物品編號(hào)</td><td>物品名稱(chēng)</td><td>價(jià)格</td><td>數(shù)量</td></tr><c:forEachvar="item"items="$car

19、t"><tr><td>$<td>$<td>$<td>$item.quantity</td></c:forEach></table>5、向購(gòu)物車(chē)中添加物品采用MVC模式。首先考慮輸入和輸出,添加物品的輸入就是物品信息列表界面,輸出應(yīng)該是添加后的購(gòu)物車(chē)信息界面(也可以重新回到物品信息界面),這兩個(gè)界面都不需要編寫(xiě)??紤]模型部分,需要編寫(xiě)購(gòu)物車(chē)管理JavaBean,完成處理??紤]控制器部分,需要獲取用戶(hù)選擇的物品,然后添加到調(diào)用購(gòu)物車(chē)管理Bean,完成添加。下面是參考代碼。5.1 模型部分

20、文件名CartManager.javapackagejavabean;import;publicclassCartManager/表示購(gòu)物車(chē)privateArrayListcart;publicvoidsetCart(ArrayListcart)this.cart=cart;publicArrayListgetCart()returncart;/添加的物品數(shù)量publicArrayListaddToCart(Goodsg,intquantity)if(cart=null)/實(shí)例化購(gòu)物車(chē)對(duì)象cart=newArrayList();/添加到購(gòu)物車(chē)Itemitem=newItem(g,quantit

21、y);cart.add(item);else/轉(zhuǎn)換成數(shù)組Objectitems=cart.toArray();booleanfind=false;/表示是否查找到for(inti=0;i<items.length;i+)Itemtemp=(Item)itemsi;/判斷購(gòu)物車(chē)中是否存在要添加的物品if(temp.getGoods().getGoodsid().equals(g.getGoodsid()temp.setQuantity(temp.getQuantity()+quantity);find=true;break;if(!find)/添加到購(gòu)物車(chē)Itemitem=newItem(

22、g,quantity);cart.add(item);returncart;控制器部分文件名:AddToCart.javapackageservlet;importjava.io.*;importjavax.servlet.*;import;importjavabean.*;importjava.util.*;publicclassAddToCartextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponsethrowsIOException,ServletException/response.s

23、etContentType("text/html;charset=gb2312");/PrintWriterout=response.getWriter();try/得到要添加的物品的編號(hào)Stringgoodsid=request.getParameter("goodsid");/創(chuàng)建JavaBean對(duì)象CartManagercartManager=newCartManager();/得到session對(duì)象HttpSessionsession=request.getSession(true);/得到購(gòu)物車(chē)對(duì)象ArrayListcart=(ArrayLis

24、t)session.getAttribute("cart");/用cart初始化cartManagercartManager.setCart(cart);/構(gòu)造物品對(duì)象Goodsg=newGoods();g=g.findGoodsById(goodsid);/out.println(g.getGoodsid();cartManager.addToCart(g,1);/先把購(gòu)物車(chē)重新存到sessionsession.setAttribute("cart",cartManager.getCart();catch(Exceptione)/out.println

25、(e.toString();response.sendRedirect("cart.jsp");publicvoiddoPost(HttpServletRequestrequest,HttpServletResponsethrowsIOException,ServletExceptiondoGet(request,response);6、Servlet的配置web.xml文件內(nèi)容如下:response)response)<?xmlversion="1.0"encoding="UTF-8"?><web-appversi

26、on="2.4"xmlns="/ns/j2ee"xmlns:xsi="/XMLSchema-instance"xsi:schemaLocation="/ns/j2ee/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>getAllGoods</servlet-name><servlet-class>servlet.GetAllGoods</servlet-class></servlet><

27、;servlet-mapping><servlet-name>getAllGoods</servlet-name><url-pattern>/getAllGoods</url-pattern></servlet-mapping><servlet><servlet-name>addToCart</servlet-name><servlet-class>servlet.AddToCart</servlet-class></servlet><servlet-

28、mapping><servlet-name>addToCart</servlet-name><url-pattern>/addToCart</url-pattern></servlet-mapping></web-app>7、運(yùn)行編譯所有文件,然后先訪問(wèn)getAllGoodsServlet,然后在物品信息界面上選擇物品添加到購(gòu)物車(chē),之后就可以看到購(gòu)物車(chē)中的信息了。主要內(nèi)容:l完成購(gòu)物車(chē)的其他基本功能;l生成訂單;l小結(jié)1、購(gòu)物車(chē)的其它功能對(duì)購(gòu)物車(chē)的物品數(shù)量修改和物品刪除功能是兩外兩個(gè)基本功能。實(shí)現(xiàn)過(guò)程與添加工程比較類(lèi)

29、似,這里只給出參考代碼:1.1 模型部分文件名:CartManager.java(在上一講的基礎(chǔ)上修改,紅色部分為添加的內(nèi)容)packagejavabean;import;import;publicclassCartManager/表示購(gòu)物車(chē)privateArrayListcart;publicvoidsetCart(ArrayListcart)this.cart=cart;publicArrayListgetCart()returncart;/添加的物品數(shù)量publicArrayListaddToCart(Goodsg,intquantity)if(cart=null)/實(shí)例化購(gòu)物車(chē)對(duì)象ca

30、rt=newArrayList();/添加到購(gòu)物車(chē)Itemitem=newItem(g,quantity);cart.add(item);else/轉(zhuǎn)換成數(shù)組Objectitems=cart.toArray();booleanfind=false;/表示是否查找到for(inti=0;i<items.length;i+)Itemtemp=(Item)itemsi;/判斷購(gòu)物車(chē)中是否存在要添加的物品if(temp.getGoods().getGoodsid().equals(g.getGoodsid()temp.setQuantity(temp.getQuantity()+quantity

31、);find=true;break;if(!find)/添加到購(gòu)物車(chē)Itemitem=newItem(g,quantity);cart.add(item);returncart;publicvoiddelete(Stringgoodsid)/轉(zhuǎn)換成Iterator對(duì)象Iteratori=cart.iterator();while(i.hasNext()/得到一個(gè)購(gòu)物項(xiàng)Itemtemp=(Item)i.next();if(temp.getGoods().getGoodsid().equals(goodsid)cart.remove(temp);break;publicvoidupdate(Str

32、inggoodsid,intquantity)Iteratori=cart.iterator();while(i.hasNext()/得到一個(gè)購(gòu)物項(xiàng)Itemtemp=(Item)i.next();if(temp.getGoods().getGoodsid().equals(goodsid)temp.setQuantity(quantity);break;1.2 修改視圖部分文件名:cart.jsp(在上一講的基礎(chǔ)上修改,紅色部分為添加的內(nèi)容)<%pagecontentType="text/html;charset=gb2312"%><%taglibpref

33、ix="c"uri="/jstl/core"%>購(gòu)物車(chē)中的信息<br><tableborder=1><tr><td>物品編號(hào)</td><td>物品名稱(chēng)</td><td>價(jià)格</td><td>數(shù)量</td></tr><c:forEachvar="item"items="$cart"><tr><formaction="process

34、Cart"><inputtype="hidden"name="goodsid"value="$"><td>$<td>$<td>$<td><inputtype="text"name="quantity"value="$item.quantity"></td><td><inputtype="submit"name="action&qu

35、ot;value="修改"></td><td><inputtype="submit"name="action"value="刪除"></td></form></tr></c:forEach></table>控制器刪除和修改功能使用相同的控制器,會(huì)根據(jù)提交按鈕的值確定要完成的功能,參考代碼如下:文件名:ProcessCart.javapackageservlet;importjava.io.*;importjavax

36、.servlet.*;import;importjavabean.*;importjava.util.*;publicclassProcessCartextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException/response.setContentType("text/html;charset=gb2312");/PrintWriterout=response.getWriter();try

37、/request.setCharacterEncoding("gb2312");/得到要添加的物品的編號(hào)Stringgoodsid=request.getParameter("goodsid");/得到執(zhí)行命令:刪除還是修改Stringaction=request.getParameter("action");action=newString(action.getBytes("8859_1");/out.println(action);Stringquantity=null;if(action.equals(&qu

38、ot;修改")quantity=request.getParameter("quantity");/創(chuàng)建JavaBean對(duì)象CartManagercartManager=newCartManager();/得到session對(duì)象HttpSessionsession=request.getSession(true);/得到購(gòu)物車(chē)對(duì)象ArrayListcart=(ArrayList)session.getAttribute("cart");/用cart初始化cartManagercartManager.setCart(cart);if(action

39、.equals("修改")cartManager.update(goodsid,Integer.parseInt(quantity);elsecartManager.delete(goodsid);/把購(gòu)物車(chē)重新存到sessionsession.setAttribute("cart",cartManager.getCart();catch(Exceptione)/out.println(e.toString();response.sendRedirect("cart.jsp");publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOExceptio

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論