javaweb实现简单购物车
时间: 2023-10-26 07:07:20 浏览: 114
要实现一个简单的购物车,可以按照以下步骤:
1. 创建一个商品类,定义商品的属性(如商品ID、名称、价格等)。
2. 创建一个购物车类,定义购物车的属性和方法(如添加商品、删除商品、计算总价等)。
3. 在jsp页面中,通过表单向服务器发送请求,将商品添加到购物车中。
4. 在服务器端,通过servlet接收请求,将商品添加到购物车中。
5. 在购物车页面中,展示购物车中的商品信息和总价。
下面是一个简单的实现示例:
商品类:
```
public class Product {
private int id;
private String name;
private double price;
// 构造方法和get/set方法省略
}
```
购物车类:
```
public class ShoppingCart {
private Map<Integer, Product> products = new HashMap<>();
// 添加商品
public void addProduct(Product product) {
if (products.containsKey(product.getId())) {
Product p = products.get(product.getId());
p.setCount(p.getCount() + 1);
} else {
products.put(product.getId(), product);
product.setCount(1);
}
}
// 删除商品
public void removeProduct(int productId) {
if (products.containsKey(productId)) {
Product p = products.get(productId);
if (p.getCount() > 1) {
p.setCount(p.getCount() - 1);
} else {
products.remove(productId);
}
}
}
// 计算总价
public double getTotalPrice() {
double totalPrice = 0;
for (Product p : products.values()) {
totalPrice += p.getPrice() * p.getCount();
}
return totalPrice;
}
// 获取购物车中的商品列表
public List<Product> getProductList() {
return new ArrayList<>(products.values());
}
}
```
jsp页面:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>购物车</title>
</head>
<body>
<h1>购物车</h1>
<form action="addProduct" method="post">
<label for="productId">商品ID:</label>
<input type="text" id="productId" name="productId"><br>
<label for="productName">商品名称:</label>
<input type="text" id="productName" name="productName"><br>
<label for="productPrice">商品价格:</label>
<input type="text" id="productPrice" name="productPrice"><br>
<input type="submit" value="添加">
</form>
<hr>
<h2>购物车列表</h2>
<table border="1">
<tr>
<th>ID</th>
<th>名称</th>
<th>数量</th>
<th>单价</th>
<th>小计</th>
<th>操作</th>
</tr>
<c:forEach items="${productList}" var="p">
<tr>
<td>${p.id}</td>
<td>${p.name}</td>
<td>${p.count}</td>
<td>${p.price}</td>
<td>${p.price * p.count}</td>
<td><a href="removeProduct?productId=${p.id}">删除</a></td>
</tr>
</c:forEach>
<tr>
<td colspan="4">总价:</td>
<td>${totalPrice}</td>
<td></td>
</tr>
</table>
</body>
</html>
```
servlet:
```
public class ShoppingCartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("productId"));
String name = request.getParameter("productName");
double price = Double.parseDouble(request.getParameter("productPrice"));
Product product = new Product(id, name, price);
ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("cart");
if (cart == null) {
cart = new ShoppingCart();
request.getSession().setAttribute("cart", cart);
}
cart.addProduct(product);
response.sendRedirect("cart.jsp");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("productId"));
ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("cart");
if (cart != null) {
cart.removeProduct(id);
}
response.sendRedirect("cart.jsp");
}
}
```
在这个示例中,我们使用了一个Map来存储购物车中的商品,商品的ID作为Map的键,商品对象作为Map的值。向购物车添加商品时,如果该商品已经在购物车中,则将该商品的数量加1;否则将该商品添加到购物车中,并将数量设置为1。从购物车中删除商品时,如果该商品数量大于1,则将数量减1;否则将该商品从购物车中删除。购物车页面中,我们使用了JSTL标签库来展示商品列表和总价。在servlet中,我们通过getParameter方法获取表单提交的数据,将商品添加到购物车中,并将购物车对象放入session中。从购物车中删除商品时,我们也是从session中获取购物车对象,并调用removeProduct方法将商品从购物车中删除。最后,我们使用sendRedirect方法重定向到购物车页面,展示购物车中的商品列表和总价。
阅读全文