JavaWeb实现简单购物车案例
我们需要一个用来封装商品信息的商品类
package Semester_3.ShoppingCart;/*
* 定义用来被购买的蛋糕类*/
public class cookie {String name,ID;public cookie(){}public cookie(String ID,String name){this.name = name;this.ID = ID;}public void setName(String name){this.name = name;}public String getName(){return this.name;}public void setID(String ID){this.ID = ID;}public String getID(){return this.ID;}
}
一个用来模拟数据库的数据库模拟类
package Semester_3.ShoppingCart;import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
/*
* 创建一个模拟数据库的类*/
public class CookDB {private static Map<String,cookie> cooks = new LinkedHashMap<>();//一个只能在内部调用的数组,用来存放蛋糕static{//静态代码块,当对象被创建的时候将自动运行,作用是添加数据cooks.put("1",new cookie("1","A类蛋糕"));cooks.put("2",new cookie("2","B类蛋糕"));cooks.put("3",new cookie("3","C类蛋糕"));cooks.put("4",new cookie("4","D类蛋糕"));cooks.put("5",new cookie("5","E类蛋糕"));}//返回所有蛋糕的方法public static Collection<cookie> getAll(){return cooks.values();}//返回按照ID定位蛋糕的方法public static cookie getID(String ID){return cooks.get(ID);}
}
一个用来获取和转发Cookie对象的Servlet类
package Semester_3.ShoppingCart;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@WebServlet(name = "PurchaseServlet", value = "/PurchaseServlet")
public class PurchaseServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 首先获取有没有属性名为id的属性,并获取它的值String ID = request.getParameter("id");
// 如果id值是空的,表示没有任何的数据传入,将重定向到展示数据的界面重新进行选择,此为边界条件if(ID==null){String url = "ListCakeServlet";
// 在这里完成重定向的动作response.sendRedirect(url);return;}
// 获取数据库模拟类中的ID对应的蛋糕名称cookie c =CookDB.getID(ID);
// 创建Session对象用来传递会话消息HttpSession hs =request.getSession();
// 获取之前的会话消息,如果有就直接添加,如果没有就创建一个对象再进行添加动作List<cookie> ls = (List)hs.getAttribute("cart");if(ls == null){ls = new ArrayList<cookie>();hs.setAttribute("cart",ls);}ls.add(c);
// Cookie对象的传参,将来在浏览器端可以看到这个会话头的对应的属性值Cookie cookie = new Cookie("JSESSIONID",hs.getId());
// 这个会话可以存储三十分钟cookie.setMaxAge(60 * 30);
// 将这个请求路径设置为任何目录下都可以被访问cookie.setPath("/");
// 开始储存Cookie对象response.addCookie(cookie);
// 重定向到展示购物车界面,这个类仅完成会话参数的传递String url = "CartServlet";response.sendRedirect(url);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
一个用来展示商品列表的类
package Semester_3.ShoppingCart;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.util.Collection;/*
* 显示所有可供购买的蛋糕列表,并通过点击购买添加到购物车中*/
@WebServlet(urlPatterns = "/ListCakeServlet")
public class ListCakeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//用来设置返回头的标识,表示将要返回HTML有关的语句,并在页面中解析成为HTML代码格式并以UTF-8的编码格式进行加载resp.setHeader("content-type","text/html;charset=utf-8");
// 创建数据库模拟类的对象,获取数据库中所有蛋糕的数据并返回为一个数组格式Collection<cookie> all = CookDB.getAll();
// 将数组中的格式遍历输出到HTML页面中进行展示resp.getWriter().write("本站提供的蛋糕有:"+"<br>");for(cookie c :all){
// GET请求方式,直接在重定向的时候在URL地址栏的位置携带数据String url = "PurchaseServlet?id=" + c.getID();//用来设置返回头的标识,表示将要返回HTML有关的语句,并在页面中解析成为HTML代码格式并以UTF-8的编码格式进行加载resp.setHeader("content-type","text/html;charset=utf-8");
// 写入一个超链接标签,地址为Cookie数据转发类中,并携带有关数据resp.getWriter().write(c.getName()+"<a href='"+url+"'>点击购买</a><br>");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req,resp);}// public static void main(String[] args) {
// Collection<cookie> all = CookDB.getAll();
// for(cookie c :all){
// System.out.println(c.getName()+":"+c.getID());
// }
// }
}
最后是一个用来展示已经被购买的商品的购物车类
package Semester_3.ShoppingCart;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;@WebServlet(name = "CartServlet", value = "/CartServlet")
public class CartServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");//获取写入响应信息的输入流PrintWriter writer = response.getWriter();
// 获取一个空的蛋糕对象List<cookie> ls =null;
// 这是一个标记,作用是判断是否有蛋糕被选择boolean pruFlag = true;
// 参数的意义,当参数为true时,如果获取不到对象的Session对象则自动创建一个;false参数则表示不自动创建HttpSession hs =request.getSession(false);
// 首先进入一个判断,当不存在Session对象时,则表示用户没有会话对象传入,将标记修改if(hs==null){pruFlag = false;}else {
// 如果有会话对象,但是会话中没有cart相应的信息,则表示用户没有选择蛋糕,也修改标记将标记的值改变ls = (List)hs.getAttribute("cart");if(ls==null){pruFlag= false;}}
// 最后渲染选择的蛋糕列表阶段,当标记一直没有被修改,则表示用户确实传入了一个会话对象,并且选择了蛋糕,则对用户选择的蛋糕进行渲染if (pruFlag){writer.write("您购买的蛋糕有:<br>");double price = 0;for(cookie c : ls){writer.write(c.getName()+"<br>");}}writer.write("<a href='ListCakeServlet'>返回蛋糕列表页</a>");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
基本原理
类的介绍
Cookie类:对蛋糕信息的封装,以及对于蛋糕属性的设置和获取
具体实现:一个标准类,内部有带参数的构造方法,不带参数的构造方法,有成员变量,和针对每个成员变量的 get方法和set方法
CookDB:数据库模拟类,模拟了数据库中存储的商品信息
具体实现:类中包含一个私有的,静态的Map数组为本体,键对应ID编号,值对应不同的cookie也就是蛋糕 类的具体对象,内部用一个静态代码块封装了将所有蛋糕添加进数组的方法,所以每次重启项目的时候 都可以保证数组内部自动填充了相应的数据 内部有两个方法,一个按照ID获取对应的蛋糕类的方法,一个获取所有蛋糕的方法,一个 简单的模拟数据库存储数据的类就完成了
ListCakeServlet:一个展示所有蛋糕的展示页面,并且附带将选择的蛋糕的信息传递到其他类的功能
具体实现:首先获取所有的蛋糕列表,并使用for循环遍历,在遍历的时候,获取蛋糕的ID和蛋糕的名字 并写入一个超链接标签,当点击超链接的时候,将链接到会话类中并携带相应的蛋糕的信息
PurchaseServlet:会话类,将传递进来的信息封装进一个会话中传递给购物车类
具体实现:将蛋糕展示页面的信息获取到之后,首先会获取到传入的参数里有没有一个参数名为id的值,如果 有,则根据ID获取对应的蛋糕对象,用到的是模拟数据库类中的方法,将ID对应的蛋糕封装进一个数组中 进行传递,如果是一次接受数据,则创建一个数组,最后存储cookie对象并重定向到购物车类,这个类只做 传递参数的作用,并没有实际展示的效果
CartServlet:购物车类,展示用户选择的蛋糕
具体实现:将会话类中传递的信息在这个类中进行最终地展示,会话类中传递出了封装了所有用户选择的蛋糕的 数组对象,只需要遍历出这些蛋糕对象,并将获取每一个蛋糕的名字即可
具体流程
首先当数据库模拟类被加载进内存时,会自动执行静态代码中的内容完成商品的初始化。然后在商品展示页面 遍历数据库模拟类中的商品,当点击购买的时候,会携带着数据重定向到负责存储Cookie的类中, 判断是否有对应的cookie数据,如果没有就重定向到数据展示页面重新选择,如果有,就按照ID值获取 数据库模拟类中的商品实例对象存储进Cookie中,然后转发到商品展示类中。在商品展示类中获取对应的 Cookie值对应的商品对象,并将商品的信息获取并输出在网页中完成一个简易的购物车模拟类
JavaWeb实现简单购物车案例相关推荐
- vue简单购物车案例
效果图: html代码如下: <body> <div id="app"><div v-if="books.length">& ...
- 基于javaweb+JSP+Servlet简单购物车
基于javaweb+JSP+Servlet简单购物车 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 public ...
- php实现购物车 redis,redis 哈希数据类型简单操作(实现购物车案例)
这里不累赘如何安装redis和php redis扩展,主要熟悉调用redis哈希数据类型 如图 简单方法操作如下 1:hSet 2:hGet 4:hDel 5:hGetAll 4:hExists 5 ...
- Web全栈~17.购物车案例(JavaScript动态效果)
Web全栈~17.购物车案例(JavaScript动态效果) 上一期 前言 前三期已经对购物车的样式绘制完毕,那么这一期就用JavaScript来实现动态效果. 全选 思路 可以在input标签里,添 ...
- solr简单搜索案例
solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...
- Javaweb之简单例子(一)
Javaweb 之简单例子(一) 目录: 一.简述 ...
- JavaWeb之网上书城案例低保真
JavaWeb之网上书城案例低保真(本低保真目前适用于chrome) 首页页面: 注册页面: 登陆页面: 购物车页面: 付款页面: 成功页面: 失败页面:
- vue之购物车案例升级版、v-model之lazy、number、trim的使用、fetch和axios、计算属性、Mixins、虚拟dom与diff算法 key的作用及组件化开发
文章目录 1.购物车案例升级版(含价格统计.全选/反选.商品增加减少) 2.v-model之lazy.number.trim的使用 3.fetch和axios 3.1.通过jquery+ajax实现v ...
- Vue实战之商品购物车案例
学习Vue框架有一段时间了,所以找了个案例练练手,借此来巩固所学知识以及如何将其运用在实际生活场景,学以致用不就是这个意思嘛<_<.好了,废话不多说,切入正题. 该案例是利用Vue的计算属 ...
最新文章
- 【科技金融】互金欺诈黑话大集锦
- 1、CSS 定位 (Positioning)
- python基础教程:函数作用域
- java 乘法 位移_java 位移运算与乘法运算
- Kubernetes入门——Kubernetes日志采集与监控告警
- Win7/Win8.1升级Win10后屏幕一直闪烁怎么办?
- 【6】nagios从零学习使用 - centreon发送邮件报警
- mysql数据库连接失败,挑战大厂重燃激情!
- rational rose 逆向工程
- UVA 1599 Ideal Path
- 二维burgers方程_二维Burgers方程的RKDG有限元解法
- 为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?解决方法如下
- 10句编程箴言 每个程序员都应该知道
- day4(继承、修饰符、方法的重写、super关键词、继承中的构造方法、object类、对象转型)...
- SpringBoot Security 整合 thymeleaf 模板自定义登录页面,按需提示错误信息
- Cadence系列之SIPI仿真笔记:Cadence多种版本的安装、卸载重装(一)
- YYKit框架使用学习之整理
- Postgres-XL 9.5简易搭建
- 慢慢来,一切都来得及
- 11:Hive从0到1系列学习:函数之常用的内置函数