**实现购物车案例
1.创建Book封装图书信息:Book book=new Book();
2.创建BookDB,模拟数据库,在里面保存图书
3.提供图书的购买页面:ListBookServlet
4.添加购物车:PurcharseServlet
5.回显购物车图书信息:CartServlet
如果浏览器禁用了cookie,咱们的购物车功能就不能实现了,因为session是基于cookie实现的。**
1、首先需要一个Book类 封装书籍
public class Book {
String id;
String name;
public Book() {
}
public Book(String id, String name) {
super();
this.id = id;
this.name = name;
}
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;
}
}
2、模拟数据库BookDB
补充:Map是一个接口,即Interface Map<K-key,V-value>,其中key必须是唯一的且不能重复,当key相同时,后面的value值会覆盖之前的value值。
2.1 Map定义的一些通用的方法:
>>>1. 得到指定key的值:map.get(Object key);
>>>2. 判断此key是否含有value:isEmpty();
>>>3. 返回key中包含的键的视图:map.keySet();
>>>4. 将指定的key和值放进去:map.put(K key,V value);
Map接口有很多实现类:TreeMap,Hashtable,SortedMap,HashMap
2.2 HashMap是基于哈希表的Map接口实现
1它是通过数组和指针结合实现的一个“链表散列”的数据结构,数组中的每一项又是一个链表。
2当再底层将key-value当成一个整体进行处理,这个整体就是一个entry对象。
public class BookDB {
private static Map<String, Book> map = new LinkedHashMap<String, Book>();
//往里面添加待售的书籍
static {
map.put("1", new Book("1", "c语言程序设计"));
map.put("2", new Book("2", "数据结构"));
map.put("3", new Book("3", "高等数学"));
map.put("4", new Book("4", "线性代数"));
map.put("5", new Book("5", "大数据"));
}
//得到所有图书
public static Collection<Book> getAll() {
return map.values();
}
//利用map的key,也就是图书的id得到某本书
public static Book getBook(String id) {
return map.get(id);
}
}
3、后台搭建好了,则需要一个购买界面ListBookServlet
public class ListBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//处理相应的中文乱码
response.setContentType("text/html;charset=utf-8");
//1得到所有书籍信息
Collection<Book> books = BookDB.getAll();
//2回显到页面
PrintWriter out = response.getWriter();
out.print("以下是本网站所售的所有书籍:" + "<br/><br/>");
//3遍历集合,把图书回显到页面
for (Book b : books) {
String name = b.getName();
String id = b.getId();
//4提供一个购买书籍的链接
String url = "<a href='/chapter05/purcharse?id=" + id + "'>点击购买</a>";
out.print("图书名称:" + name + " " + url + "<br/><br/>");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
4、实现添加到购物车的功能
public class PurcharseServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//处理相应的中文乱码问题
response.setContentType("text/html;charset=utf-8");
//2获取图书信息
String id = request.getParameter("id");
//3判断id是否存在
if (id == null) {
response.sendRedirect("/chapter05/list");
return;
}
//3当图书已经购买时
Book book = BookDB.getBook(id);
//4把图书添加到购物车
HttpSession session = request.getSession();
List<Book> list = (List<Book>) session.getAttribute("cart");
//5判断购物车是否存在,是不是首次购买
if (list == null) {
list = new ArrayList<Book>();
session.setAttribute("cart", list);
}
//6把图书添加到购物车
list.add(book);
//7请求跳转到CartServlet
//session基于自己创建的cookie完成效果;再浏览器关闭后,cookie对象还在,就能找到session
Cookie cookie = new Cookie("JESSIONID", session.getId());
cookie.setMaxAge(60 * 60 * 24);
cookie.setPath("/chapter05");
response.addCookie(cookie);
//8跳转到cartServlet里面
response.sendRedirect("/chapter05/cart");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
5、回显购物车功能
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//处理相应中文的乱码
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//1得到购物车
List<Book> cart = null;
//2得到用户自己的session
HttpSession session = request.getSession(false);
//3自己定义一个flag,判断购物车里面是否有图书
boolean cartFlag = true;
if (session == null) {
cartFlag = false;
} else {
cart = (List<Book>) session.getAttribute("cart");
if (cart == null) {
cartFlag = false;
}
}
//4购物车里面有商品了
if (!cartFlag) {
out.print("抱歉,您的购物车没有图书,请购买:");
} else {
//5购物车遍历
out.print("您所购买的书籍如下:" + "<br/>");
for (Book b : cart) {
out.print(b.getId() + " " + b.getName() + "<br/>");
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}