实体类:
package com.zking.mvc.cart.entiy;
import java.io.Serializable;
/**
* 商品实体
*
*
* 2022年4月21日下午6:29:33
*/
public class Goods implements Serializable{
private static final long serialVersionUID = 172021583561153335L;
private int gid;
private String gname;
private int gprice;
private String ginfo;
private String gpath;
private String gzt;
public int getGid() {
return gid;
}
public void setGid(int gid) {
this.gid = gid;
}
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
public int getGprice() {
return gprice;
}
public void setGprice(int gprice) {
this.gprice = gprice;
}
public String getGinfo() {
return ginfo;
}
public void setGinfo(String ginfo) {
this.ginfo = ginfo;
}
public String getGpath() {
return gpath;
}
public void setGpath(String gpath) {
this.gpath = gpath;
}
public String getGzt() {
return gzt;
}
public void setGzt(String gzt) {
this.gzt = gzt;
}
public Goods() {
// TODO Auto-generated constructor stub
}
public Goods(int gid, String gname, int gprice, String ginfo, String gpath, String gzt) {
this.gid = gid;
this.gname = gname;
this.gprice = gprice;
this.ginfo = ginfo;
this.gpath = gpath;
this.gzt = gzt;
}
public Goods(String gname, int gprice, String ginfo, String gpath, String gzt) {
this.gname = gname;
this.gprice = gprice;
this.ginfo = ginfo;
this.gpath = gpath;
this.gzt = gzt;
}
@Override
public String toString() {
return "Goods [gid=" + gid + ", gname=" + gname + ", gprice=" + gprice + ", ginfo=" + ginfo + ", gpath=" + gpath
+ ", gzt=" + gzt + "]";
}
}
购物车实体类
package com.zking.mvc.cart.entiy;
import java.io.Serializable;
public class Cart implements Serializable{
private static final long serialVersionUID = 2576568634303648340L;
private int cid;
private Goods goods;
private User user;
private int ccount;
private int ctotal;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public Goods getGoods() {
return goods;
}
public void setGoods(Goods goods) {
this.goods = goods;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getCcount() {
return ccount;
}
public void setCcount(int ccount) {
this.ccount = ccount;
}
public int getCtotal() {
return ctotal;
}
public void setCtoal() {
this.ctotal = this.getGoods().getGprice()*this.getCcount();
}
public Cart() {
// TODO Auto-generated constructor stub
}
public Cart(int cid, Goods goods, User user, int ccount, int ctotal) {
this.cid = cid;
this.goods = goods;
this.user = user;
this.ccount = ccount;
this.ctotal = ctotal;
}
public Cart(Goods goods, User user, int ccount, int ctotal) {
this.goods = goods;
this.user = user;
this.ccount = ccount;
this.ctotal = ctotal;
}
@Override
public String toString() {
return "Cart [cid=" + cid + ", goods=" + goods + ", user=" + user + ", ccount=" + ccount + ", ctoal=" + ctotal
+ "]";
}
}
---------------------------------
dao方法
商品Goodsdao
package com.zking.mvc.cart.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.zking.mvc.cart.entiy.Goods;
import com.zking.mvc.cart.utils.DBHelper;
public class GoodsDaoimpl implements IGoodsDao {
@Override
public List<Goods> queryGoodsAll() {
// TODO Auto-generated method stub
//1.定义对应的三兄弟以及其他相关变量
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "";
Goods goods = null;
List<Goods> list = new ArrayList<Goods>();
//2.给对应的对象以及其他相关变量
try {
//获取连接
con = DBHelper.getCon();
//定以sql语句
sql = "select * from tb_goods";
//执行sql语句
ps = con.prepareStatement(sql);
//获得结果集
rs = ps.executeQuery();
//遍历结果集
while(rs.next()) {
//实例化
goods = new Goods();
//赋值
goods.setGid(rs.getInt(1));
goods.setGname(rs.getString(2));
goods.setGprice(rs.getInt(3));
goods.setGinfo(rs.getString(4));
goods.setGpath(rs.getString(5));
goods.setGzt(rs.getString(6));
//加到集合中
list.add(goods);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
//3.返回结果集
return list;
}
@Override
public Goods getGoodsByGid(int gid) {
// TODO Auto-generated method stub
//1.定义对应的三兄弟以及其他相关变量
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "";
//实例化
Goods goods = new Goods();
//2.给对应的对象以及其他相关变量
try {
//获取连接
con = DBHelper.getCon();
//定以sql语句
sql = "select * from tb_goods where gid=?";
//执行sql语句
ps = con.prepareStatement(sql);
//给占位符赋值
ps.setInt(1, gid);
//获得结果集
rs = ps.executeQuery();
//遍历结果集
while(rs.next()) {
//赋值
goods.setGid(rs.getInt(1));
goods.setGname(rs.getString(2));
goods.setGprice(rs.getInt(3));
goods.setGinfo(rs.getString(4));
goods.setGpath(rs.getString(5));
goods.setGzt(rs.getString(6));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
//3.返回结果集
return goods;
}
// public static void main(String[] args) {
// System.out.println(new GoodsDaoimpl().queryGoodsAll());
// }
}
iGoodsdao类
package com.zking.mvc.cart.dao.impl;
import java.util.List;
import com.zking.mvc.cart.entiy.Goods;
/**
*
* 数据库访问层
* 商品信息功能接口
* @author
*
* 2022年4月21日下午6:34:48
*/
public interface IGoodsDao {
/**
* 方法功能:查询所有的商品信息
* 无参数
* list 商品集合
*/
List<Goods> queryGoodsAll();
/**
* 查询单个
* @param gid 商品编号
* @return 返回行数
*/
Goods getGoodsByGid(int gid);
}
购物车Cartdao
package com.zking.mvc.cart.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.zking.mvc.cart.entiy.Cart;
import com.zking.mvc.cart.entiy.User;
import com.zking.mvc.cart.utils.DBHelper;
public class CartDaoimpl implements ICartDao {
@Override
public int addCart(Cart cart) {
// TODO Auto-generated method stub
//1.定义对应的三兄弟以及其他相关变量
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
int n = 0;
String sql = "";
//2.给对应的对象以及其他相关变量
try {
//获取连接
con = DBHelper.getCon();
//定以sql语句
sql = "insert into tb_cart " + "select nvl(max(cid),0)+1 ,?,?,?,? from tb_cart";
//执行sql语句
ps = con.prepareStatement(sql);
//给占位符赋值
ps.setInt(1, cart.getGoods().getGid());
ps.setInt(2, cart.getUser().getUserid());
ps.setInt(3, cart.getCcount());
ps.setInt(4, cart.getCtotal());
//返回执行行数
n = ps.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, null);
}
//返回结果集
return n;
}
@Override
public List<Cart> getCartByuserid(int userid) {
// TODO Auto-generated method stub
//1.定义对应的三兄弟以及其他相关变量
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "";
Cart c = null;
List<Cart> list = new ArrayList<Cart>();
//2.给对应的对象以及其他相关变量
try {
//获取连接
con = DBHelper.getCon();
//定以sql语句
sql = "select * from tb_cart where userid = ?";
//执行sql语句
ps = con.prepareStatement(sql);
//给占位符赋值
ps.setInt(1, userid);
//获得结果集
rs = ps.executeQuery();
//遍历结果集
while(rs.next()) {
c = new Cart();
c.setCid(rs.getInt(1));
c.setGoods(new GoodsDaoimpl().getGoodsByGid(rs.getInt(2)));
//更新
c.setUser(new User(rs.getInt(3),"刘太阳","110"));
c.setCcount(rs.getInt(4));
c.setCtoal();
list.add(c);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, null);
}
//返回结果集
return list;
}
@Override
public int editCartByCidAndUserid(Cart cart) {
// TODO Auto-generated method stub
//1.定义对应的三兄弟以及其他相关变量
Connection con = null;
PreparedStatement ps = null;
int n = 0;
String sql = "";
//2.给对应的对象以及其他相关变量
try {
//获取连接
con = DBHelper.getCon();
//定以sql语句
sql = "update tb_cart set ccount=?,ctotal=? where cid=? and userid=?";
//执行sql语句
ps = con.prepareStatement(sql);
//给占位符赋值
ps.setInt(1, cart.getCcount());
ps.setInt(2, cart.getCtotal());
ps.setInt(3, cart.getCid());
ps.setInt(4, cart.getUser().getUserid());
//返回执行行数
n = ps.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, null);
}
return n;
}
@Override
public int delCart(int uid) {
// TODO Auto-generated method stub
//1.定义对应的三兄弟以及其他相关变量
Connection con = null;
PreparedStatement ps = null;
int n = 0;
String sql = "";
//2.给对应的对象以及其他相关变量
try {
//获取连接
con = DBHelper.getCon();
//定以sql语句
sql = "delete from tb_cart where userid="+uid;
//执行sql语句
ps = con.prepareStatement(sql);
//返回执行行数
n = ps.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, null);
}
return n; }
}
购物车ICartdao
package com.zking.mvc.cart.dao.impl;
import java.util.List;
import com.zking.mvc.cart.entiy.Cart;
public interface ICartDao {
/**
* 加入购物车
* 购物车实体类
* n 影响的行数
*
*/
int addCart(Cart cart);
/**
* 方法功能:根据指定的登陆用户id查找对应的购物车
* userid 用户 id
*
*/
List<Cart> getCartByuserid(int userid);
/**
* 根据用户id和购物车编号修改商品数量
* @param cart
* @return
*/
int editCartByCidAndUserid(Cart cart);
/**
* 根据用户id和购物车编号删除商品数量
* @param cart
* @return
*/
int delCart(int uid);
}
---------------------------------------------------------
商品购物逻辑层
package com.zking.mvc.cart.biz.impl;
import java.util.List;
import com.zking.mvc.cart.dao.impl.GoodsDaoimpl;
import com.zking.mvc.cart.dao.impl.IGoodsDao;
import com.zking.mvc.cart.entiy.Goods;
public class GoodsBizimpl implements IGoodsBiz {
//直接实例化数据访问层
private IGoodsDao igd = new GoodsDaoimpl();
@Override
public List<Goods> queryGoodsAll() {
// TODO Auto-generated method stub
return igd.queryGoodsAll();
}
@Override
public Goods getGoodsByGid(int gid) {
// TODO Auto-generated method stub
return igd.getGoodsByGid(gid);
}
}
package com.zking.mvc.cart.biz.impl;
import java.util.List;
import com.zking.mvc.cart.entiy.Goods;
public interface IGoodsBiz {
/**
* 方法功能:查询所有的商品信息
* 无参数
* list 商品集合
*/
List<Goods> queryGoodsAll();
/**
* 查询单个
* @param gid 商品编号
* @return 返回行数
*/
public Goods getGoodsByGid(int gid);
}
购物车业务逻辑层
package com.zking.mvc.cart.biz.impl;
import java.util.List;
import com.zking.mvc.cart.entiy.Cart;
public interface ICartBiz {
/**
* 加入购物车
* 购物车实体类
* n 影响的行数
*
*/
int addCart(Cart cart);
/**
* 方法功能:根据指定的登陆用户id查找对应的购物车
* userid 用户 id
*
*/
List<Cart> getCartByuserid(int userid);
/**
* 根据用户id和购物车编号修改商品数量
* @param cart
* @return
*/
int editCartByCidAndUserid(Cart cart);
/**
* 根据用户id和购物车编号删除商品数量
* @param cart
* @return
*/
int delCart(int uid);
}
package com.zking.mvc.cart.biz.impl;
import java.util.List;
import com.zking.mvc.cart.dao.impl.CartDaoimpl;
import com.zking.mvc.cart.dao.impl.ICartDao;
import com.zking.mvc.cart.entiy.Cart;
public class CartBizimpl implements ICartBiz {
private ICartDao icd = new CartDaoimpl();
@Override
public int addCart(Cart cart) {
// TODO Auto-generated method stub
return icd.addCart(cart);
}
@Override
public List<Cart> getCartByuserid(int userid){
// TODO Auto-generated method stub
return icd.getCartByuserid(userid);
}
@Override
public int editCartByCidAndUserid(Cart cart) {
// TODO Auto-generated method stub
return icd.editCartByCidAndUserid(cart);
}
@Override
public int delCart(int uid) {
// TODO Auto-generated method stub
return icd.delCart(uid);
}
}
Servlet
package com.zking.mvc.cart.servlet;
import java.io.IOException;
import java.util.List;
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 com.zking.mvc.cart.biz.impl.GoodsBizimpl;
import com.zking.mvc.cart.biz.impl.IGoodsBiz;
import com.zking.mvc.cart.entiy.Goods;
import com.zking.mvc.cart.entiy.User;
@WebServlet("/GoodsLisetServlet")
public class GoodsLisetServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//servlet作用:负责处理用户的请求以及响应
//1.设置字符集编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//2.获取参数 省略
//3.封装 调用biz判断
IGoodsBiz igb = new GoodsBizimpl();
List<Goods> listGoods = igb.queryGoodsAll();
//数据要保存在与域对象中
//获取域对象 session
HttpSession session = request.getSession();
session.setAttribute("listGoods", listGoods);
//默认保存一个登陆用户
User users = new User(1,"刘太阳","110");
session.setAttribute("users", users);
//获取当前项目的绝对路径
String path = request.getServletContext().getContextPath();//获取绝对路径
//4.响应
response.sendRedirect("index.jsp");
}
}
package com.zking.mvc.cart.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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zking.mvc.cart.biz.impl.CartBizimpl;
import com.zking.mvc.cart.biz.impl.GoodsBizimpl;
import com.zking.mvc.cart.biz.impl.ICartBiz;
import com.zking.mvc.cart.biz.impl.IGoodsBiz;
import com.zking.mvc.cart.entiy.Cart;
import com.zking.mvc.cart.entiy.Goods;
import com.zking.mvc.cart.entiy.User;
@WebServlet("/AddCartServlet")
public class AddCartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//jrebel 热部署启动插件
//加入购物车的servlet
//System.out.print("造孽呀!!!");
//1.设置字符集编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//2.获取location带过来的id
String id = request.getParameter("gid");
int gid = 0;
if(id!=null) {
gid = Integer.valueOf(id);
}
//数据封装
Cart c = new Cart();
//将gid userid ccount ctotal 封装cart 实体对象
IGoodsBiz igb = new GoodsBizimpl();
Goods goods = igb.getGoodsByGid(gid);
//userid
HttpSession session = request.getSession();
User ur = (User)session.getAttribute("users");
c.setGoods(goods);
c.setUser(ur);
c.setCcount(1);
c.setCtoal();;
//要想将封装好的购物车信息 保存到数据库中
//先获取当前这个登陆的用户的购物车
ICartBiz icb = new CartBizimpl();
List<Cart> listCart = icb.getCartByuserid(ur.getUserid());
//如果购物车为空List<Cart> listCarts = null;
boolean f = true;
//如果该用户是第一次进入 构建一个新的购物车 实例化
if(null==listCart) {
listCart = new ArrayList<Cart>();
}
else {
//非第一次
//遍历所有的商品
for(Cart cart:listCart) {
//判断当前加入的与购物车中已有的进行匹配
if(cart.getGoods().getGid()==c.getGoods().getGid()) {
//不需要重复添加 修改数量及总价即可
cart.setCcount(cart.getCcount()+1);
cart.getCtotal();
//进行一个数据库的更新
icb.editCartByCidAndUserid(cart);
f = false;
break;
}
}
}
//问题:加入购物车不是加入集合 而是加入数据库
//listCart.add(c);
if(f) {
icb.addCart(c);
}
//加入后数据要继续更新
listCart = icb.getCartByuserid(ur.getUserid());
session.setAttribute("listCart", listCart);
response.sendRedirect("cart.jsp");
}
}
商品主界面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!--通过taglib标准标签库 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html >
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 通过c标签判断是否在域对象中存在数据 -->
<c:if test="${empty listGoods }">
<jsp:forward page="GoodsLisetServlet"></jsp:forward>
</c:if>
<h2 style="text-align: center;"></h2>
<hr/>
<p>欢迎你!尊敬的先生 ----${users.username }</p>
<table border = "1" width="100%">
<tr>
<td>商品编号</td>
<td>商品名称</td>
<td>商品价格</td>
<td>商品描述</td>
<td>商品图片</td>
<td>操作</td>
</tr>
<!--通过c标签遍历数据 -->
<c:forEach items="${listGoods }" var ="goods">
<tr>
<td>${goods.gid }</td>
<td>${goods.gname }</td>
<td>${goods.gprice }</td>
<td>${goods.ginfo }</td>
<td><img src="${goods.gpath }" width="80" height="50" /></td>
<td><a href="AddCartServlet?gid=${goods.gid }">加入购物车</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
购物车主界面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!--通过taglib标准标签库 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html >
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>我的购物车</h1>
<a href="index.jsp">返回</a>
<table border = "1" width="100%">
<tr>
<td>购物车编号</td>
<td>商品名称</td>
<td>商品价格</td>
<td>商品描述</td>
<td>商品图片</td>
<td>商品数量</td>
<td>商品总价</td>
<td>操作</td>
</tr>
<!--通过c标签遍历数据 -->
<c:forEach items="${listCart }" var ="cart">
<tr>
<td>${cart.cid }</td>
<td>${cart.goods.gname }</td>
<td>${cart.goods.gprice }</td>
<td>${cart.goods.ginfo }</td>
<td><img src="${cart.goods.gpath }" width="80" height="50" /></td>
<td>${cart.ccount }</td>
<td>${cart.ctotal}</td>
<td>
<a href="#">删除</a>
<a href="#">修改</a>
</td>
</tr>
</c:forEach>
</table>
<p style="text-align: right;">
<button onclick="buy()" style="background:green;color:red;font-weight: bold;width: 100px;height: 60px;border-radius: 30px;cursor: pointer;">结算</button>
</p>
<script type="text/javascript">
function buy(){
location.href="FindCartInfoServlet";
}
</script>
</body>
</html>