JavaWeb图书管理系统day02

  1. JavaWeb图书管理系统day01
  2. JavaWeb图书管理系统day02
  3. JavaWeb图书管理系统day03

目录

day01复习

一、查看商品详细信息

二、添加商品到购物车

三、显示购物车商品

四、购物车删除与修改操作


第二天内容:
    1.查看商品详细信息
    2.添加商品到购物车
    3.显示购物车商品
    4.购物车删除与修改操作

day01复习

1.注册操作
        用户注册成功后,需要进行邮件激活
2.登录操作
        使用Cookie。
        记住用户名
            当用户登录成功后,将用户名存储到cookie中(持久化存储)
            当下一次再访问时,就会从请求中得到指定cookie信息,从cookie中
            获取用户名,显示在文本框中
            
            注意:cookie中不能存储中文
        自动登录操作
            当用户登录成功后,将用户名与密码存储到cookie中(持久化存储)。
            当下一次再访问时,我们会通过一个Filter进行信息拦截,得到指定的cookie信息,完成自动登录操作。
3.显示所有商品操作
        www.bookEstore.com
        会访问index.jsp页面,在这个页面中 请求转发到了ProductSerlvet中,并且 完成了查询所有商品的操作,
        得到一个List<Product>,存储到request域中,跳转到page.jsp页面
        在页面上显示出所有商品信息。
        
4.添加商品操作
    本质上是一个文件上传操作。因为我们在添加商品时,需要指定一个商品的图片。
    
    我们使用commons-fileupload 完成文件上传
    在AddProductServlet中完成了两个操作:
        1.文件上传操作
        2.书籍信息收集,添加到数据库操作。

一、查看商品详细信息

1.查询商品详细信息
            
        在page.jsp页面会显示所以商品信息,它提供一个链接,可以 点击 查看当前书籍的详细信息。
        
        <a href='${pageContext.request.contextPath}/product?method=findById&id=${p.id}'>速速抢购</a>
    
        会访问一个servlet(ProductServlet)并且传递了method=findById,id=xxxx.
        
        在servlet中根据传递的method值,判断要执行的是findById方法,也就根据id查找书籍信息。
        会调用ProductService中查找操作的方法,在ProductService中调用ProductDao中查找书籍方法,
        最后得到一个Product对象,也就是商品信息封装对象。
        将查找到的Product对象封装到request域中,请求转发到productInfo.jsp页面,
        在页面上展示书籍详细信息。

二、添加商品到购物车

2.添加商品到购物车操作
      声明:购物车,没有数据库,直接使用session存储信息.
      
      当productInfo.jsp页面,点击添加商品到购物车时,会将商品的id传递到服务器端
      
      在页面上点击添加商品到购物车会调用一个js函数
      function addProductToCart(id) {
        location.href = "${pageContext.request.contextPath}/cart?method=add&id=" + id;
      }
    
      在服务器端会有CartServlet,它就是用于处理我们购物车操作的。
        1.得到商品id  request.getParameter("id");
        2.根据id查找出商品   Product对象.
        3.关于购物车的数据结构
            Map<Product,Integer> 它就是我们的购物车,最终Map集合会存储到session中。
            
        4.第一次添加商品到购物车时,在服务器端,根据就没有购物车,也就是没有map集合。
          得到的是null值,就可以知道是第一次购物,就可以将购物车创建出来,并且,将商品添加到Map集合中。    

        5.如果不是第一次购物,查询后得到的map集合就不为null,就说明购物车中可能已经存在了商品,
          就需要考虑一个事情,就需要考虑一个事情,购物车中存在了当前要购买的商品。

            Map集合特点:
                key是唯一的,如果使用put方法存储,那么,当key重复时,put方法 返回的就是原来的value值。
                
                可以根据put方法返回值,来判断商品在购物车中是否存在,
                如果存在了,也就是说,put方法返回值不为null,这时就可以将返回值+1,
                再重新存储到map集合中。

三、显示购物车商品

3.查看购物车中商品
    当点击查看购物车中商品时,会跳转到一个jsp页面,购物车是存储在session中的,
    那么在jsp页面上就可以直接得到session中的商品信息.
    
    <a href="${pageContext.request.contextPath}/showCart.jsp">
        
          使用jstl的forEach遍历Map集合.
        <c:forEach items=${cart}  var="entry">
            
            ${entry.key}    --- 对于cart中的key,它就是一个Product对象
            ${entry.value} --- 对于caft中的value,它是一个Integer对象,其实就是商品数量
            
        </c:forEach>
        
        通过<c:set> 来 完成 商品的总价计算操作。

四、购物车删除与修改操作

关于购物车中商品的数量修改购物车中商品删除操作
    1.关于数据修改问题
        
        1.关于点击+ -按钮完成商品数量修改操作
            当点击按钮时会调用函数changeCount(商品的id,商品修改数量,商品的库存)
            οnclick="changeCount('${entry.key.id }','${entry.value-1}','${entry.key.pnum}')"
        
            在js中它是没数据类型的,那么当传递参数时,在函数中,可能认为它是一个字符串,
            那么就会引起问题。通过parseInt()函数将数值转换成数字.
        
            在函数中处理数据后,会将数据传递到服务器端
            location.href = "${pageContext.request.contextPath}/cart?method=update&id=" + id
                + "&count=" + count;
                
            在CartServlet中通过判断method=update完成操作.
                1.得到要修改商品的id,在得到要修改的商品数量值count.
                2.直接对购物车中的商品进行操作.
                3.为什么直接创建一个Product对象,将id值赋值给它,就可以
                  直接修改商品数量.
                  
                  原因:对Product类中的equals方法进行了重写,只比较商品的id.
                       在重写equalse方法时,也将hashCode方法重写了.
                       
        2.关于+号操作
            以后面的原理一样
            
            οnclick="changeCount('${entry.key.id}','${entry.value+1}','${entry.key.pnum }')"
        
            区别:-号操作,是将商品的数量进行-1操作
                 +号操作,是将商品的数量进行+1操作
                 
        3.文本框失去焦点时,也调用         
            οnblur="changeCount('${entry.key.id}',this.value,'${entry.key.pnum}')
            注意:传递了this.value,它代表的是文本框中的值
            
        4.数字文本框
            通过对文本添加onkeydown事件操作,当键盘按下时,会调用一个函数.numbText(event)
            在函数中通过判断按下键的keyCode值,就是键码值,来判断当前是否按下的是指定的
            按钮。
            
            注意:对于firefox或ie浏览器,它们获取事件对象event有区别。
            code = e.which; 判断firefox浏览器  得到键码值.
            code = window.event.keyCode; 判断是ie浏览器,得到键码值.
            
            
            if (!(code >= 48 && code <= 57 || code == 8 || code == 46)) 
            这是判断当前按下的不是0-9  delete  backspace
            这时就要阻止事件的默认行为.
            
            e.preventDefault();  firefox阻止默认行为执行
            window.event.returnValue = false; ie浏览器阻止默认行为执行.
            
        5.关于删除操作
            <a href="${pageContext.request.contextPath}/cart?method=remove&id=${entry.key.id}" οnclick="delConfirm(event)">删除</a>
            
            这个超链接会访问服务器的一个CartServlet,method=remove代表要执行的是删除操作。
            并且将商品的id传递到服务器端
            
            得到id后,new Product(),这个对象的id值就是传递过去的。
            对于Product类来说,它已经重写了equals方法,它比较的就是id。
            在map集合中,就可以直接根据我们创建的Product对象,将商品删除。
            
            最后会判断当前购物车中是否有商品,如果没有,直接将购物车删除。
            
            确认删除操作?
                
                function delConfirm(e) {
                    var flag=window.confirm("确认删除商品吗");
                    
                    if(!flag){
                        //不删除商品        
                        //要想不删除商品,要阻止事件的默认行为执行.
                        if(e&&e.preventDefault){
                            // e对象存在,preventDefault方法存在 ---- 火狐浏览器
                            e.preventDefault();
                        }else{
                            // 不支持e对象,或者没有preventDefault方法 ---- IE
                            window.event.returnValue = false;
                        }

                    }                    
                }
                我们阻止超链接的默认事件执行,这样超链接就不会向href指定的路径发送请求。

猜你喜欢

转载自blog.csdn.net/weixin_44949135/article/details/114100118