购物车功能实现 Dear 丶 2022-07-05 15:07 271阅读 0赞 **购物车功能的实现:** **一、创建购物车类:** **框架:** 1. 购物车可以有很多不同种类的商品,可以将购物车传入泛型; 2. 定义一个Map类型 Map<T,Integer> carMap; **public** Car()\{ //创建的hashMap应为有序的,键不重复值可重复的部分,所以使用LinkedHashMap carMap=**new** LinkedHashMap<T,Integer>(); \} //获取购物车 **public** Map<T,Integer> getCarMap()\{ **return** carMap; \} 3. 购物车会实现增加商品,减少商品,和清空购物车的功能,因为可添加对应方法:**public void** saveOrUpdate(T p,Integer q)\{ //如果当前的购物车包含商品 **if**(carMap.containsKey(p))\{ //获取当前商品的数量 **int** qq=carMap.get(p); //将商品和数量放置到购物车中 carMap.put(p, qq\+q); \}**else**\{ //如果当前的购物车没有商品,将当前的购物车数量放置到Map中 carMap.put(p, q); \} \} **二、car.jsp页面操作:** 1.引入<%@taglib uri=*"http://java.sun.com/jsp/jstl/core"* prefix=*"c"*%> 这样能够使用jstl语句; 2.购物车中有继续购物,清除购物车和添加订单的功能;所以在jsp页面上设置对应的链接,实现相关操作: <div align=*"right"*> <a href=*"*$\{pageContext.request.contextPath\}*/ProdListServlet"*>继续购物</a> <a href=*"*$\{pageContext.request.contextPath\}*/CleanServlet"*>清空购物车</a> <a href=*"*$\{pageContext.request.contextPath\}*/addOrder.jsp"*>添加订单</a> </div> 3.购物车中也有金额实现,定义变量money,初始化值为0; <c:set var=*"money"* value=*"0"*></c:set> 4. 购物车中:缩略图、商品名称、种类、单价、数量、总价、操作内容 使用<c:forEach>方式进行遍历,里面分别有传入缩略图的路径;商品的名称,种类、单价、数量、总价、操作;详见代码: <table> <c:forEach items=*"*$\{car.carMap\}*"* var=*"entry"*> <tr> <td><img src=*"*$\{pageContext.request.contextPath\}*/ImgServlet?id=*$\{entry.key.id\}*&type=s"*></td> <td>$\{entry.key.name \}</td> <td>$\{entry.key.category \}</td> <td>$\{entry.key.price \}元</td> <td><input type=*"text"* value=*"*$\{entry.value\}*"* onchange=*"changeNum('*$\{entry.key.id\}*',this)"*></td> <td>$\{entry.key.price\*entry.value \}元</td> <c:set var=*"money"* value=*"*$\{money+ entry.key.price\*entry.value \}*"*></c:set> <td><a href=*"*$\{pageContext.request.contextPath\}*/DelCarServlet?id=*$\{entry.key.id\}*"*>删除</a></td> </tr> </c:forEach> </table> 在jsp页面的右下角,设置总金额: <div align=*"right"*> <font color=*"red"* size=*"6"*>总价:$\{money\}元</font> </div> ** ** **三、servlet相关操作:** **⑴ProdListServlet功能实现:继续购物,就是转回到购物列表中;** 1.**声明ProdService类对象,便于查询所有商品** ProdService service=(ProdService) BasicFactory.*getFactory*().getInstance("ProdService"); **2.在doPost或doGet方法中调用findAllProds()方法:** //获取所有商品,并将其返回到列表中 List<Prod> list=service.findAllProds(); request.setAttribute("list", list); request.getRequestDispatcher("/prodList.jsp").forward(request, response); 3.**因为涉及到findAllProds()方法,所以在ProductDaoImpl实现findAllProds()操作;** 1)**定义sql语句:** ** **String sql = "select \* from products"; 2)QueryRunner runner=new QueryRunner(DaoUtils.*getSource*()); 3)Runner.update(sql,new BeanListHandler<Prod>(Prod.class)); **⑵CleanServlet功能实现,清空购物车:** **首先需要获取car对象,然后调用clean方法** Car<Prod> car=(Car<Prod>) request.getSession().getAttribute("car"); Car.clean(); 当购物车清空完毕后,跳转到car.jsp页面 response.sendRedirect(request.getContextPath()+"/car.jsp"); ** ** 四、**设置删除购物车商品的功能:** **建立链接:** <td><a href=*"*$\{pageContext.request.contextPath\}*/DelCarServlet?id=*$\{entry.key.id\}*"*>删除</a></td> **在DelCarServlet实现删除操作:** **1)首先获取ProdService对象** ProdService service = (ProdService) BasicFactory.*getFactory*().getInstance("ProdService"); 2)获取商品的id String id = request.getParameter("id"); 3)根据商品的id获取商品对象 Prod prod = service.findProdById(Integer.*valueOf*(id)); 4)获取session中的car对象 Car<Prod> car=(Car<Prod>)request.getSession().getAttribute(“car”); 5)让购物车实现删除商品的操作: car.delete(prod); 6)当删除完商品后,重定向到car.jsp页面中 response.sendRedirect(request.getContextPath()+"/car.jsp"); 五、**页面金额随着点击数目,而做出总额改变的功能:** 在car.jsp页面中,设置初始化变量money,它的值为0 <c:set var=”money” value=”0”><c:set> //遍历的内容是car的map类,这样可以使用jstl直接调用属性值;如下代码显示,$\{entry.key.id\}可以获取carMap的id值; <c:forEach items=*"*$\{car.carMap\}*"* var=*"entry"*> <td><input type=*"text"* value=*"*$\{entry.value\}*"* onchange=*"changeNum('*$\{entry.key.id\}*',this)"*></td> </c:forEach> **遍历后,为了方便展示总价,使用此样式** <div align=*"right"*> <font color=*"red"* size=*"6"*>总价:$\{money\}元</font> </div> 六、**缩略图功能的实现:** **Jsp页面显示:** <c:forEach items=*"*$\{car.carMap\}*"* var=*"entry"*> <tr> <td><img src=*"*$\{pageContext.request.contextPath\}*/ImgServlet?id=*$\{entry.key.id\}*&type=s"*></td> </tr> **Servlet进行操作:** 先获取id和type. String id=request.getParameter(“id”); String type=request.getParameter(“type”); //获取商品对象 Prod prod=service.findProdById(Integer.*valueOf*(id)); String s=null; 判断当前type是否为s,因为在PicUtils中使用s来判断缩略图,如果是缩略图,就将缩略图的地址传到s中; If(“s”.equals(type))\{ //获取缩略图的地址 s = prod.getImgurls(); \}**else**\{ //获取普通图的地址 s = prod.getImgurl(); \} //进行转发 request.getServletContext().getRequestDispatcher(s).forward(request, response); **Service进行操作:** @Override **public** Prod findProdById(Integer id) \{ // **TODO** Auto-generated method stub **return** dao.findProdById(id); \} **Dao进行操作:** **定义sql语句:** String sql = "select \* from products where id=?"; //获取连接对象 QueryRunner runner = **new** QueryRunner(DaoUtils.*getSource*()); //使用更新 Prod prod=runner.query(sql, **new**BeanHandler<Prod>(Prod.**class**),id); **return** prod;
还没有评论,来说两句吧...