JSP培训(15)——购物车实例(下)及小结

来源:互联网 发布:广告语音制作软件 编辑:程序博客网 时间:2024/05/21 23:01

主要内容:
l         完成购物车的其他基本功能;
l         生成订单;
l         小结
1、购物车的其它功能
对购物车的物品数量修改和物品删除功能是两外两个基本功能。实现过程与添加工程比较类似,这里只给出参考代码:
1.1 模型部分
文件名:CartManager.java(在上一讲的基础上修改,红色部分为添加的内容)
package javabean;
 
import java.util.ArrayList;
import java.util.Iterator;
 
public class CartManager
{
   // 表示购物车
   private ArrayList cart;
 
   public void setCart(ArrayList cart)
   {
      this.cart = cart;
   }
   public ArrayList getCart()
   {
      return cart;
   }
  
   // 添加的物品&数量
   public ArrayList addToCart(Goods g,int quantity)
   {
      if(cart==null){
         // 实例化购物车对象
         cart=new ArrayList();
 
         // 添加到购物车
         Item item = new Item(g,quantity);
         cart.add(item);
      }
      else
      {
         // 转换成数组
         Object items[] = cart.toArray();
 
         boolean find=false; // 表示是否查找到
         
         for(int i=0;i<items.length;i++)
         {
             Item temp = (Item)items[i];
             // 判断购物车中是否存在要添加的物品
             if(temp.getGoods().getGoodsid().equals(g.getGoodsid()))
             {
                temp.setQuantity(temp.getQuantity()+quantity);
                find=true;
                break;
             }
         }
         if(!find)
         {
            // 添加到购物车
            Item item = new Item(g,quantity);
            cart.add(item);
         }
      }
      return cart;
   }
 
   public void delete(String goodsid)
   {
      // 转换成Iterator对象
      Iterator i = cart.iterator();
      while(i.hasNext())
      {
         // 得到一个购物项
         Item temp = (Item)i.next();
         if(temp.getGoods().getGoodsid().equals(goodsid))
         {
            cart.remove(temp);
            break;
         }
      }
   }
 
   public void update(String goodsid,int quantity)
   {
      Iterator i = cart.iterator();
      while(i.hasNext())
      {
         // 得到一个购物项
         Item temp = (Item)i.next();
         if(temp.getGoods().getGoodsid().equals(goodsid))
         {
            temp.setQuantity(quantity);
            break;
         }        
      }
   }  
}
1.2 修改视图部分
文件名:cart.jsp(在上一讲的基础上修改,红色部分为添加的内容)
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
购物车中的信息<br>
<table border=1>
   <tr>
      <td>物品编号</td>
      <td>物品名称</td>
      <td>价格</td>
      <td>数量</td>
   </tr>
<c:forEach var="item" items="${cart}">
   <tr>
<form action="processCart">
    <input type="hidden" name="goodsid" value="${item.goods.goodsid}">
      <td>${item.goods.goodsid}</td>
      <td>${item.goods.goodsname}</td>
      <td>${item.goods.price}</td>
      <td><input type="text" name="quantity" value="${item.quantity}"></td>
      <td><input type="submit" name="action" value="修改"></td>
      <td><input type="submit" name="action" value="删除"></td>
</form>
   </tr>
</c:forEach>
</table>
1.3 控制器
删除和修改功能使用相同的控制器,会根据提交按钮的值确定要完成的功能,参考代码如下:
文件名:ProcessCart.java
package servlet;
 
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
 
public class ProcessCart extends HttpServlet
{
   public void doGet(HttpServletRequest request,HttpServletResponse response)
     throws IOException,ServletException
   {
       //response.setContentType("text/html;charset=gb2312");
       //PrintWriter out = response.getWriter();
 
     try{
                                           // request.setCharacterEncoding("gb2312");
 
      // 得到要添加的物品的编号
      String goodsid = request.getParameter("goodsid");
      // 得到执行命令:删除还是修改
      String action = request.getParameter("action");
                                          action=new String(action.getBytes("8859_1"));
 
      //out.println(action);
     
      String quantity=null;
      if(action.equals("修改"))
      {
         quantity = request.getParameter("quantity");
      }
 
 
      // 创建JavaBean对象
      CartManager cartManager=new CartManager();
      // 得到session对象
      HttpSession session = request.getSession(true);
      // 得到购物车对象
      ArrayList cart = (ArrayList)session.getAttribute("cart");
      // 用cart初始化cartManager
      cartManager.setCart(cart);
 
      if(action.equals("修改"))
      {
         cartManager.update(goodsid,Integer.parseInt(quantity));
      }else
      {
         cartManager.delete(goodsid);
      }
 
      // 把购物车重新存到session
      session.setAttribute("cart",cartManager.getCart());
    }catch(Exception e){
       //out.println(e.toString());
    }
         response.sendRedirect("cart.jsp");     
   }
   public void doPost(HttpServletRequest request,HttpServletResponse response)
     throws IOException,ServletException
   {
      doGet(request,response);
   }
}
2、生成订单
如果用户购物完成会下订单,通常需要输入个人的送货信息等,然后把订单信息存储到数据库中。这里这介绍如何组织信息,存储信息的过程不再介绍。
需要两张表:
l         订单表
l         订单明细表
订单表中信息:
l         订单号: 日期+流水号,通常作主键
l         订单的发出者:通常从session中获取信息 或者 让用户输入(没有登录的情况下)
l         订单的日期:
l         订单的状态:
l         付款方式
l         送货地址
l         联系电话
l         接收人
订单明细表(订单号和物品编号作为联合主键):
l         订单号
l         物品的编号
l         该物品的数量
在完成订单添加的时候,最好能进行事务处理。
3、小结
整个JSP培训基本上按照MVC模式进行,自己在完成任何功能的时候都可以按照这个思路来做。
3.1 MVC思路分析
MVC:对于每个功能,都分成3部分考虑。
l         先考虑v:表示试图,与人交户,分别输入和输出。
l         M:模型,通常使用JavaBean编写,对于每个功能实际上对应的一个方法(或者多个方法),应该考虑整个方法执行的时候需要的条件(方法的输入),如何反馈(返回值类型和异常类型),具体功能使用Java代码实现。
l         C:记住4句话:
n         获取请求信息:request.getParameter方法,getParameterValues方法
n         调用JavaBean:创建对象、实例化、初始化、调用方法
n         传值:request.setAttribute
n         转向: RequestDispatcher或者response.sendRedirect方法
    因为控制器的功能非常固定,所以掌握上没有难度。而模型部分属于Java代码,与JSP语法没有太大关系,所以对读者来说,学习JSP的难度主要在视图部分。
3.2 输入和输出
输入:
l         最基本的方式:表单提交,使用表单元素提交信息,通过form的action属性指定处理文件(控制器)。比较典型的隐藏域的使用(修改信息、删除)。
l         超链方法:典型的用法,就是使用“?”传递参数,例如分页显示、删除(超链方式)。
l         通过地址栏。
这些也非常固定。
输出:
l         静态信息的输出:表头,直接输出
l         单个对象:例如user,使用${user.属性名}输出
l         集合对象:<c:forEach>标签输出
l         错误信息,包括提示信息:${error}
l         特定条件下的信息输出:<c:if>标签处理
这些相对比较灵活,主要是JSTL和EL的灵活使用。所以需要把JSTL和EL掌握好。
3.3 文件之间的关系
静态:文件之间的关联关系(多次请求之间):按钮提交、超链、地址栏输入
动态:文件之间的关系(一次请求):<jsp:forward> <jsp:include> response.sendRedirect RequestDispatcher <%@ include file=”” %>。
3.4 信息的存储:
l         持久存储:就是使用数据库存储,主要使用JDBC技术(O/R映射,JPA)。
l         临时存储:内存存储,request(MVC模式传值)、session(登录用户的信息、购物车信息)、appliction(公开的聊天室)
系列培训笔记到此结束。

JSP培训目录:

JSP培训(1)——概述
JSP培训(2)——运行原理、文档结构、简单输入输出
JSP培训(3)——客户端验证、常用输出方式、JSTL基本用法
JSP培训(4)——实例:登录功能、jsp:forward标签、jsp:include标签、include指令、EL、c:if
JSP培训(5)——使用JavaBean完成业务逻辑
JSP培训(6)——使用Servlet作为控制器实现MVC模式
JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
JSP培训(8)——添加功能和分页显示
JSP培训(9)——使用MVC模式完成删除和修改功能
JSP培训(10)——使用JavaBean封装对数据库的访问、连接池的配置和使用
JSP培训(11)——Java Web中的安全控制
JSP培训(12)——Java Web应用国际化
JSP培训(13)——异常处理
JSP培训(14)——购物车实例(上)
JSP培训(15)——购物车实例(下)及小结


本人联系方式:lixucheng@dl.cn
http://blog.csdn.net/javaeeteacher
参考教材:《Java Web程序设计基础教程》

返回JSP培训目录
原创粉丝点击