news 2026/7/15 0:41:55

IDEA(2020版)sevlet+session实现购物车功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IDEA(2020版)sevlet+session实现购物车功能

查看全文:https://www.longkui.site/program/java/idea2020sevletsession3/7204/


【任务目标】

通过所学Session知识以及购物车的访问流程,以购买蛋糕为例,模拟实现购物车功能。

1.创建实体类
先创建一个文件夹,名称为cn.itcast.session.entity


然后右击 entity文件夹,选择New—>Java Class,名字为Cake


代码参考如下:

package cn.itcast.session.entity;public class Cake{private static final long serialVersionUID=1L;private Stringid;private String name;publicCake(){}public Cake(String id, String name){this.id=id;this.name=name;}public StringgetId(){returnid;}public void setId(Stringid){this.id=id;}public StringgetName(){returnname;}public void setName(String name){this.name=name;}}

然后再在entity文件下创建一个数据库模拟类,CakeDB,代码参考如下:

package cn.itcast.session.entity;importjava.util.Collection;importjava.util.LinkedHashMap;importjava.util.Map;public class CakeDB{private static Map<String, Cake>cake=new LinkedHashMap<String, Cake>();static{cake.put("1", new Cake("1","A类蛋糕"));cake.put("2", new Cake("2","B类蛋糕"));cake.put("3", new Cake("3","C类蛋糕"));cake.put("4", new Cake("4","D类蛋糕"));cake.put("5", new Cake("5","E类蛋糕"));}// 获得所有的蛋糕 public static Collection<Cake>getAll(){returncake.values();}// 根据指定的id获蛋糕 public static Cake getCake(Stringid){returncake.get(id);}}

创建完后如下:


2.创建Servlet类
首先创建第一个Servlet类,用于展示所有可购买蛋糕的列表,通过点击 ”点击购买“按钮,便可以将指定蛋糕添加到购物车中。

先新建一个文件夹,右击session文件夹,选择New—>package

名称为 servlet


然后右击 servlet,选择New—>Create New Servlet,名字为ListCakeServlet


代码参考如下:

package cn.itcast.session.servlet;importcn.itcast.session.entity.Cake;importcn.itcast.session.entity.CakeDB;importjava.io.*;importjava.util.Collection;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;@WebServlet(name="ListCakeServlet",urlPatterns="/ListCakeServlet")public class ListCakeServlet extends HttpServlet{private static final long serialVersionUID=1L;public void doGet(HttpServletRequest req, 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>");}}}

再创建一个servlet,名字为PurchaseServlet

package cn.itcast.session.servlet;importcn.itcast.session.entity.Cake;importcn.itcast.session.entity.CakeDB;importjava.io.IOException;importjava.util.*;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;@WebServlet(name="PurchaseServlet",urlPatterns="/PurchaseServlet")public class PurchaseServlet extends HttpServlet{private static final long serialVersionUID=1L;public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{// 获得用户购买的商品 Stringid=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);}}

最后创建一个Servlet,名字为CartServlet

package cn.itcast.session.servlet;importcn.itcast.session.entity.Cake;importjava.io.*;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;@WebServlet(name="CartServlet",urlPatterns="/CartServlet")public class CartServlet extends HttpServlet{public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{resp.setContentType("text/html;charset=utf-8");PrintWriter out=resp.getWriter();// 变量cart引用用户的购物车 List<Cake>cart=null;// 变量pruFlag标记用户是否买过商品 boolean purFlag=true;// 获得用户的session HttpSession session=req.getSession(false);// 如果session为null,purFlag置为falseif(session==null){purFlag=false;}else{// 获得用户购物车 cart=(List)session.getAttribute("cart");// 如果用的购物车为null,purFlag置为falseif(cart==null){purFlag=false;}}/* * 如果purFlag为false,表明用户没有购买蛋糕 重定向到ListServlet页面 */if(!purFlag){out.write("对不起!您还没有购买任何商品!<br>");}else{// 否则显示用户购买蛋糕的信息 out.write("您购买的蛋糕有:<br>");double price=0;for(Cake cake:cart){out.write(cake.getName()+"<br>");}}}}

创建完后如下:


3.测试效果
先访问蛋糕列表

http://localhost:8080/Servlet01_war_exploded/ListCakeServlet


后续查看全文:https://www.longkui.site/program/java/idea2020sevletsession3/7204/

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 4:50:56

创客匠人实践录:用AI赋能教育,让老师回归“真正的教学”

在数字化浪潮中&#xff0c;教育行业正经历一场深刻的效率革命。许多老师却感到困惑&#xff1a;每天忙于回复消息、重复答疑、整理资料&#xff0c;真正用于备课、研发、与学生深度交流的时间反而越来越少。技术到底是在帮助我们&#xff0c;还是在消耗我们&#xff1f;创客匠…

作者头像 李华
网站建设 2026/7/12 2:25:45

程序员必备:AI大模型(LLM)完整学习路线图+640份行业报告合集_2026最全面的AI大模型学习路线

本文为AI大模型学习者提供从基础知识到实践项目的完整学习路线&#xff0c;涵盖线性代数、Python编程、深度学习及预训练模型研究等内容。针对LLM学习资源稀缺问题&#xff0c;作者分享了系统梳理的L1-L7学习路线图和640套AI大模型报告合集&#xff0c;帮助小白降低自学门槛&am…

作者头像 李华
网站建设 2026/7/12 2:31:25

从零掌握多模态知识编辑:MMQAKE基准与Hybrid-DMKG框架实战指南

本文介绍了MMQAKE&#xff0c;首个针对多模态多跳问答的知识编辑基准&#xff0c;评估中间推理步骤质量和视觉改写鲁棒性。研究提出Hybrid-DMKG混合推理框架&#xff0c;基于动态多模态知识图谱实现精准多跳推理&#xff0c;结合符号关系遍历和检索增强生成两条路径&#xff0c…

作者头像 李华
网站建设 2026/7/14 23:05:31

【珍藏版】大模型系统学习指南:零基础到实战,助你快速成为AI工程师_2025最新AI大模型学习路线

文章提供了系统学习大模型的完整路线图&#xff0c;从数学基础、编程能力开始&#xff0c;逐步过渡到机器学习、深度学习&#xff0c;最终深入大模型技术。内容包括理论基础、实践项目、学习资源和社区参与。文章强调系统学习的重要性&#xff0c;避免零散学习&#xff0c;并提…

作者头像 李华
网站建设 2026/7/6 11:38:15

AI时代新纪元:2026年Geo优化的三大核心破局点

随着AI搜索&#xff08;如Google AI Overviews&#xff09;的普及&#xff0c;传统搜索引擎的流量正在被AI聊天机器人和虚拟代理所分流。Gartner预测&#xff0c;到2026年&#xff0c;传统搜索量将下降25% [1]。面对这一颠覆性变革&#xff0c;Geo优化&#xff08;Generative E…

作者头像 李华
网站建设 2026/7/15 0:10:35

混合精度训练实战:AMP在PyTorch中的应用

混合精度训练实战&#xff1a;AMP在PyTorch中的应用 在当今深度学习模型动辄上百亿参数的背景下&#xff0c;训练效率和显存占用已成为制约研发迭代速度的关键瓶颈。尤其是在使用Transformer架构进行大语言模型或视觉任务时&#xff0c;FP32单精度训练不仅对GPU显存提出极高要求…

作者头像 李华