当前位置:首页 » 《随便一记》 » 正文

使用Session和cookie会话对象实现简单购物车功能(超详细)

25 人参与  2023年05月05日 14:25  分类 : 《随便一记》  评论

点击全文阅读


一、新建项目、实体类、servlet

1.新建Dynamic Web project,新建过程如下;
在这里插入图片描述
2.在src目录下新建两个包,一个命名为entity,一个命名为servlet,新建过程如下;
在这里插入图片描述
3.在entity目录下新建两个实体类,一个名为Cake,一个名为CakeDB,新建过程如下:在这里插入图片描述
4.在servlet目录下新建三个servlet,命名分别为ListCakeServlet、PurchaseServlet和CartServlet,新建过程如下:
在这里插入图片描述
所有东西建完后结果如图:
在这里插入图片描述

二:源代码

1.Cake实体类:

package entity;public class Cake {private String id;private String name;public Cake() {}public Cake(String id, String name) {this.id = id;this.name = name;}public void setId(String id) {this.id=id;}public String getId() {return id;}public void setName(String name) {this.name=name;}public String getName() {return name;}}

2.CakeDB实体类:

package entity;import java.util.Collection;import java.util.LinkedHashMap;import java.util.Map;public class CakeDB {private static Map<String, Cake> cake = new LinkedHashMap<String, Cake>();    static {//模拟数据库中的记录        cake.put("1001", new Cake("1001", "A类:巧克力蛋糕"));        cake.put("1002", new Cake("1002", "B类:水果沙拉蛋糕"));        cake.put("1003", new Cake("1003", "C类:慕斯蛋糕"));        cake.put("1004", new Cake("1004", "D类:奶油蛋糕"));        cake.put("1005", new Cake("1005", "E类:干果蛋糕"));    }    // 获得所有的蛋糕    public static Collection<Cake> getAll() {        return cake.values();    }    // 根据指定的id获蛋糕    public static Cake getCake(String id) {        return cake.get(id);    }}

3.ListCakeServlet:

package servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.Collection;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 entity.Cake;import entity.CakeDB;@WebServlet("/ListCakeServlet")public class ListCakeServlet extends HttpServlet {private static final long serialVersionUID = 1L;    public ListCakeServlet() {        super();    }protected void doGet(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");        PrintWriter out = resp.getWriter();        Collection<Cake> cakes = CakeDB.getAll();        out.write("本站提供的蛋糕有:<br>");        for (Cake cake : cakes) {            String url = "PurchaseServlet?id=" + cake.getId();            out.write(cake.getName() + "<a href='" + url                    + "'>点击购买</a><br>");        }}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

4.PurchaseServlet:

package servlet;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import entity.Cake;import entity.CakeDB;@WebServlet("/PurchaseServlet")public class PurchaseServlet extends HttpServlet {private static final long serialVersionUID = 1L;           public PurchaseServlet() {        super();    }protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获得用户购买的商品        String id = req.getParameter("id");        if (id == null) {            // 如果id为null,重定向到ListBookServlet页面            String url = "ListBookServlet";            resp.sendRedirect(url);            return;        }        Cake book = CakeDB.getCake(id);        // 创建或者获得用户的Session对象        HttpSession session = req.getSession();        // 从Session对象中获得用户的购物车        List<Cake> cart = (List) session.getAttribute("cart");        if (cart == null) {            // 首次购买,为用户创建一个购物车(List集合模拟购物车)            cart = new ArrayList<Cake>();            // 将购物城存入Session对象            session.setAttribute("cart", cart);        }        // 将商品放入购物车        cart.add(book);        // 创建Cookie存放Session的标识号        Cookie cookie = new Cookie("JSESSIONID", session.getId());        cookie.setMaxAge(60 * 30);        cookie.setPath("/Servlet");        resp.addCookie(cookie);        // 重定向到购物车页面        String url = "CartServlet";        resp.sendRedirect(url);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

5.CartServlet:

package servlet;import entity.Cake;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("/CartServlet")public class CartServlet extends HttpServlet {    protected void  doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{        resp.setContentType("text/html;charset=utf-8");        PrintWriter out = resp.getWriter();        List<Cake> cart = null;        boolean purFlag = true;        HttpSession session = req.getSession(false);        if (session == null)        {            purFlag =false;        }        else {            cart = (List) session.getAttribute("cart");            if (cart == null){                purFlag=false;            }        }        if(!purFlag){            out.write("抱歉,您还没有购买任何商品!<br>");        }        else {            out.write("您购买的蛋糕有:<br>");            double price = 0;            for (Cake cake:cart){                out.write(cake.getName() +"<br>");            }        }    }}

三、运行

1.在ListCakeServlet文件下运行,点击鼠标右键,选择run as,具体如图:
在这里插入图片描述
2.运行结果如图:
在这里插入图片描述
点击购买之后跳转CartServlet页面,比如我点了巧克力蛋糕后:

在这里插入图片描述
以上就是使用Session和cookie会话对象实现简单购物车功能。希望对你有帮助哦~


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/60918.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1