教案:开发基于JSPServletJavaBean的网上交易系统-第4章 基于Servlet的会话跟踪(二)

    技术2022-05-11  44

    授课教师:牟勇

    课时: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总结集合类和接口:MapList在以前的学习中已经接触过,而Set没有,所以在讲解时,以Set为重点,但是主要说明使用Set遍历Map中的数据,对于其他的Set特性不进行介绍。

    回顾:   [5分钟]

    Web项目中为什么要使用会话?

    在会话中如何存取数据?

    如何创建和结束一个会话?

    预习检查:   [5分钟]

    实现一个购物系统的步骤?

    如何对购物车中的每种商品的数量进行管理?

    ListSetMap的异同?

    课程知识点讲解:   

    回顾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;

       }

       //其他的settergetter方法

    }

    购物车的实现

    教员应说明整业务流程,特别提示使用HashMap来实现并不是唯一的途径,其实使用其它的集合类也是可以的。

    回顾:Map

    什么是MapMap的特点是什么?

           键—值对

    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接口继承关系和常用方法

    现场编程

    添加商品到购物车的实现步骤是什么?

    教员让一至二位学员进行现场编程

    常见错误:

    1404错误。路径错误。

    2:页面无显示:可能是把名称打错了。

    可不可以使用Mapsize()进行循环获得keyvalue

    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接口的特点

    教员应详细讲解上面的继承树,说明ListSet的区别。

    Map的特点

    教员应详细讲解上面的继承树,强调Map是以键-值对的方式存储数据,数据之间没有顺序。

    本章总结   [10分钟]

    如何理解session在购物系统中的作用?

    如何从session中取值和存值?

    常用的集合类有哪些?它们之间有什么差别?

    考核点

    如何创建会话

    如何结束一个会话

    如何在会话中保存和取得数据

    扩展部分:

     暂无

    学员问题汇总:

     暂无

    作业:

     习题192页至93页选择题

     习题293页第1,2,3,4

      习题 3 :预习第五章,试做课后的选择题

    最新回复(0)