教案:开发基于JSPServletJavaBean的网上交易系统-第4章 基于Servlet的会话跟
授课教师:牟勇
课时:100分钟
l 本章技能目标
n 掌握如何操作session中的对象
n 会使用session的相关属性和方法
l 本章重点
nHttpSession的理解
n使用HttpSession进行会话跟踪
l 本章难点
n使用HttpSession进行会话跟踪
l 本章工作任务
n升级E-Book电子书店实现购物车功能
u 将书籍添加到购物车之中
u 查看购物车商品
l 整章授课思路
n本章依次讲解四个问题:回顾E-Book电子书店已实现的功能,继续实现E-Book电子书店的购物车,显示购物车Map中数据和总结集合类和接口
n回顾E-Book电子书店已实现功能:回顾在第3章中已经实现的电子书店功能,显示所有书籍的列表,以及查看书籍的详细信息。
n继续实现E-Book电子书店的购物车:对比现实中的购物情况,为了方便商品的拿取,使用购物车和袋子装载商品,在程序中我们使用Map作为装载工具。
n总结集合类和接口:Map、List在以前的学习中已经接触过,而Set没有,所以在讲解时,以Set为重点,但是主要说明使用Set遍历Map中的数据,对于其他的Set特性不进行介绍。
回顾: [5分钟]
在Web项目中为什么要使用会话?
在会话中如何存取数据?
如何创建和结束一个会话?
预习检查: [5分钟]
实现一个购物系统的步骤?
如何对购物车中的每种商品的数量进行管理?
List、Set、Map的异同?
课程知识点讲解:
回顾E-Book电子书店已实现功能:[5分钟]
E-Book电子书店已实现功能
v 显示所有书籍的列表
v 查看书籍详细信息
继续实现E-Book电子书店的购物车[35分钟]
设计分析:本章要完成的内容:
购物车中对象的设计
使用Servlet实现添加书籍到购物车
使用JSP实现查看购物车的书籍列表
购物车:
|——书籍
|——ID
|——书名
|——版本
|——价格
|——书籍数量
public class CartItemBean implements Serializable { private BookBean book; //当前书籍 private int quantity; //购物车中的数量 public CartItemBean( BookBean bookToAdd, int number ){ book = bookToAdd; quantity = number; } public void setQuantity( int number ){ quantity = number; } public int getQuantity(){ return quantity; } …//其他的setter、getter方法 }
购物车的实现
教员应说明整业务流程,特别提示使用HashMap来实现并不是唯一的途径,其实使用其它的集合类也是可以的。
回顾:Map
什么是Map?Map的特点是什么?
键—值对
Map的对象如何创建?
new HashMap()
如何向Map中添加数据?
put(“键”,”值”)方法
如何从Map中取数据?
get(“键”);
实现添加书籍到购物车
v 获得session对象
v 从session中取出BookBean对象
v 创建HashMap对象,并添加一个条目到Map中
… public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(false); BookBean book = (BookBean)session.getAttribute("bookToAdd"); Map cart = new HashMap(); cart.put(book.getISBN(), new CartItemBean(book, 1)); session.setAttribute("cart", cart); } …
教员说明以上重点代码(红色部分)。
判断购物车中是否存在该书籍
v 存在:数量加一
v 不存在:添加条目到Map中
HttpSession session = request.getSession(false); Map cart = (Map) session.getAttribute("cart"); if (cart == null) { cart = new HashMap(); session.setAttribute("cart", cart); } BookBean book = (BookBean) session.getAttribute("bookToAdd"); CartItemBean cartItem = (CartItemBean) cart.get(book.getISBN()); if (cartItem != null){ cartItem.setQuantity(cartItem.getQuantity() + 1); } else{ cart.put(book.getISBN(), new CartItemBean(book, 1)); }
教员应讲解重点代码(红色部分)
显示购物车Map中的数据[25分钟]
查看购物车列表
从session中取出Map
从Map中取出CartItemBean数据
转向viewCart.jsp
<%@ page contentType= " text/html;charset=GBK" %> Map cart = (Map) session.getAttribute("cart"); Set cartItems = cart.keySet(); Object[ ] isbn = cartItems.toArray(); BookBean book; int i = 0; while (i < isbn.length) { cartItem = (CartItemBean) cart.get((String)isbn[i]); book = cartItem.getBook(); //在页面上显示book数据,如:book.getTitle(); i++; }
教员讲解重点代码(红色部分)
Set接口继承关系和常用方法
现场编程
添加商品到购物车的实现步骤是什么?
教员让一至二位学员进行现场编程
常见错误:
1:404错误。路径错误。
2:页面无显示:可能是把名称打错了。
可不可以使用Map的size()进行循环获得key、value值
Map 不具有整数索引,不能利用size()进行循环
常见错误
指出下面红色部分有什么错误
<% Map cart = (Map) session.getAttribute("cart"); Set cartItems = cart.keySet(); Object[ ] isbn = cartItems.toArray(); int i = 0; while (i < isbn.length) { CartItemBean cartItem = (CartItemBean) cart.get(isbn[ i ]); BookBean book = cartItem.getBook(); } %>
get()方法需要一个String,所以这里需要进行强制类型转换。
格式不正确(幻灯片22)
解决方案:<%= new DecimalFormat( "0.00" ).format( price ) %>
总结集合类和接口[15分钟]
Colloection接口的特点
教员应详细讲解上面的继承树,说明List和Set的区别。
Map的特点
教员应详细讲解上面的继承树,强调Map是以键-值对的方式存储数据,数据之间没有顺序。
本章总结 [10分钟]
如何理解session在购物系统中的作用?
如何从session中取值和存值?
常用的集合类有哪些?它们之间有什么差别?
考核点
如何创建会话
如何结束一个会话
如何在会话中保存和取得数据