购物车的实现(jsp的session+Java的Map的结合)

您所在的位置:网站首页 session如何实现购物车 购物车的实现(jsp的session+Java的Map的结合)

购物车的实现(jsp的session+Java的Map的结合)

2024-01-06 16:22| 来源: 网络整理| 查看: 265

1:电商如此发达的现在,作为一个web开发程序猿,如果不会写购物车,真是有点不好意思找工作。所以抓紧练习啊,从上篇博客中抽离出如何实现购物车的功能。

2:首先需要理解购物车实现的一些基本步骤。   2.1:首先考虑我购买的是哪一本书籍或者那一件商品,是不是,这里可以使用id传参确定购买的是那一件商品或者书籍,也可以使用session中取出哪一本书籍,这里采用从session的取出那一件商品或者书籍        代码如:

      Book book=(Book)session.getAttribute("book");      2.2:第二考虑如何把书籍放到购物车中          2.1.1:首先考虑是否有购物车,如果没有,则创建,如果有直接使用          2.1.2:其次先将购物车从session中拿出来,不存在就创建。     代码如:

      Map cart=(Map)session.getAttribute("cart");         //如果没有购物车,那么创建,只有第一次访问才会操作         if(cart==null){            //new一个购物车           cart=new HashMap();         }     2.3:考虑如何把书籍放到购物车中        2.1.1:第一考虑购物车中是否有该书籍,所以先从购物车中获取该书籍,如果为空,那么没有该书籍       代码如:

    CartItem item=(CartItem)cart.get(book.getBookid());        if(item==null){              //如果购物车中不存在该书籍,那么创建,且数量默认为1                item=new CartItem();                //将书籍放到购物车中               item.setBook(book);               //将书籍的默认数量为1               item.setNumber(1);           }else{               //如果购物车中以及有该书籍,那么数量加1               item.setNumber(item.getNumber()+1);           }     2.4:考虑如何把购物车项(即挑选的书籍是哪一个和书本的数量)放到购物车中        代码如:

    cart.put(book.getBookid(),item);     2.5:将购物车放到session中,方便后面取出来        代码如:

  session.setAttribute("cart", cart);

3:下面是具体的实现,从创建数据表开始,数据表book字段和数据名称如下所示:

4:下面创建实体类book.java;

1 package com.bie.po; 2 3 import java.io.Serializable; 4 5 /** 6 * @author BieHongLi 7 * @version 创建时间:2017年2月27日 上午10:07:21 8 * 图书的实体类 9 */ 10 public class Book implements Serializable{ 11 12 //实体类实现序列化,避免后面出现异常 13 private static final long serialVersionUID = 1L; 14 private Integer bookid; 15 private String bookname; 16 private Double price; 17 private String author; 18 private String pic; 19 private String publish; 20 public Integer getBookid() { 21 return bookid; 22 } 23 public void setBookid(Integer bookid) { 24 this.bookid = bookid; 25 } 26 public String getBookname() { 27 return bookname; 28 } 29 public void setBookname(String bookname) { 30 this.bookname = bookname; 31 } 32 public Double getPrice() { 33 return price; 34 } 35 public void setPrice(Double price) { 36 this.price = price; 37 } 38 public String getAuthor() { 39 return author; 40 } 41 public void setAuthor(String author) { 42 this.author = author; 43 } 44 public String getPic() { 45 return pic; 46 } 47 public void setPic(String pic) { 48 this.pic = pic; 49 } 50 public String getPublish() { 51 return publish; 52 } 53 public void setPublish(String publish) { 54 this.publish = publish; 55 } 56 @Override 57 public String toString() { 58 return "Book [bookid=" + bookid + ", bookname=" + bookname + ", price=" + price + ", author=" + author 59 + ", pic=" + pic + ", publish=" + publish + "]"; 60 } 61 62 63 }

5:创建好实体类接下来是写工具类BaseDao.java,用于连接数据库的操作,这些代码就不做多解释了,都已经写烂了。所以工具类一定要熟练书写

1 package com.bie.utils; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 9 /** 10 * @author BieHongLi 11 * @version 创建时间:2017年2月27日 上午10:09:00 12 * 连接数据库的工具类 13 */ 14 public class BaseDao { 15 16 private static String driver="com.mysql.jdbc.Driver"; 17 private static String url="jdbc:mysql:///test"; 18 private static String user="root"; 19 private static String password="123456"; 20 21 /*** 22 * 连接数据库的方法 23 * @return 24 * @throws ClassNotFoundException 25 * @throws SQLException 26 */ 27 public static Connection getCon() throws ClassNotFoundException, SQLException{ 28 Class.forName(driver);//加载数据库驱动 29 System.out.println("测试加载数据库成功"); 30 Connection con=DriverManager.getConnection(url, user, password); 31 System.out.println("测试数据库链接成功"); 32 return con; 33 } 34 35 /*** 36 * 关闭数据库的方法 37 * @param con 38 * @param ps 39 * @param rs 40 */ 41 public static void close(Connection con,PreparedStatement ps,ResultSet rs){ 42 if(rs!=null){//关闭资源,避免出现异常 43 try { 44 rs.close(); 45 } catch (SQLException e) { 46 // TODO Auto-generated catch block 47 e.printStackTrace(); 48 } 49 } 50 if(ps!=null){ 51 try { 52 ps.close(); 53 } catch (SQLException e) { 54 // TODO Auto-generated catch block 55 e.printStackTrace(); 56 } 57 } 58 if(con!=null){ 59 try { 60 con.close(); 61 } catch (SQLException e) { 62 // TODO Auto-generated catch block 63 e.printStackTrace(); 64 } 65 } 66 } 67 68 /*** 69 * 同意增删改的方法 70 * @param sql 71 * @param arr 72 * @return 73 */ 74 public static boolean addUpdateDelete(String sql,Object[] arr){ 75 Connection con=null; 76 PreparedStatement ps=null; 77 try { 78 con=BaseDao.getCon();//第一步 :连接数据库的操作 79 ps=con.prepareStatement(sql);//第二步:预编译 80 //第三步:设置值 81 if(arr!=null && arr.length!=0){ 82 for(int i=0;i0){ 88 return true; 89 }else{ 90 return false; 91 } 92 } catch (ClassNotFoundException e) { 93 // TODO Auto-generated catch block 94 e.printStackTrace(); 95 } catch (SQLException e) { 96 // TODO Auto-generated catch block 97 e.printStackTrace(); 98 } 99 return false; 100 } 101 102 public static void main(String[] args) { 103 try { 104 BaseDao.getCon(); 105 } catch (ClassNotFoundException e) { 106 // TODO Auto-generated catch block 107 e.printStackTrace(); 108 } catch (SQLException e) { 109 // TODO Auto-generated catch block 110 e.printStackTrace(); 111 } 112 } 113 }

6:写好工具类就可以进行写dao层(数据交互层),service层(业务逻辑层),先写数据交互层dao层,使用先创建接口再实现接口的方法

1 package com.bie.dao; 2 3 import java.util.List; 4 5 import com.bie.po.Book; 6 7 /** 8 * @author BieHongLi 9 * @version 创建时间:2017年2月27日 上午10:11:21 10 * 11 */ 12 public interface BookDao { 13 14 /*** 15 * 图书的查询的方法 16 * @param sql 17 * @param arr 18 * @return 19 */ 20 public List select(String sql,Object[] arr); 21 22 /*** 23 * 按照图书编号进行查询 24 * @param id 25 * @return 26 */ 27 public Book getBook(Integer id); 28 } 1 package com.bie.dao.impl; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 import com.bie.dao.BookDao; 11 import com.bie.po.Book; 12 import com.bie.utils.BaseDao; 13 14 /** 15 * @author BieHongLi 16 * @version 创建时间:2017年2月27日 上午10:11:34 17 * 18 */ 19 public class BookDaoImpl implements BookDao{ 20 21 @Override 22 public List select(String sql, Object[] arr) { 23 Connection con=null; 24 PreparedStatement ps=null; 25 ResultSet rs=null; 26 try { 27 con=BaseDao.getCon();//第一步连接数据库 28 ps=con.prepareStatement(sql);//第二步:预编译 29 if(arr!=null){ 30 for(int i=0;i 38 39 40 41 42 43 44 45 46 47

9:当图书显示出来之后就可以根据图书编号查看图书详情了,接着写dobook.jsp页面和detail.jsp页面,这个显示图书的详细的信息的页面

1 2 3 4 6 7 8 9 10 处理图书详细信息的页面 11 12 13 24 25 1 2 4 5 6 7 8 图书详细信息的页面 9 10 11 14 15 16 我的购物车 17 18 19 20 图书编号 21 图书名称 22 图书价格 23 图书作者 24 图书封皮 25 图书出版社 26 27 28 29 30 31 32 33 34 35 36 37 添加到购物车 38 图书列表 39 40 41 42 43 44

10:写好上面的detail.jsp然后就可以在detail.jsp页面点击添加到购物车,下面实现购物车的功能,也是这个实现购物车的核心部分,参考的话是重点看的内容,当然在写购物车之前还需要创建一个实体类CartItem.java,用于存放图书的信息和购买的数量

1 package com.bie.po; 2 3 /** 4 * @author BieHongLi 5 * @version 创建时间:2017年2月27日 上午10:40:53 6 * 购物项 7 */ 8 public class CartItem { 9 10 private Book book;// 图书对象的成员变量 11 private Integer number;// 购买的数量; 12 13 public Book getBook() { 14 return book; 15 } 16 17 public void setBook(Book book) { 18 this.book = book; 19 } 20 21 public Integer getNumber() { 22 return number; 23 } 24 25 public void setNumber(Integer number) { 26 this.number = number; 27 } 28 29 } 1 2 3 4 5 7 8 9 10 11 添加到购物车 12 13 14 52 53

11:写完上面的就可以查看我的购物车了,在book.jsp页面和detail.jsp页面都有可以点击查看我的购物车的连接,然后就可以查看我的购物车,完成购物车功能。

1 2 3 5 6 7 8 9 我的购物车的页面 10 11 12 13 14 书本编号 15 书本名称 16 书本单价 17 书本数量 18 书本小计 19 20 31 32 33 34 35 36 37 38 39 40 41 价格总计 42 43 44 45 46 图书列表 47 48 49

效果如下所示:

虽然简陋,没有完全实现完,还待改善,继续加油!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3