好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MVC设计模式《简易商城购物车系统》揭秘

MVC设计模式《简易商城购物车系统》揭秘

《简易商城购物系统》

大家经常去网上够物,对网上所谓的购物车应该不会陌生吧,那么今天我们就用使用javaweb的MVC设计模式来实现一个网上购物系统的案例。

最终效果如下:

三层架构的简单介绍

一、开发步骤

首先要搞清楚你要做什么,然后:

1.搭建开发环境

jstl.jar

standard.jar

2.建立类包

3.建立数据库

使用内存数据库

总之,此购物车的实现,使用的是MVC设计模式,MVC设计模式的思路就是从jsp--javabean—servlet--jsp页面做显示

流程图:

图一:MVC设计模式的简介

图二:购物系统案例的实现思路:

图三:设计购物车页面

节日正式开始,精彩不容错过。。。。

1.写一个jsp购物页面

 <%  @ page language  =  "  java  "   import  =  "  java.util.*  "   pageEncoding  =  "  UTF-8  "  %> 
 <% 
     String   path   =   request.getContextPath();
      String   basePath   =   request.getScheme()   +   "  ://  " 
             +   request.getServerName()   +   "  :  "   +   request.getServerPort()
              +   path   +   "  /  "  ;
  %> 

 <!  DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  > 
 <  html  > 
   <  head  >  
    
     <  title  > 飘叶网上商城 </  title  > 
     <  meta   http-equiv  ="pragma"   content  ="no-cache"  > 
     <  meta   http-equiv  ="cache-control"   content  ="no-cache"  > 
     <  meta   http-equiv  ="expires"   content  ="0"  >     
     <  meta   http-equiv  ="keywords"   content  ="keyword1,keyword2,keyword3"  > 
     <  meta   http-equiv  ="description"   content  ="This is my page"  > 
     <!--  
    <link rel="stylesheet" type="text/css" href="styles.css">
      --> 
   </  head  > 
  
   <  body  > 
   <  hr  /> 
   <  h2   > 欢迎进入飘叶网上购物商城 </  h2  > 
   <  hr  > 
        <  a   href  ="${pageContext.request.contextPath}/ListBookServlet"  > 进入购物页面 </  a  >   <  br  > 
   </  body  > 
 </  html  > 

2.写一个javabean

 package   cn.itcast.cart.domain;

  public   class   Book
{
      private   String id;
      private  String name; //  书名 
     private  String author; //  作者 
     private   int   price;
    
      public   Book()
    {
          super  ();
          //   TODO Auto-generated constructor stub 
     }
      public  Book(String id, String name, String author,  int   price)
    {
          super  ();
          this .id =  id;
          this .name =  name;
          this .author =  author;
          this .price =  price;
    }
      public   String getId()
    {
          return   id;
    }
      public   void   setId(String id)
    {
          this .id =  id;
    }
      public   String getName()
    {
          return   name;
    }
      public   void   setName(String name)
    {
          this .name =  name;
    }
      public   String getAuthor()
    {
          return   author;
    }
      public   void   setAuthor(String author)
    {
          this .author =  author;
    }
      public   int   getPrice()
    {
          return   price;
    }
      public   void  setPrice( int   price)
    {
          this .price =  price;
    }
    
} 

3.建立DB,用Map集合来模拟数据库

 package   cn.itcast.cart.domain;

  import   java.util.Collection;
  import   java.util.LinkedHashMap;
  import   java.util.Map;

  public   class   DB
{
  //      使用map集合来模拟数据库 
     private   static  Map<String , Book> books= new  LinkedHashMap<String, Book> ();
      static  {
        books.put( "1",  new  Book("1", "《水浒传》", "施耐庵", 48 ));
        books.put( "2",  new  Book("2", "《西游记》", "吴承恩 ", 58 ));
        books.put( "3",  new  Book("3", "《三国演义》", "罗贯中", 78 ));
        books.put( "4",  new  Book("4", "《红楼梦》", "曹雪芹", 28 ));
        books.put( "5",  new  Book("5", "《平凡的世界》", "路遥", 18 ));
    }
  //      获得所有图书
      //   获得所有图书 
     public   static  Collection<Book>  getAll() {
          return   books.values();
    }
    
      //   根据id查找图书 
     public   static   Book find(String id) {
          return   books.get(id);
    }
} 

4.用javabean建立一个购物车对象

 package   cn.itcast.cart.domain;

  public   class   ShoppingcartItem
{
      //  购物车项,每一本书买了多少本,总共多少钱 
     private   Book book;
      private   int   quantity;
      private   int   price;
      public   Book getBook()
    {
          return   book;
    }
      public   void   setBook(Book book)
    {
          this .book =  book;
    }
      public   int   getQuantity()
    {
          return   quantity;
    }
      public   void  setQuantity( int   quantity)
    {
          this .quantity =  quantity;
          this .price= this .book.getPrice()* quantity;
    }
      public   int   getPrice()
    {
          return   price;
    }
      public   void  setPrice( int   price)
    {
          this .price =  price;
    }

} 

购物车—cart

 package   cn.itcast.cart.domain;

  import   java.util.HashMap;
  import   java.util.Map;

  //  购物车对象 
 public   class   Shoppingcart
{
      private  Map<String, ShoppingcartItem> items= new  HashMap<String, ShoppingcartItem> ();
      private   int  price; //  总价 
     public  Map<String, ShoppingcartItem>  getItems()
    {
          return   items;
    }
      public   void  setItems(Map<String, ShoppingcartItem>  items)
    {
          this .items =  items;
    }
      public   int   getPrice()
    {
          //  计算总价 
         int  price=0 ;
          for  (ShoppingcartItem item:items.values())
        {
            price += item.getPrice();
        }
          return   price;
    }
      public   void  setPrice( int   price)
    {
          this .price =  price;
    }
} 

5、获得图书商品列表的servlet—ListBookServlet.java

 package   cn.itcast.cart.web.servlet;

  import   java.io.IOException;
  import   java.util.Collection;

  import   javax.servlet.ServletException;
  import   javax.servlet.http.HttpServlet;
  import   javax.servlet.http.HttpServletRequest;
  import   javax.servlet.http.HttpServletResponse;

  import   cn.itcast.cart.domain.Book;
  import   cn.itcast.cart.domain.DB;

  public   class  ListBookServlet  extends   HttpServlet
{
      //  从DB中查询所有的图书 
     public   void   doGet(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
          //  查询所有的商品 
        Collection<Book> books =  DB.getAll();
  //          转发给jsp显示 
        request.setAttribute("books" , books);
        request.getRequestDispatcher( "/WEB-INF/pages/listbook.jsp" ).forward(request, response);
    }

      public   void   doPost(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
        doGet(request, response);
    }

} 

6.servlet处理完的数据转发到一个展示商品的页面—listbook.jsp

 <%  @ page language  =  "  java  "   import  =  "  java.util.*  "   pageEncoding  =  "  UTF-8  "  %> 
 <%  @taglib prefix  =  "  c  "   uri  =  "  http://java.sun.com/jsp/jstl/core  "   %> 
 <!  DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"  > 
 <  html  > 
 <  head  > 
 <  meta   http-equiv  ="Content-Type"   content  ="text/html; charset=UTF-8"  > 
 <  title  > 显示所有的商品 </  title  > 
 <  script   type  ="text/javascript"  > 
     function   buy(id){
        window.location   =   "  ${pageContext.request.contextPath}/BuyServlet?id=  "  +  id;
    }
  </  script  > 

 </  head  > 
 <  body   style  ="text-align: center"  > 
     <  h1   > 商品列表 </  h1  > 
     <  table   border  ="1"    width  ="400px"  > 
         <  tr  > 
             <  td  > 图书名称 </  td  > 
             <  td  > 作者 </  td  > 
             <  td  > 价格 </  td  > 
             <  td  > 购买 </  td  > 
         </  tr  > 
         <  c:forEach   var  ="book"   items  ="${requestScope.books}"  > 
             <  tr  > 
             <  td  > ${book.name} </  td  > 
             <  td  > ${book.author} </  td  > 
             <  td  > ${book.price} </  td  > 
             <  td  > 
                 <  input   type  ="button"   value  ="购买"   onclick  ="buy(${book.id})"  /> 
             </  td  > 
         </  tr  > 
         </  c:forEach  > 
     </  table  > 
 </  body  > 
 </  html  > 

7.写一个购买处理的servlet

 package   cn.itcast.cart.web.servlet;

  import   java.io.IOException;
  import   java.util.Map;

  import   javax.servlet.ServletException;
  import   javax.servlet.http.HttpServlet;
  import   javax.servlet.http.HttpServletRequest;
  import   javax.servlet.http.HttpServletResponse;

  import   cn.itcast.cart.domain.Book;
  import   cn.itcast.cart.domain.DB;
  import   cn.itcast.cart.domain.Shoppingcart;
  import   cn.itcast.cart.domain.ShoppingcartItem;

  public   class  BuyServlet  extends   HttpServlet
{

      public   void   doGet(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
          //  购买页面
          //  获得图书 
        String id=request.getParameter("id" );
        Book book = DB.find(id);
  //          获得购物车 
        Shoppingcart cart = (Shoppingcart) request.getSession().getAttribute("cart" );
          if (cart== null  ){
              //  首次购物 
            cart= new   Shoppingcart();
            request.getSession().setAttribute( "cart" , cart);
        }
  //          商品放入购物车 
         bookInCart(book,cart);
  //          跳转至购物车页面,是一个请求重定向的页面 
        response.sendRedirect(request.getContextPath()+"/ListCartServlet" );
    }
  //  购物 
     private   void   bookInCart(Book book, Shoppingcart cart)
    {  //  判断是否买过 
        Map<String, ShoppingcartItem> items =  cart.getItems();
        
        ShoppingcartItem item  =  items.get(book.getId());
        
          if (item== null  ){
              //  此书未买过,创建新条目 
            item= new   ShoppingcartItem();
            item.setBook(book);
            item.setQuantity( 1 );
              //  条目存入购物车 
             items.put(book.getId(), item);
        }  else  {
              //  买过数量加1 
            item.setQuantity(item.getQuantity()+1 );
        }
        
    }

      public   void   doPost(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
        doGet(request, response);
    }

} 

8.写一个获得购物车数据处理的servlet—ListCartServlet.java

 package   cn.itcast.cart.web.servlet;

  import   java.io.IOException;

  import   javax.servlet.ServletException;
  import   javax.servlet.http.HttpServlet;
  import   javax.servlet.http.HttpServletRequest;
  import   javax.servlet.http.HttpServletResponse;

  public   class  ListCartServlet  extends   HttpServlet
{
    
      //  查看购物车,请求重定向的页面 
     public   void   doGet(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
        request.getRequestDispatcher( "/WEB-INF/pages/listcart.jsp" ).forward(request, response);
        
        
        
    }

      public   void   doPost(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
        doGet(request, response);
    }

} 

9.购买的东西放入购物车,继而转向购物车展示页面—listcart.jsp

 <%  @ page language  =  "  java  "   contentType  =  "  text/html; charset=UTF-8  "  
    pageEncoding  =  "  UTF-8  "  %> 
     <%  --      只要使用foreach就要导入下面的这句代码  --  %> 
 <%  @taglib prefix  =  "  c  "   uri  =  "  http://java.sun.com/jsp/jstl/core  "  %> 
 <!  DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"  > 
 <  html  > 
 <  head  > 
 <  meta   http-equiv  ="Content-Type"   content  ="text/html; charset=UTF-8"  > 
 <  title  > 购物车页面 </  title  > 
 <  script   type  ="text/javascript"  > 
     function   change(id,inputObj){
          var   quantity  =  inputObj.value;

          if  (quantity  ==  null   ||   quantity  ==  ""  ) {
            alert(  "  数量不能为空  "  );
            inputObj.value   =   defaultValue;
              return  ;
        }
        
          if  (quantity.match(  /  ^[1-9][0-9]*$  /  )  ==  null  ) {
            alert(  "  数量必须为正整数  "  );
            inputObj.value   =   defaultValue;
              return  ;
        }
        
          if  (parseInt(quantity)  >  999  ) {
            alert(  "  您购买的数量已达到团购标准,请致电800-820-8820  "  );
            inputObj.value   =   defaultValue;
              return  ;
        }
        
        
        window.location  =  "  ${pageContext.request.contextPath}/UpdateServlet?id=  "  +  id  +  "  &quantity=  "  +  quantity;
    }
  </  script  > 

 </  head  > 
 <  body   style  ="text-align: center"  > 
 <  h1  > 我的购物车 </  h1  ><  br  > 
 <  hr  > 
 <  table   border  ="1"   width  ="800px"  > 
     <  tr  > 
         <  td  > 商品名称 </  td  > 
         <  td  > 单价 </  td  > 
         <  td  > 数量 </  td  > 
         <  td  > 小计 </  td  > 
         <  td  > 操作 </  td  > 
     </  tr  > 
 <%  --  map迭代完后都是entry  --  %> 
     <  c:forEach   var  ="entry"   items  ="${cart.items}"  > 
     <  tr  > 
         <  td  > ${entry.value.book.name} </  td  > 
         <  td  > ${entry.value.book.price} </  td  > 
         <  td  > 
             <  input   type  ="text"   value  ="${entry.value.quantity}"    onblur  ="change(${entry.key},this) "   style  =" 40px;"  /> 
         </  td  > 
         <  td  > ${entry.value.price} </  td  > 
         <  td  > 
             <  a   href  ="${pageContext.request.contextPath}/DaleServlet?id=${entry.key }"  > 删除 </  a  > 
         </  td  > 
     </  tr  >     
     </  c:forEach  > 
     <  tr  > 
         <  td  > 
             <  a   href  ="${pageContext.request.contextPath}/clearServlet"  > 清空购物车 </  a  > 
         </  td  > 
         <  td  > 
             <  a   href  ="${pageContext.request.contextPath}/ListBookServlet"  > 继续购物 </  a  > 
         </  td  > 
         <  td  > 
             <  a   href  ="#"  > 下订单 </  a  > 
         </  td  > 
         <  td   colspan  ="2"  > 购物车总价:¥${cart.price}元 </  td  > 
     </  tr  > 
 </  table  > 
 </  body  > 
 </  html  > 

下面就是实现购物车里面的一些操作功能

10.更新购物车,就是修改完数量后,自动更新购物车—UpdateServlet.java

 package   cn.itcast.cart.web.servlet;

  import   java.io.IOException;
  import   java.util.Map;

  import   javax.servlet.ServletException;
  import   javax.servlet.http.HttpServlet;
  import   javax.servlet.http.HttpServletRequest;
  import   javax.servlet.http.HttpServletResponse;

  import   cn.itcast.cart.domain.Shoppingcart;
  import   cn.itcast.cart.domain.ShoppingcartItem;

  public   class  UpdateServlet  extends   HttpServlet
{
      //  更新购物车 
     public   void   doGet(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
          //  获得id和quantity 
        String id=request.getParameter("id" );
          int  quantity=Integer.parseInt(request.getParameter("quantity" ));
          //  获得购物车 
        Shoppingcart cart = (Shoppingcart) request.getSession().getAttribute("cart" );
          //   修改数量 
         /*  
        Map<String, ShoppingcartItem> items = cart.getItems();
        
        ShoppingcartItem item = items.get(id);
        
        item.setQuantity(quantity);  */  
        
        cart.getItems().get(id).setQuantity(quantity);
        
          //   跳转至购物车页面 
        response.sendRedirect(request.getContextPath() + "/ListCartServlet" );
    }

        
    

      public   void   doPost(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
        doGet(request, response);
    }

} 

11.删除购物车中的单行数据—DaleServlet.java

 package   cn.itcast.cart.web.servlet;

  import   java.io.IOException;

  import   javax.servlet.ServletException;
  import   javax.servlet.http.HttpServlet;
  import   javax.servlet.http.HttpServletRequest;
  import   javax.servlet.http.HttpServletResponse;

  import   cn.itcast.cart.domain.Shoppingcart;

  public   class  DaleServlet  extends   HttpServlet
{

      public   void   doGet(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
          //   获得id 
        String id = request.getParameter("id" );
        
          //   获得购物车 
        Shoppingcart cart = (Shoppingcart) request.getSession().getAttribute("cart" );
        
          //  删除条目 
         cart.getItems().remove(id);

          //   跳转至购物车页面 
        response.sendRedirect(request.getContextPath()+"/ListCartServlet" );
    }

      public   void   doPost(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
        doGet(request, response);
    }

} 

12.清空购物车—clearServlet.java

 package   cn.itcast.cart.web.servlet;

  import   java.io.IOException;

  import   javax.servlet.ServletException;
  import   javax.servlet.http.HttpServlet;
  import   javax.servlet.http.HttpServletRequest;
  import   javax.servlet.http.HttpServletResponse;

  import   cn.itcast.cart.domain.Shoppingcart;

  public   class  clearServlet  extends   HttpServlet
{

      public   void   doGet(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
          //   获得购物车 
        Shoppingcart cart = (Shoppingcart) request.getSession().getAttribute("cart" );
        
          //   清空购物车 
         cart.getItems().clear();
        
          //   跳转至购买页面 
        response.sendRedirect(request.getContextPath()+"/ListBookServlet" );
    }




      public   void   doPost(HttpServletRequest request, HttpServletResponse response)
              throws   ServletException, IOException
    {
        doGet(request, response);
    }

} 

ok,忙碌到半夜,到此结束,下面看看我们的最终效果吧:

--------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------

嘿嘿,没有美工处理的页面,还行,像那回事吧?

这上面的所有功能都可以实现的哦!

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于MVC设计模式《简易商城购物车系统》揭秘的详细内容...

  阅读:42次