【JAVAWEB学习笔记】网上商城实战3:购物模块和订单模块
今日任务
- 完成购物模块的功能
- 完成订单模块的功能
1.1 购物模块:
1.1.1 功能演示:
商品详情:
购物车模块:
1.1.2 代码实现:
1.在商品详情的页面中点击【加入购物车】链及.
2.提交到Servlet中:
* 提交购买的商品的数量.
* 提交购买的商品的ID.
3.将购物的信息存入到session中.
* 将购物车的信息存入到session中.
* 购物项对象的封装(购物车中的每个购买商品的信息)
* 商品的对象:
* 数量
* 小计
* 购物车对象的封装(购买所有商品的信息)
* 购物项的集合
* 总计
4.在页面中将购物车的信息获得到.
* 在页面中显示出来.
【购物项的实体的封装:CartItem】
public class CartItem { private Product product;// 购买的商品的信息 private int count; // 购买的数量 private double subtotal; // 购买商品的小计 public Product getProduct() { return product; } public void setProduct(Product product) { this.product = product; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public double getSubtotal() { return count * product.getShop_price(); } /*public void setSubtotal(double subtotal) { this.subtotal = subtotal; }*/
}
【购物车的实体:Cart】
public class Cart { // 定义一个购物项的集合的属性:集合采用Map集合,因为移除购物项的时候方便.使用商品的id作为Map的key // 使用购物项作为Map的value. private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>(); // 定义购物车中的总计: private double total; public Map<String, CartItem> getMap() { return map; } public double getTotal() { return total; } // 方法:将购物项添加到购物车 public void addCart(CartItem cartItem){ // 判断购物车中是否已经存在该购物项. String id = cartItem.getProduct().getPid(); if(map.containsKey(id)){ // 如果已经存在:在原来的数量的基础上+新买的数量. 总计发生变化. // 获得购物车中的原来购物项的信息 CartItem _cartItem = map.get(id); _cartItem.setCount(_cartItem.getCount()+cartItem.getCount()); }else{ // 如果不存在:在集合中添加一个新的购物项. 总计发生变化. map.put(id, cartItem); } total += cartItem.getSubtotal(); } // 方法:从购物车中移除购物项 public void removeCart(String id){ // 从map中移除选中的元素. // CartItem cartItem = map.get(id); CartItem cartItem = map.remove(id); // 将总计 - 移除购物项的小计 total -= cartItem.getSubtotal(); } // 方法:清空购物车 public void clearCart(){ // // 将map集合清空. map.clear(); // 将总结设置为0. total = 0; } }
【在购物详情页面点击加入购物车的链接】
public String addCart(HttpServletRequest req,HttpServletResponse resp){ // 接收参数: String pid = req.getParameter("pid"); int count = Integer.parseInt(req.getParameter("count")); try { // 封装购物项: CartItem cartItem = new CartItem(); // 商品对象:通过商品ID查询商品. ProductService productService = (ProductService) BeanFactory.getBean("productService"); Product product = productService.findById(pid); cartItem.setProduct(product); cartItem.setCount(count); // 调用购物车中的添加到购物车的方法: // Cart cart = new Cart(); Cart cart = getCart(req); cart.addCart(cartItem); resp.sendRedirect(req.getContextPath()+"/jsp/cart.jsp"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); } return null; }
【在购物车页面点击清空购物车】
public String clearCart(HttpServletRequest req,HttpServletResponse resp){ // 获得购物车对象. Cart cart = getCart(req); // 调用购物车中的方法: cart.clearCart(); try { resp.sendRedirect(req.getContextPath()+"/jsp/cart.jsp"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); } return null; }
【在购物车页面点击删除链接】
public String removeCart(HttpServletRequest req,HttpServletResponse resp){ try { // 接收参数: String pid = req.getParameter("pid"); // 获得购物车: Cart cart = getCart(req); cart.removeCart(pid); // 页面跳转 resp.sendRedirect(req.getContextPath()+"/jsp/cart.jsp"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); } return null; }
1.2 订单模块:
1.2.1 功能演示:
1.2.2 代码实现:
1.2.2.1 创建表和实体:
CREATE TABLE `orders` ( `oid` varchar(32) NOT NULL, `ordertime` datetime DEFAULT NULL, `total` double DEFAULT NULL, `state` int(11) DEFAULT NULL, `address` varchar(30) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `telephone` varchar(20) DEFAULT NULL, `uid` varchar(32) DEFAULT NULL, PRIMARY KEY (`oid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `orderitem` ( `itemid` varchar(32) NOT NULL, `count` int(11) DEFAULT NULL, `subtotal` double DEFAULT NULL, `pid` varchar(32) DEFAULT NULL, `oid` varchar(32) DEFAULT NULL, PRIMARY KEY (`itemid`), KEY `fk_0001` (`pid`), KEY `fk_0002` (`oid`), CONSTRAINT `fk_0001` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`), CONSTRAINT `fk_0002` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.2.2.2 生成订单:
【在购物车的页面点击提交订单】
提交到Servlet:
* 封装订单和订单项.
* 调用业务层
* 清空购物车
* 页面跳转
【JAVAWEB学习笔记】网上商城实战3:购物模块和订单模块的更多相关文章
- 【JAVAWEB学习笔记】网上商城实战5:后台的功能模块
今日任务 完成后台的功能模块 1.1 网上商城的后台功能的实现: 1.1.1 后台的功能的需求: 1.1.1.1 分类管理: [查询所有分类] * 在左侧菜单页面中点击分类管理: * ...
- JAVAWEB贵美网上商城完整项目源码(SSH2)
JAVAWEB贵美网上商城完整项目源码(SSH2) 贵美网上商城原是北大青鸟的一个内部项目,项目采用 struts2+spring4+hibernate4+MySQL等技术实现,数据库连接池采用c3p ...
- JavaWeb学习笔记总结 目录篇
JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- 【JAVAWEB学习笔记】网上商城实战:环境搭建和完成用户模块
网上商城实战 今日任务 完成用户模块的功能 1.1 网上商城的实战: 1.1.1 演示网上商城的功能: 1.1.2 制作目的: 灵活运用所学知识完成商城实战. 1.1.3 ...
- 【JAVAWEB学习笔记】网上商城实战1:环境搭建和完成用户模块
今日任务 完成用户模块的功能 1.1 网上商城的实战: 1.1.1 演示网上商城的功能: 1.1.2 制作目的: 灵活运用所学知识完成商城实战. 1.1.3 数据库分析和设 ...
- Javaweb学习笔记——(二十四)——————图书商城项目
图书商城 环境搭建 1.导入原型 *用户模块 *分类模块 *图书模块 ...
- 【JAVAWEB学习笔记】06_jQuery基础
接05的学习笔记. 四.使用JQ完成省市二级联动 1.需求分析 使用jquery完成省市二级联动 2.技术分析 2.1数组的遍历操作 方式一: $(function(){ // 全选/ 全不选 $(& ...
- javaweb学习笔记(二)
一.javaweb学习是所需要的细节 1.Cookie的注意点 ① Cookie一旦创建,它的名称就不能更改,Cookie的值可以为任意值,创建后允许被修改. ② 关于Cookie中的setMaxAg ...
随机推荐
- 在SQL Server中用好模糊查询指令LIKE
简介:like在sql中的使用 在SQL Server中用好模糊查询指令LIKE 查询是SQL Server中重要的功能,而在查询中将Like用上,可以搜索到一些意想不到的结果和效果,like的神奇之 ...
- Linux嵌入式开发中常用的两个工具
TFTP 全称:Trivial File Transfer Protocol(简单文件传输协议) 进行小文件传输 在ubuntu下设置TFTP服务器 $ sudo apt-get install tf ...
- Vue 事件驱动和依赖追踪
之前关于 Vue 数据绑定原理的一点分析,最近需要回顾,就顺便发到随笔上了 在之前实现一个自己的Mvvm中,用 setter 来观测model,将界面上所有的 viewModel 绑定到 model ...
- JS绑定种类汇总
这里是<你不知道的JS>中常见的this绑定种类分享: 1)默认绑定: function foo(){ console.log(this.a); } var a = 2; foo(); 解 ...
- 利用Scrapy爬取所有知乎用户详细信息并存至MongoDB
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :崔庆才 本节分享一下爬取知乎用户所有用户信息的 Scrapy 爬虫实战. 本节目标 本节要实现的内容有 ...
- Hadoop安全机制之令牌
介绍 Hadoop中的安全机制包括认证和授权.而Hadoop RPC中采用SASL(Simple Authentication and Security Layer,简单认证和安全层)进行安全认证,具 ...
- Oracle数据泵(上)
导出 (以导出表空间为例) 1.给用户创建密码 alter user system identified by 00000000; 2.创建导出目录 create or replace dire ...
- uoj#228 基础数据结构练习题
题面:http://uoj.ac/problem/228 正解:线段树. 我们可以发现,开根号时一个区间中的数总是趋近相等.判断一个区间的数是否相等,只要判断最大值和最小值是否相等就行了.如果这个区间 ...
- ABP官方文档翻译 2.5 设置管理
设置管理 介绍 关于 ISettingStore 定义设置 设置范围 重写设置定义 获取设置值 服务端 客户端 更改设置 关于缓存 介绍 每个应用都需要存储设置,并且在应用的某些地方需要使用这些设置. ...
- spring计划任务
Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了: 创建一个Java类,添加一个无参无返回值的方法,在方法上用@Scheduled注解修饰一下: 在S ...