第十讲基于Servlet的会话跟踪2

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第十讲基于Servlet的会话跟踪22本讲任务升级E-Book电子书店实现购物车功能将书籍添加到购物车之中查看购物车3学会使用Map集合实现购物车掌握如何操纵session中对象会使用session的相关属性和方法本讲目标4购物车的设计分析设计分析购物车中对象的设计使用Servlet实现添加书籍到购物车使用JSP实现查看购物车的书籍列表选择商品放入购物车继续购物结账满载而归本章要完成内容购物车如何设计呢?5购物车中对象的设计对象的设计书籍本身信息书籍购买数量书籍名称书籍编号书籍价格书籍版本号BookBean购买书籍的数量publicclassCartItemBeanimplementsSerializable{privateBookBeanbook;//当前书籍privateintquantity;//购物车中的数量publicCartItemBean(BookBeanbookToAdd,intnumber){book=bookToAdd;quantity=number;}publicvoidsetQuantity(intnumber){quantity=number;}publicintgetQuantity(){returnquantity;}…//其他的setter、getter方法}对象属性构造方法属性的getter、setter方法演示示例1:购物车商品信息类CartItemBean.java6购物车的实现使用购物车存放商品装入购物车方便存取商品7购物车的实现使用Map实现购物车BookBeanHashMapsessionkeyvalue存放到存放到书籍数量CartItemBeanisbncart8集合接口和类(补充)集合接口、类关系图Collection接口List接口Set接口ArrayList类LinkedList类HashSet类TreeSet类继承继承实现实现List及实现类是可变大小的列表,适用于按数值索引访问元素Set集合中不允许有重复的数据9Set介绍(补充)Set接口继承关系和常用方法Collection接口Set接口HashSet类TreeSet类intsize()booleanisEmpty()Object[]toArray()booleanadd(Objecto)继承实现实现返回Set集合元素数返回一个包含Set中所有元素的数组向Set中添加元素判断Set中是否包含元素,不包含返回true10Map接口(补充)Map接口实现类关系图Map接口HashMap类Properties类Map中以键-值对形式存储数据实现11使用Servlet实现添加定义一个Servlet实现购买的书籍添加到购物车中Servlet类:AddBookToCart.java12实现添加书籍到购物车添加书籍到购物车获得session对象从session中取出BookBean对象创建HashMap对象,并添加一个条目到Map中…publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{HttpSessionsession=request.getSession(false);BookBeanbook=(BookBean)session.getAttribute(bookToAdd);Mapcart=newHashMap();cart.put(book.getISBN(),newCartItemBean(book,1));session.setAttribute(cart,cart);}…获得session对象从session中取出书籍信息把数据存入到session中13实现添加书籍到购物车判断购物车中是否存在该书籍存在:数量加一不存在:添加条目到Map中HttpSessionsession=request.getSession(false);Mapcart=(Map)session.getAttribute(cart);if(cart==null){cart=newHashMap();session.setAttribute(cart,cart);}BookBeanbook=(BookBean)session.getAttribute(bookToAdd);CartItemBeancartItem=(CartItemBean)cart.get(book.getISBN());if(cartItem!=null){cartItem.setQuantity(cartItem.getQuantity()+1);}else{cart.put(book.getISBN(),newCartItemBean(book,1));}如果session中存在该书籍,数量加1如果session中不存在该书籍,添加条目数量为1判断session中是否存在cart对象演示示例2:向购物车中添加商品AddBookToCart.java14查看购物车中书籍列表购物车的设计----书籍清单书籍名称购买数量书籍价格小计总计15查看购物车的书籍列表转向viewCart.jsp从session中取出Map从Map中取出CartItemBean数据%@pagecontentType=text/html;charset=GBK%Mapcart=(Map)session.getAttribute(cart);SetcartItems=cart.keySet();Object[]isbn=cartItems.toArray();BookBeanbook;CartItemBeancartItem;inti=0;while(iisbn.length){cartItem=(CartItemBean)cart.get((String)isbn[i]);book=cartItem.getBook();//在页面上显示book数据,如:book.getTitle();i++;}从session中取出Map得到Map中key值的Set集合,再转换成数组,以便使用循环进行遍历通过key值取value演示示例3:显示购物车内商品viewCart.jsp16完整代码HttpSessionsession=request.getSession(false);RequestDispatcherdispatcher;//如果session不存在,转向books.jspif(session==null){dispatcher=request.getRequestDispatcher(books.jsp);dispatcher.forward(request,response);}//取出购物车和添加的书籍Mapcart=(Map)session.getAttribute(cart);BookBeanbook=(BookBean)session.getAttribute(bookToAdd);//如果购物车不存在,创建购物车if(cart==null){cart=newHashMap();//将购物车存入session之中session.setAttribute(cart,cart);}//判断书籍是否在购物车中CartItemBeancartItem=(CartItemBean)cart.get(book.getISBN());//如果书籍在购物车中,更新其数量.//否则,创建一个条目到Map中.if(cartItem!=null)cartItem.setQuantity(cartItem.getQuantity()+1);elsecart.put(book.getISBN(),newCartItemBean(book,1));//转向viewCart.jsp显示购物车dispatcher=request.getRequestDispatcher(viewCart.jsp);dispatcher.forward(request,response);17常见错误错误大致出现在哪里?404错误—没有找到页面if(cartItem!=null)cartItem.setQuantity(cartItem.getQuantity()+1);elsecart.put(book.getISBN(),newCartItemBean(book,1));dispatcher=request.getRequestDispatcher(/viewCart.jsp);dispatcher.forward(request,response);路径错误,应该是/j20/viewCart.jsp18常见错误查看购物车内书籍已经购买商品,为什么没有显示?问题可能出现在哪里?19常见错误添加商品到购物车---ServletAddBookToCart.java显示购物车内商品---viewCart.jspif(cart==null){cart=newHashMap();session.setAttribute(cart,cart);}…保存数据到session中%Mapcart=(Map)session.getAttribute(Cart);%从session中取出数据名称要一致20显示购物车数据如何显示购物车内Map中所有数据可不可以使用Map的size()进行循环获得key、value值Map不具有整数索引,不能利用size()进行循环使用Set接口Set接口继承了Collection接口,但是它不允许集合中存在重复项Set接口在Map中的使用Mapcart=(Map)session.getAttribute(cart);for(inti=0;icart.size();i++){CartItemBeancartItem=(CartItemBean)cart.get(i);}Map没有整数索引,参数应该是key值Mapcart=(Map)session.getAttribute(cart);SetcartItems=cart.keySet();Object[]isbn=cartItems.toArray();inti=0;while(iisbn.length){cartItem=(CartItemBean)cart.get((String)isbn[i]);}使用keySet()得到key的Set集合使用Set的toArray()转换成数组对数组遍历取出所有值代码错误21常见错误%Mapcart=(Map)session.getAttribute(cart);SetcartItems=cart.keySet();Object[]isbn=cartItems.toArray();inti=0;while(iisbn.length){CartItemBeancartItem=(CartItemBean)cart.get(isbn[i]);BookBeanbook=cartItem.getBook();}%指出哪里有错误?显示购物车内商品---viewCart.jsp正确写法:cart.get((String)isbn[i])22常见错误格式不正确应该显示为:0.00格式使用java.text.DecimalFormat类的format()进行格式化DecimalFormat类是格式化十进制数值的类%=newDecimalFormat(0.00).format(price)%格式样式欲格式的数据指出哪里有错误?23总结如何理解session在购物系统中的作用?如何从session中取值和存值?常用的集合类有哪些?它们之间有什么差别?

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功