javaweb——通过session实现购物车功能

目录

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>欢迎你回来!&nbsp;&nbsp;"+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");
%>


好的,以下是一个简单的JavaWeb购物车功能的完整代码。 首先,我们需要创建一个Servlet来处理购物车相关的请求: ``` import java.io.IOException; import java.util.HashMap; import java.util.Map; 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; @WebServlet("/cart") public class ShoppingCartServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); // get shopping cart from session Map<String, Integer> cart = (Map<String, Integer>) session.getAttribute("cart"); if (cart == null) { cart = new HashMap<>(); session.setAttribute("cart", cart); } // handle different actions String action = request.getParameter("action"); if ("add".equals(action)) { String item = request.getParameter("item"); Integer quantity = Integer.valueOf(request.getParameter("quantity")); cart.put(item, cart.getOrDefault(item, 0) + quantity); } else if ("remove".equals(action)) { String item = request.getParameter("item"); cart.remove(item); } else if ("clear".equals(action)) { cart.clear(); } // redirect back to shopping cart page response.sendRedirect(request.getContextPath() + "/cart.jsp"); } } ``` 在这个Servlet中,我们首先获取当前Session中的购物车对象,如果Session中没有购物车对象则创建一个新的购物车对象。 然后根据请求参数中的action参数来处理不同的操作。如果是添加商品到购物车,则从请求参数中获取商品名和数量,然后将其添加到购物车中。如果是从购物车中删除商品,则从请求参数中获取商品名,然后将其从购物车中删除。如果是清空购物车,则清空购物车对象。 最后,我们重定向回购物车页面。 接下来,我们需要创建一个JSP页面来显示购物车中的商品: ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>购物车</title> </head> <body> <h1>购物车</h1> <table border="1"> <tr> <th>商品名称</th> <th>数量</th> <th>操作</th> </tr> <c:forEach items="${cart}" var="entry"> <tr> <td>${entry.key}</td> <td>${entry.value}</td> <td> <form action="${pageContext.request.contextPath}/cart" method="post"> <input type="hidden" name="action" value="remove"> <input type="hidden" name="item" value="${entry.key}"> <button type="submit">删除</button> </form> </td> </tr> </c:forEach> </table> <form action="${pageContext.request.contextPath}/cart" method="post"> <input type="hidden" name="action" value="clear"> <button type="submit">清空购物车</button> </form> <h2>添加商品</h2> <form action="${pageContext.request.contextPath}/cart" method="post"> <input type="hidden" name="action" value="add"> <label>商品名称:</label> <input type="text" name="item"><br> <label>数量:</label> <input type="number" name="quantity"><br> <button type="submit">添加</button> </form> </body> </html> ``` 在这个JSP页面中,我们使用JSTL的<c:forEach>标签来遍历购物车中的商品,并显示商品名称、数量和删除按钮。我们还提供了一个清空购物车的按钮和一个表单来添加新的商品到购物车中。 最后,我们需要在Web应用程序的部署描述符(web.xml)中添加一个Servlet映射: ``` <servlet> <servlet-name>ShoppingCartServlet</servlet-name> <servlet-class>com.example.ShoppingCartServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ShoppingCartServlet</servlet-name> <url-pattern>/cart</url-pattern> </servlet-mapping> ``` 这样,我们就完成了一个简单的JavaWeb购物车功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羊持续开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值