简单的购物车

事实证明,放假久了真的会让人变懒,我写个购物车,写了两天,无语死了。写一会,玩一会。

一、大致模块:

  1. 商品pojo类。
  2. 添加商品到购物车页面。
  3. 添加商品到购物车Servlet。
  4. 显示购物车页面。
  5. 显示购物车Servlet。

二,实现思路:

首先建立pojp,然后进行一定的特殊化重写方法。

添加商品页面使用js判断是否勾选添加的类容。

添加商品Servlet进行一些基本的判断,处理,将本次的添加商品放入session中。

而显示购物车就是和第一个页面差距不大,多了一个js的 求和。

显示购物车Servlet则进行取出session。

 三、代码:

pojo代码:

package Pojo;

public class Shopping {
	private int on;// 编号
	private String name;// 名称
	private double price;// 价格
	private String date;// 出厂日期
	private String type;// 类型

	public Shopping() {

	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {// 完全相同的对象
			return true;
		}
		if (obj instanceof Shopping) {
			Shopping shopping = (Shopping) obj;
			if (this.getOn() == shopping.getOn()) {// 编号相同
				return true;
			}
		}
		return false;
	}

	@Override
	public int hashCode() {
		Integer t = this.getOn();
		return t.hashCode();
	}

	@Override
	public String toString() {
		return "Shopping [on=" + on + ", name=" + name + ", price=" + price + ", date=" + date + ", type=" + type + "]";
	}

	public Shopping(int on, String name, double price, String date, String type) {
		super();
		this.on = on;
		this.name = name;
		this.price = price;
		this.date = date;
		this.type = type;
	}

	public int getOn() {
		return on;
	}

	public void setOn(int on) {
		this.on = on;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
}

基本的物品信息,值得注意的是,重写了equals,用于判断这俩商品是否为同一个,判断条件是on编号。后面使用hashset去重是将会调用这个hashCode方法,所以它也要重写为以on编号进行比较是否相同。

显示商品信息页面:

<%@page import="Pojo.Shopping"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>商品信息添加</title>
<style>
#table1 {
	margin: 0px auto;
}

#tr>td {
	width: 200px;
}

* {
	margin: 0px;
	padding: 0px;
}

body {
	width: 60%;
	margin: 0px auto;
}
</style>
</head>
<body>
	<%
	ArrayList<Shopping> list = (ArrayList<Shopping>) request.getAttribute("scl");
	String msg = (String) (request.getAttribute("msg"));
	%>

	<div style="margin-top: 5%;">
		<p>商品信息添加</p>
		<form action="add" method="POST">
			<div>
				<input type="submit" value="加入购物车" style="float: left;"
					onclick="return addF()">
					 <input type="button" value="查看购物车"
					style="float: right;" onclick="location.href='ShowShoppingServlet'">
			</div>
			<table border=1px style="clear: both;" id="table1">
				<tr id="tr">
					<td align="center">序号</td>
					<td align="center">选择</td>
					<td align="center">商品编号</td>
					<td align="center">商品名称</td>
					<td align="center">商品价格</td>
					<td align="center">出厂日期</td>
					<td align="center">商品类型</td>
				</tr>
				<%
				for (int i = 0; i < list.size(); i++) {
					Shopping sp = list.get(i);
				%>
				<tr>
					<td align="center"><%=i + 1%></td>
					<td align="center"><input type="checkbox" name="yes"
						value="<%=sp.getOn() + ":" + sp.getName() + ":" + sp.getPrice() + ":" + sp.getDate() + ":" + sp.getType()%>"></td>
					<td align="center"><%=sp.getOn()%></td>
					<td align="center"><%=sp.getName()%></td>
					<td align="center"><%=sp.getPrice()%></td>
					<td align="center"><%=sp.getDate()%></td>
					<td align="center"><%=sp.getType()%></td>
				</tr>
				<%
				}
				%>
			</table>
			<%
			if (msg != null) {
			%>
			<p style="color: red"><%=msg%></p>
			<%
			}
			%>
			<a href="tuichu">退出账号</a>


		</form>
	</div>
	<script>
		function addF() {
			var t = false;
			var anNiu = document.getElementsByName('yes');
			for (var i = 0; i < anNiu.length; i++) {
				if (anNiu[i].checked) {
					t = true;
					break;
				}
			}
			if (t) {
				return true;
			} else {
				alert("您未选着信息!");
				return false;
				s
			}
		}
	</script>
</body>
</html>

有一个简单的js判断是否勾选:

<input type="submit" value="加入购物车" style="float: left;" οnclick="return addF()">

和一个后端是否传回提示语句:

    <%
            if (msg != null) {
            %>
            <p style="color: red"><%=msg%></p>
            <%
            }
            %>

msg的获取在上面

 显示商品信息页面Servlet代码:

package Servlet;

import java.io.IOException;
import java.net.URLDecoder;
import java.util.ArrayList;

import Pojo.Shopping;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ShoppingServlet
 */
public class ShoppingServlet extends HttpServlet {
	private static ArrayList<Shopping> shoppingList = new ArrayList<Shopping>();
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	@Override
	public void init() throws ServletException {
		Shopping shopping1 = new Shopping(1, "椰汁", 10, "2021-5-6", "海南XX制造厂");
		Shopping shopping2 = new Shopping(2, "酸奶", 20, "2022-6-7", "湖南长沙XX制造厂");
		Shopping shopping3 = new Shopping(3, "雪碧", 30, "2021-11-4", "湖北武汉XX制造厂");
		shoppingList.add(shopping1);
		shoppingList.add(shopping2);
		shoppingList.add(shopping3);
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setAttribute("scl", shoppingList);
		String msg = request.getParameter("msg");
		if (msg != null) {
			msg = URLDecoder.decode(msg, "utf-8");
			request.setAttribute("msg", msg);
		}
		request.getRequestDispatcher("showList.jsp").forward(request, response);
	}

}

将数据通过转发的方法传回前端:

request.getRequestDispatcher("showList.jsp").forward(request, response);

 将数据添加到购物车Servicelet:

package Servlet;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;

import Pojo.Shopping;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

/**
 * Servlet implementation class AddShoppingServlet
 */
@WebServlet("/add")
public class AddShoppingServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * Default constructor.
	 */
	public AddShoppingServlet() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		HttpSession session = request.getSession();
		ArrayList<Shopping> list = (ArrayList<Shopping>) session.getAttribute("catList");
		if (list == null) {
			list = new ArrayList<Shopping>();
		}
		String[] arrs = request.getParameterValues("yes");
		for (int i = 0; i < arrs.length; i++) {
			String[] split = arrs[i].split(":");
			Shopping shopping = new Shopping();
			shopping.setOn(Integer.parseInt(split[0]));
			shopping.setName(split[1]);
			shopping.setPrice(Double.parseDouble(split[2]));
			shopping.setDate(split[3]);
			shopping.setType(split[4]);
			list.add(shopping);
		}
		session.setAttribute("catList", list);
//		System.out.println(list.size());//ok
		request.setAttribute("msg", "添加成功");
		request.getRequestDispatcher("shoppingServlet").forward(request, response);
	}

}

后端通过多选框的value传回的String数据,切割存储进list中,在存入特定的session。

显示购物车:

<%@page import="java.util.HashSet"%>
<%@page import="java.util.Set"%>
<%@page import="Pojo.Shopping"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>我的购物车</title>
<style>
#table1 {
	margin: 0px auto;
}

#tr>td {
	width: 200px;
}

* {
	margin: 0px;
	padding: 0px;
}

body {
	width: 60%;
	margin: 0px auto;
}
</style>
</head>
<body>
	<%
	HashSet<Shopping> set = (HashSet<Shopping>) session.getAttribute("setCat");
	ArrayList<Integer> list = (ArrayList<Integer>) session.getAttribute("nums");
	%>

	<div style="margin-top: 5%;">
		<p>我的购物车</p>
		<form action="add" method="POST">
			<table border=1px style="clear: both;" id="table1">
				<tr id="tr">
					<td align="center">数量</td>
					<td align="center">商品编号</td>
					<td align="center">商品名称</td>
					<td align="center">商品价格</td>
					<td align="center">出厂日期</td>
					<td align="center">商品类型</td>
				</tr>

				<%
				int cont = 0;
				for (Shopping shopping : set) {
					Shopping sp = shopping;
				%>
				<tr>
					<td name="num" align="center"><%=list.get(cont++)%></td>
					<td align="center"><%=sp.getOn()%></td>
					<td align="center"><%=sp.getName()%></td>
					<td name="qian" align="center"><%=sp.getPrice()%></td>
					<td align="center"><%=sp.getDate()%></td>
					<td align="center"><%=sp.getType()%></td>
				</tr>
				<%
				}
				%>
				
			</table>
		</form>
		<p id="sumqian"></p>
		<a href="shoppingServlet">返回商品信息</a>
		<script>
			var a=document.getElementsByName("num");
			var m=document.getElementsByName("qian");
			var sum=0;
			for(var i=0;i<a.length;i++){
				sum+=parseInt(a[i].innerHTML)*parseFloat(m[i].innerHTML);
			}
			document.getElementById("sumqian").innerHTML="总价格:"+sum+"元。";
		</script>
	</div>
</body>
</html>

set用于获取购物车的信息

list用于获取个数

这两个都在后端判断并储存好了,传回前端了。

下方有一个js用于求和购物车的钱。

查看购物车Servlet:

 

package Servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import Pojo.Shopping;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

/**
 * Servlet implementation class ShowShoppingServlet
 */
@WebServlet("/ShowShoppingServlet")
public class ShowShoppingServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * Default constructor.
	 */
	public ShowShoppingServlet() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		HttpSession session = request.getSession();
		ArrayList<Shopping> list = (ArrayList<Shopping>) session.getAttribute("catList");
		if (list == null) {
			request.setAttribute("msg", "购物车为空");
			request.getRequestDispatcher("shoppingServlet").forward(request, response);
		} else {
			HashSet<Shopping> set = new HashSet<Shopping>(list);
			ArrayList<Integer> nums = new ArrayList<Integer>();
			for (Shopping s : set) {
				int cont = Collections.frequency(list, s);
				nums.add(cont);
			}
			session.setAttribute("setCat", set);
			session.setAttribute("nums", nums);
			request.getRequestDispatcher("ShowCat.jsp").forward(request, response);
		}
	}

}

查出每个数据出现的个数:

Collections.frequency(list, s);存入list集合中。

再通过set特性存储去重,

把这两个数据传回前端,就有个购物的具体数据。

退出账号servlet:

package Servlet;

import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

/**
 * Servlet implementation class tuiChuServlet
 */
public class tuiChuServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * Default constructor.
	 */
	public tuiChuServlet() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		HttpSession session = request.getSession();
		request.getSession().removeAttribute("scl");
		request.getSession().removeAttribute("setCat");
		request.getSession().removeAttribute("nums");
		request.getSession().removeAttribute("catList");
		response.sendRedirect("Index.jsp");
	}

}

 退出账号就比较简单,清除指定的session,然后跳转页面。

以上便是一个简单的购物车程序,也许大佬们看着bug百出,不过作为初学者的我们,一步一个脚印,慢慢来。加油~~~ 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值