1、需求分析
相信大家都有网上购物的经历,当用户选定某件商品时,只要选择“购买”,便可将商品添加到购物车中,购物车中包含了用户所有要购买的商品。接下来,以购买图书为例,使用Session模拟实现购物车功能。 在使用Session实现购物车功能时,整个程序定义了五个类:
Book.java:
该类用于封装图书的信息,其中定义了id和name属性,分别用来表示书的编号和名称。
BookDB.java:
该类用于模拟保存所有图书的数据库。该类在实现时,通过Map集合存储了5个不同的Book对象,提供了获取指定图书和所有图书的相关方法
ListBookServlet.java
该类用于显示所有可购买图书的列表,通过点击“购买”链接,便可将指定的图书添加到购物车中
PurchaseServlet.java
该类有两个功能,一是将用户购买的图书信息保存到Session对象中,二是在用户购买图书结束后,将页面重定向到用户已经购买的图书列表
CartServlet.java
该类用于展示用户已经购买的图书列表。该类在实现时,需要通过getSession()获取到所有的Session对象,然后判断用户是否已经购买图书,如果已经购买过,则显示购买的图书列表,否则在页面显示友好的提示“对不起!您还没有购买任何商品”
作业
以上的类就是原案例
对教材购物车案例(p151-p157)进行修改 ,在原案例基础上,增加要求:
1、当购买某本书后,再次访问图书列表,不能显示已经购买了的图书
2、购物车中的图书,增加取消订单功能,点击“取消订单”后,在购物车中删除已经购买的图书
解决方案:
1、第一个问题我们只需要在BookDB.java类中添加一个deleteBook(String id)方法,然后再PurchaseServlet.java类中获取到ListBookServlet.java中传过来的id进行删除
2、第二个问题也简单创建一个新的类DeleteCarServlet里面主要处理删除list(就是购物车里的图书)集合的图书
改进
这个案例要改进的地方就是,你删除购物车里的东西后,应该把他反回展示页面,本人有点懒没有写希望各位大佬可以再评论区给出解决方法,谢谢大佬们了,接来上个效果图看看
2、效果图
展示的图书有
点击前两本图书到购物车中
再回去看展示页面已没有那两本了
再购物车删除第一本书
123!上代码
3、java代码
Book
package com.gued.w4.anli52;
public class Book {
private String id;
private String name;
public Book() {
}
public Book(String id, String name) {
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;
}
}
BookDB
package com.gued.w4.anli52;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
public class BookDB {
private static Map<String,Book>books= new LinkedHashMap<String,Book>();
static {
books.put("1",new Book("1","javaweb开发"));
books.put("2",new Book("2","jdbc开发"));
books.put("3",new Book("3","java基础"));
books.put("4",new Book("4","struts开发"));
books.put("5",new Book("5","spring开发"));
}
//获取所有图书
public static Collection<Book> getAll(){
return books.values();
}
//指定获得的id获得图书
public static Book getBook(String id){
return books.get(id);
}
//删除图书
public static void deleteBook(String id){
books.remove(id);
}
}
ListBookServlet
package com.gued.w4.anli52;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
@WebServlet(urlPatterns = "/book")
public class ListBookServlet extends HttpServlet {
private static final long serialVersionUID=1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
Collection<Book> books = BookDB.getAll();
writer.write("本网站提供的图书有:</br>");
for (Book book:books){
String url="/test01/PurchaseServlet?id="+book.getId();
writer.write(book.getName()+"<a href= '"+url +"'>点击购买</a></br>");
}
}
}
PurchaseServlet
package com.gued.w4.anli52;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@WebServlet(urlPatterns = "/PurchaseServlet")
public class PurchaseServlet extends HttpServlet {
private static final long serialVersionUID=1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取用户买的商品
String id = req.getParameter("id");
if (id == null) {
//没买就重定向回去
String url="/test01/book";
resp.sendRedirect(url);
return;
}
Book book = BookDB.getBook(id);
//创建或者获取用户的Session对象
HttpSession session = req.getSession();
//从Session对象获取用户购物车
List<Book> cart =(List) session.getAttribute("cart");
if (cart==null){
//首次购买,为用户创建一个购物车(list集合模拟购物车)
cart = new ArrayList<Book>();
//将购物车存入Session对象
session.setAttribute("cart",cart);
}
//将商品放入购物车
cart.add(book);
//创建Cookie存放Session的标记号
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60*30);
cookie.setPath("/test01");
resp.addCookie(cookie);
//重定向到购物车页面
resp.sendRedirect("/test01/CarServlet");
//删除读书列表ListBookServlet类的书
BookDB.deleteBook(id);
}
}
CartServlet
package com.gued.w4.anli52;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
@WebServlet(urlPatterns = "/CarServlet")
public class CarServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
//变量cart引用用户的购物车
List<Book> cart=null;
//变量pruFlag标记用户是否买过商品
boolean purFlag =true;
HttpSession session = req.getSession();
//如果session为null,purFlag置为false
if (session==null){
purFlag=false;
}else {
//获取用户购物车
cart =(List) session.getAttribute("cart");
//如果用的购物车为null,purFlag置为false
if(cart==null){
purFlag=false;
}
}
//如果purFlag为false,表明用户没有购买图书 重定向到ListServlet页面
if (!purFlag){
writer.write("对不起!您还没有购买任何商品!</br>");
}else {
//否则显示用户购买图书信息
writer.write("您购买的图书有:</br>");
double price=0;
int i=0;
for (Book book:cart){
String url="/test01/DeleteCarServlet?id="+i;
i++;
writer.write(book.getName()+"<a href='"+url+"'>点击删除</a></br>");
}
}
}
}
DeleteCarServlet
package com.gued.w4.anli52;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;
@WebServlet(urlPatterns = "/DeleteCarServlet")
public class DeleteCarServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id");
System.out.println(id);
HttpSession session = req.getSession();
List<Book>cart= (List<Book>) session.getAttribute("cart");
cart.remove(Integer.parseInt(id));
resp.sendRedirect("/test01/CarServlet");
}
}