JSP購物車實例_第1頁
JSP購物車實例_第2頁
JSP購物車實例_第3頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

4、returngoodsname;/物品價格publicvoidsetPrice(floatprice)this.price=price;publicfloatgetPrice()returnprice;publicArrayListgetGoodsByPage(intpageNo)intnumber=10;/每一頁顯示的記錄數(shù)intbegin=(pageNo*number)-9;intend=pageNo*number;intindex=1;DBBeandb=newDBBean();/要返回的結(jié)果對象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/編寫查詢數(shù)據(jù)庫信息的SQL語句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/編寫查詢數(shù)據(jù)庫信息的SQL語句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類packagejavabean;/購物項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)實現(xiàn)??刂破鞑糠?,需要編寫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">第一頁</a><ahref="getAllGoods?pageNo=$pageNo-1">上一頁</a></c:if><c:iftest="$pageNo!=pageCounter"><ahref="getAllGoods?pageNo=$pageNo+1">下一頁</a><ahref="getAllGoods?pageNo=$pageCounter">最后一頁</a></c:if

12、><br><tablewidth="200"border="1"height="56"><tbody><tr><td>物品編號</td><td>物品名稱</td><td>物品價格</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">添加到購物車</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();/第一步:獲取用戶的輸入信息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("當前頁碼:"+iPageNo);/out.println("總頁碼:&quo

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

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

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

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

20、文件名CartManager.javapackagejavabean;import;publicclassCartManager/表示購物車privateArrayListcart;publicvoidsetCart(ArrayListcart)this.cart=cart;publicArrayListgetCart()returncart;/添加的物品數(shù)量publicArrayListaddToCart(Goodsg,intquantity)if(cart=null)/實例化購物車對象cart=newArrayList();/添加到購物車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;/判斷購物車中是否存在要添加的物品if(temp.getGoods().getGoodsid().equals(g.getGoodsid()temp.setQuantity(temp.getQuantity()+quantity);find=true;break;if(!find)/添加到購物車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/得到要添加的物品的編號Stringgoodsid=request.getParameter("goodsid");/創(chuàng)建JavaBean對象CartManagercartManager=newCartManager();/得到session對象HttpSessionsession=request.getSession(true);/得到購物車對象ArrayListcart=(ArrayLis

24、t)session.getAttribute("cart");/用cart初始化cartManagercartManager.setCart(cart);/構(gòu)造物品對象Goodsg=newGoods();g=g.findGoodsById(goodsid);/out.println(g.getGoodsid();cartManager.addToCart(g,1);/先把購物車重新存到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、運行編譯所有文件,然后先訪問getAllGoodsServlet,然后在物品信息界面上選擇物品添加到購物車,之后就可以看到購物車中的信息了。主要內(nèi)容:l完成購物車的其他基本功能;l生成訂單;l小結(jié)1、購物車的其它功能對購物車的物品數(shù)量修改和物品刪除功能是兩外兩個基本功能。實現(xiàn)過程與添加工程比較類

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

30、rt=newArrayList();/添加到購物車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;/判斷購物車中是否存在要添加的物品if(temp.getGoods().getGoodsid().equals(g.getGoodsid()temp.setQuantity(temp.getQuantity()+quantity

31、);find=true;break;if(!find)/添加到購物車Itemitem=newItem(g,quantity);cart.add(item);returncart;publicvoiddelete(Stringgoodsid)/轉(zhuǎn)換成Iterator對象Iteratori=cart.iterator();while(i.hasNext()/得到一個購物項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()/得到一個購物項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"%>購物車中的信息<br><tableborder=1><tr><td>物品編號</td><td>物品名稱</td><td>價格</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>控制器刪除和修改功能使用相同的控制器,會根據(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");/得到要添加的物品的編號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對象CartManagercartManager=newCartManager();/得到session對象HttpSessionsession=request.getSession(true);/得到購物車對象ArrayListcart=(ArrayList)session.getAttribute("cart");/用cart初始化cartManagercartManager.setCart(cart);if(action

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

溫馨提示

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

評論

0/150

提交評論