用session实现购物车

用session实现购物车

增加要求:

  1. 当购买某本书后,再次访问图书列表,不能显示已经购买了的图书
  2. 购物车中的图书,增加取消订单功能,点击“取消订单”后,在购物车中删除已经购买的图书

Book 图书对象

package com.gd.servlet.buy;

import java.io.Serializable;

/**
 * @author LFXIANG
 * description TODO
 * @title Book
 * date 2024/5/4 13:41
 */
public class Book implements Serializable {
    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.gd.servlet.buy;

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

/**
 * @author LFXIANG
 * description TODO
 * @title BookDB
 * date 2024/5/4 13:41
 */
public class BookDB {
    private static Map<String,Book> books=new LinkedHashMap<>();
    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();
    }
    public static Book getBook(String id){
        return books.get(id);
    }
}

CartServlet 购物车展示

package com.gd.servlet.buy;

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;

/**
 * @author LFXIANG
 * description TODO
 * @title CartServlet
 * date 2024/5/4 13:42
 */
@WebServlet("/CartServlet")
public class CartServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        List<String> cart=null;
        boolean purFlag=true;
//        取与当前请求关联的HttpSession对象,如果存在则返回该对象,否则返回null。
        HttpSession session = req.getSession(false);
        if (session==null){
            purFlag=false;
        }else {
            cart = (List)session.getAttribute("cart");
            if (cart==null){
                purFlag=false;
            }
        }
        if (purFlag){
            writer.write("购买的书籍<hr>");
            for (int i=0;i<cart.size();i++){
                String url="/web1/DeleteBookServlet?id="+i;
                writer.write(cart.get(i)+"<a href='"+url+"'>取消订单</a><br>");
            }
        }else {
            writer.write("您没有购买任何书籍,1秒后跳转");
            resp.setHeader("Refresh","1;url=/web1/ListBookServlet");
        }
        if (cart.size()==0){
            writer.write("您没有购买任何书籍,1秒后跳转");
            resp.setHeader("Refresh","1;url=/web1/ListBookServlet");
        }
    }
}

DeleteBookServlet 图书删除

package com.gd.servlet.buy;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

/**
 * @author LFXIANG
 * description TODO
 * @title DeleteBookServlet
 * date 2024/5/4 15:13
 */
@WebServlet("/DeleteBookServlet")
public class DeleteBookServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String id = req.getParameter("id");
        System.out.println("id = " + id);
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        if (id!=null){
            HttpSession session = req.getSession(false);
            List<Book> cart =(List) session.getAttribute("cart");
            int i = Integer.parseInt(id);
            cart.remove(i);
            writer.write("删除成功,1秒后跳转");
            resp.setHeader("Refresh","0.5;url=/web1/CartServlet");
        }else {
            writer.write("删除失败,1秒后跳转");
            resp.setHeader("Refresh","0.5;url=/web1/CartServlet");
        }
    }
}

ListBookServlet 图书展示

package com.gd.servlet.buy;

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.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * @author LFXIANG
 * description TODO
 * @title ListBookServlet
 * date 2024/5/4 13:42
 */
@WebServlet("/ListBookServlet")
public class ListBookServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        Collection<Book> books = BookDB.getAll();
        PrintWriter writer = resp.getWriter();
        writer.write("本站提供的图书有:<hr>");
        HttpSession session = req.getSession();
        List<String> cart = (List)session.getAttribute("cart");
//       (在页面点击返回按钮重新刷新页面)在服务器端,你可以在响应中设置HTTP头,强制浏览器不使用缓存,每次访问都必须从服务器获取最新内容。
        resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0");
        resp.setHeader("Pragma", "no-cache");
        resp.setDateHeader("Expires", 0);
        if (cart==null){
            cart=new ArrayList<>();
            session.setAttribute("cart",cart);
        }
        for(Book book:books){
            if (cart.contains(book.getName())) continue;
            String url="/web1/PurchaseServlet?id="+book.getId();
            writer.write(book.getName()+"<a href='"+url+"'>点击购买</a><br>");
        }
        if (cart.size()==books.size()){
            writer.write("书库已空");
        }
    }
}

PurchaseServlet 添加图书

package com.gd.servlet.buy;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

/**
 * @author LFXIANG
 * description TODO
 * @title PurchaseServlet
 * date 2024/5/4 13:42
 */
@WebServlet("/PurchaseServlet")
public class PurchaseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String id = req.getParameter("id");
        System.out.println("id = " + id);
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        if (id!=null){
            Book book = BookDB.getBook(id);
            HttpSession session = req.getSession();
            List<String> cart = (List) session.getAttribute("cart");
            if (cart==null){
                cart = new ArrayList<>();
                session.setAttribute("cart",cart);
            }
                cart.add(book.getName());
//                将JSESSIONID存入Cookie 重新访问页面 可以保持相同会话
                Cookie cookie = new Cookie("JSESSIONID", session.getId());
                cookie.setMaxAge(60*30);
                cookie.setPath("web1");
                resp.addCookie(cookie);
                resp.sendRedirect("/web1/CartServlet");
        }else {
            writer.write("该书无库存,1秒后跳转");
            resp.setHeader("Refresh","1;url=/web1/ListBookServlet");
        }
    }
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值