目录

session实现购物车

1.首页布局

2.点击加入购物车跳转到do处理页面

3.进行一个购物车布局,实现购物车相关功能


session实现购物车

1.首页布局

对商城首页进行排版

商品会有加入购物车功能会传递商品id

<%@page import="com.ys.cart.entity.Goods"%>
<%@page import="com.ys.cart.biz.impl.GoodsBizImpl"%>
<%@page import="com.ys.cart.biz.IGoodsBiz"%>
<%@page import="com.ys.cart.entity.Users"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 通过session默认保存一个用户 -->
	<%
					request.setCharacterEncoding("utf-8");
					//获取usernmae
					String username = request.getParameter("username");
					if(null!=username){
						out.println("<span>欢迎你回来!  "+username+"</span>");
					}else{
						out.println("【<a href = 'login.jsp'>登录</a>】");
					}
				%>
	<%
		Users users = new Users(1, "ys", "123", "男", 1, 1000, "date");
		//存储到session
		session.setAttribute("users", users);
	%>

	<h3>ys购物商城首页</h3>
	<%
		Users u = (Users) session.getAttribute("users");
	%>
	<p>
		欢迎您!<%=u.getUsername()%></p>

	<table border="1" width="70%">
		<tr>
			<th>编号</th>
			<th>名称</th>
			<th>价格</th>
			<th>描述</th>
			<th>图片</th>
			<th>操作</th>
		</tr>
		<%
			//调用biz层显示所有的数据
			IGoodsBiz igb = new GoodsBizImpl();
			//调用查询所有的方法
			List<Goods> listGoods = igb.queryGoodsAll();
			for (Goods goods : listGoods) {
		%>
		<tr>
			<td><%=goods.getGid()%></td>
			<td><%=goods.getGname()%></td>
			<td><%=goods.getGprice()%></td>
			<td><%=goods.getGinfo()%></td>
			<td><img src="<%=goods.getGpath()%>" /></td>
			<td>
				<button onclick="addCart(<%=goods.getGid()%>)">加入购物车</button>
			</td>
		</tr>

		<%
			}
		%>

	</table>
	<script type="text/javascript">
	//加入购物车的点击事件
	function addCart(gid){
		//alert(cid)
		location.href = "doShopping.jsp?gid="+gid;
	}

</script>
</body>
</html>

2.点击加入购物车跳转到do处理页面

拿到传递的商品id可以拿到商品所有信息,

加入购物车默认为一件商品,

创建list集合成为购物车(首次肯定为空会进行判断)

不为空时会进行判断是否存在相同的商品(存在时商品数量+1,就不用添加到购物车)

否则将商品添加到购物车实体,保存在session中的list集合

<%@page import="com.ys.cart.entity.Cart"%>
<%@page import="com.ys.cart.entity.Goods"%>
<%@page import="com.ys.cart.biz.impl.GoodsBizImpl"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!-- 加入购物车的do处理页面 -->

<!-- 
		购物车流程:
			1.Goods---显示商品信息
			2.Cart ---购物车中的信息
			加入购物车 不是将Goods进行存储  而是存储的是Cart实体
	 -->
<%
	//将点击的商品存储到购物车容器中(session)

	//设置编码
	request.setCharacterEncoding("utf-8");
	//获取商品编号
	String id = request.getParameter("gid");
	int gid = 0;
	if (null != id) {
		gid = Integer.valueOf(id);
	}

	//拿到cid  根据cid获取商品的其它信息
	Goods goods = new GoodsBizImpl().getGoodsByCid(gid);
	//数量默认一件
	//总价格    商品的单价 * 数量(1件)

	//将上面获取的信息封装到Cart实体中
	Cart cart = new Cart();
	cart.setGoods(goods);
	cart.setCcount(1);
	cart.setCtotal();

	//1.获取购物车
	List<Cart> listCarts = (List<Cart>) session.getAttribute("listCarts");
	//2.判断非空
	boolean flag = true;
	if (null == listCarts) {//说明用户时第一次将商品加入购物车  
		//创建购物车
		listCarts = new ArrayList<Cart>();
	} else {//否则  购物车中存在商品
			//遍历所有的购物车中的商品  看该购物车中是否存在刚才点击的cart实体封装
		for (Cart c : listCarts) {
			//判断传递的cid与当前listCarts中的每一个cid进行匹配
			if (gid == c.getGoods().getGid()) {//说明购物车中存在该商品
				flag = false;
				//修改数量
				c.setCcount(c.getCcount() + 1);
				//修改总价格
				c.setCtotal();
			}
		}
	}
	//判断flag标记
	if (flag == true) {//说明购物车中没有该商品
		listCarts.add(cart);
	}

	//重新保存购物车
	session.setAttribute("listCarts", listCarts);

	response.sendRedirect("cart.jsp");
%>

3.进行一个购物车布局,实现购物车相关功能

拿到购物车进行一个布局(要求每页显示五个商品,会有删除,修改功能)

定义页码和每页个数,总数量(求出总页数)。

调用伪分页的方法  subList(start,end);
listCarts = listCarts.subList(start, end);

 在尾部有关当前页数的代码,相关超链接需要带有部分逻辑代码和参数

        当前页数(第一页,总页数)

        首页(第一页,模糊查询关键词)

        上一页(当前页数-1并且判断是否符合逻辑,模糊查询关键词)

        下一页(当前页数+1并且判断是否符合逻辑,模糊查询关键词)

        末页(最后一页,模糊查询关键词)

        当点击时跳转到主页面,需要接收参数,进行一个逻辑判断。

<%@page import="com.ys.cart.entity.Cart"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>我的购物车</h2>
	<a href="index.jsp">返回首页</a>
	<hr />
	<table border="1" width="70%">
		<tr>
			<th>编号</th>
			<th>名称</th>
			<th>价格</th>
			<th>图片</th>
			<th>数量</th>
			<th>总价格</th>
			<th>操作</th>
		</tr>
		<%
			//获取购物车
			List<Cart> listCarts = (List<Cart>) session.getAttribute("listCarts");

			//定义一个页码
			int pageIndex = 1;
			//定义一个变量存储每页显示的条数
			int pageSize = 5;
			//当用户点击了下一页   获取到下一页超链接上的参数
			String pIndex = request.getParameter("pageIndex");
			if (pIndex != null) {
				pageIndex = Integer.valueOf(pIndex);
			}

			//定义一个变量存储总记录数
			int pageCount = listCarts.size();

			int start = (pageIndex - 1) * pageSize;
			//sublist  参数end  没有等于
			int end = pageIndex * pageSize;
			if (end > pageCount) {
				end = pageCount;
			}
			int pageMax = pageCount / pageSize;
			if (pageCount % pageSize != 0) {
				pageMax++;
			}
			//调用伪分页的方法  subList(start,end);
			listCarts = listCarts.subList(start, end);

			for (Cart cart : listCarts) {
		%>
		<tr id="<%=cart.getGoods().getGid()%>">
			<td><%=cart.getGoods().getGid()%></td>
			<td><%=cart.getGoods().getGname()%></td>
			<td><%=cart.getGoods().getGprice()%></td>
			<td><img src="<%=cart.getGoods().getGpath()%>" /></td>
			<td>
				<button
					onclick="add('a',<%=cart.getGoods().getGid()%>,<%=cart.getGoods().getGprice()%>)">-</button>
				<input type="text" style="width: 40px"
				value="<%=cart.getCcount()%>" />
				<button
					onclick="add('b',<%=cart.getGoods().getGid()%>,<%=cart.getGoods().getGprice()%>)">+</button>
			</td>
			<td><input type="text" style="width: 40px"
				value="<%=cart.getCtotal()%>" /></td>
			<td>
				<button onclick="delCart(<%=cart.getGoods().getGid()%>)">删除</button>
				<button onclick="updateCart(<%=cart.getGoods().getGid()%>)">修改</button>
			</td>

		</tr>

		<%
			}
		%>

	</table>
	<!-- 购物车页面实现分页 -->
	<!-- 每一页现实的商品条数5条 -->
	<p>
		[<%=pageIndex%>/<%=pageMax%>] <a href="cart.jsp?pageIndex=1">首页</a>
		<a href="cart.jsp?pageIndex=<%=pageIndex - 1 < 0 ? 1 : pageIndex - 1%>">上一页</a>
		<a
			href="cart.jsp?pageIndex=<%=pageIndex + 1 > pageMax ? pageMax : pageIndex + 1%>">下一页</a>
		<a href="cart.jsp?pageIndex=<%=pageMax%>">尾页</a>


	</p>

	<script type="text/javascript">
	
		function delCart(id){
			if(window.confirm("您确定要删除吗?")){
				location.href="doDel.jsp?gid="+id;
			}
		}
		
		
		function add(type,id,price){
			//根据参数id获取tr标签
			var tr = document.getElementById(id);
			//根据tr获取数量
			var ccount = tr.cells[4].children[1].value;
			console.log(ccount);
			if(type === 'a'){//减法
				if (ccount>0) {
					ccount--;
				}
			}else if(type==='b'){//加法
				ccount++;
			}
			tr.cells[4].children[1].value = ccount;
			tr.cells[5].children[0].value = ccount * price;
		}
		
		function updateCart(id){
			//根据id获取到数量
			var tr = document.getElementById(id);
			var ccount = tr.cells[4].children[1].value;
			//console.log(ccount);
			location.href="doUpdate.jsp?gid="+id+"&ccount="+ccount;
		}
	
	</script>
</body>
</html>

删除数据处理

<%@page import="java.util.Iterator"%>
<%@page import="com.ys.cart.entity.Cart"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	String id = request.getParameter("gid");
	int cid = 0;
	if (null != id) {
		cid = Integer.valueOf(id);
	}

	//获取购物车
	List<Cart> listCarts = (List<Cart>) session.getAttribute("listCarts");
	System.out.println(listCarts);

	//迭代器的方式进行删除
	Iterator<Cart> its = listCarts.iterator();
	while (its.hasNext()) {
		Cart cc = its.next();
		//its.remove();
		if (cc.getGoods().getGid() == cid) {
			its.remove();
		}
	}

	session.setAttribute("listCarts", listCarts);
	response.sendRedirect("cart.jsp");
%>

修改数据处理

<%@page import="com.ys.cart.entity.Cart"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	String id1 = request.getParameter("gid");
	String id2 = request.getParameter("ccount");

	int gid = 0;
	if (id1 != null) {
		gid = Integer.valueOf(id1);
	}
	int ccount = 0;
	if (id2 != null) {
		ccount = Integer.valueOf(id2);
	}

	//获取购物车
	List<Cart> listCarts = (List<Cart>) session.getAttribute("listCarts");

	for (Cart c : listCarts) {
		if (c.getGoods().getGid() == gid) {
			c.setCcount(ccount);
			c.setCtotal();
		}
	}

	session.setAttribute("listCarts", listCarts);

	response.sendRedirect("cart.jsp");
%>