【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 ...
随机推荐
- html静态页面实现微信分享思路
微信分享网页的时候,希望分享出来的链接是标题+描述+缩略图,微信开发代码示例里已提供了方法,但只适用于动态页面.由于dedecms是生成了静态文件,其实我想使用ajax获取jssdk参数也能也能实现微 ...
- Nginx配置同一个域名同时支持http与https两种方式访问
Nginx配置同一个域名http与https两种方式都可访问,证书是阿里云上免费申请的 server{listen 80;listen 443 ssl;ssl on;server_name 域名;in ...
- Jquery对raido的一些操作方法
raido 单选组radio: $("input[type=radio][checked]").val(); 获 取一组radio被选中项的值 var item = $('i ...
- 【Spark2.0源码学习】-1.概述
Spark作为当前主流的分布式计算框架,其高效性.通用性.易用性使其得到广泛的关注,本系列博客不会介绍其原理.安装与使用相关知识,将会从源码角度进行深度分析,理解其背后的设计精髓,以便后续 ...
- App内切换语言
前几天客户提需求,对App增加一个功能,这个功能目前市面上已经很常见,那就是应用内切换语言.啥意思,就是 英.中.法.德.日...语言随意切换. (本案例采用Data-Bingding模式,麻麻再也不 ...
- C#邮件发送开发经本人测试通过
先准备以下工作 1.先开通邮箱我以QQ邮箱为例 2.开通 POP3/SMTP服务 (如何使用 Foxmail 等软件收发邮件?) 已开启 | 关闭 获取授权码 3.C#开发了先写一个CS文件 pub ...
- Oracle空间查询 ORA-28595
可使用数据库管理系统 (DBMS) 的结构化查询语言 (SQL).数据类型和表格式来处理地理数据库或安装了 ST_Geometry 类型的数据库中所存储的信息. 例如,在ArcMap中我们使用&quo ...
- Android之AIDL知识总结
1.AIDL介绍 AIDL是一个缩写,全称是Android Interface Definition Language,翻译为Android接口定义语言.主要用于线程之间的通信,本文主要以不同应用之间 ...
- ubutun 安装php7.1x
服务器ecs上本来跑了一套nginx+php5.5,由于新项目使用的是laravel5.4,所以不得不把php升级,在此记录下在此安装的过程和遇到的问题,总体来说还算顺利 cd /usr/local/ ...
- 关于System.Windows.Forms.DateTimePicker的一个Bug
几天接到客户的反馈,说系统无法查询2017年2月份的账单,原因是没办法选择2017年2月份,没办法选择2月份???,马上开启vs,运行系统,应为市去年的系统,测试数据也是去年的,就查询了2016年2月 ...