购物车
实现功能:
用户在登录状态下可以将商品加入购物车(如下图所示)。
product_info.jsp
(1)给购物车按钮增加onclick属性。
<div style="margin: 20px 0 10px 0;; text-align: center;">
<a href="#"> <input
style="background: url('./images/product.gif') no-repeat scroll 0 -600px rgba(0, 0, 0, 0); height: 36px; width: 127px;"
value="加入购物车" type="button" onclick="cart()">
</a> 收藏商品
</div>
(2)使用js编写cart()
<script type="text/javascript">
function cart(){
location.href="${pageContext.request.contextPath}/product?method=cart&pid=${p.pid}&proNumber="+$("#quantity").val();
}
</script>
CartItem.java
一个购物项(由一个商品、数量、小计构成)
package com.oracle.bean;
public class CartItem {
private Product pro = new Product();
private double subTotal;
private int count;
public CartItem() {
super();
// TODO Auto-generated constructor stub
}
public CartItem(Product pro, double subTotal, int count) {
super();
this.pro = pro;
this.subTotal = subTotal;
this.count = count;
}
public Product getPro() {
return pro;
}
public void setPro(Product pro) {
this.pro = pro;
}
public double getSubTotal() {
return subTotal;
}
public void setSubTotal(double subTotal) {
this.subTotal = subTotal;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
Cart.java
购物车(由一个存储许多购物项的Map集合、总计金额构成)
package com.oracle.bean;
import java.util.HashMap;
import java.util.List;
public class Cart {
private HashMap<String, CartItem> map = new HashMap<>();
private double subMoney;
public Cart() {
super();
// TODO Auto-generated constructor stub
}
public Cart(HashMap<String, CartItem> map, double subMoney) {
super();
this.map = map;
this.subMoney = subMoney;
}
public HashMap<String, CartItem> getMap() {
return map;
}
public void setMap(HashMap<String, CartItem> map) {
this.map = map;
}
public double getSubMoney() {
return subMoney;
}
public void setSubMoney(double subMoney) {
this.subMoney = subMoney;
}
}
ProductServlet.java
在ProductServlet的doGet方法中添加购物车的判断并完成cart方法。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method");
if("getProById".equals(method)) {
getProById(request, response);
}else if("findListByCate".equals(method)) {
findListByCate(request, response);
}else if("cart".equals(method)) {
cart(request, response);
}
}
public void cart(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
//接收前台参数
try {
String pid = request.getParameter("pid");
String pn = request.getParameter("proNumber");
int proNumber = Integer.parseInt(pn);
//查询商品信息
ProductService ps = new ProductService();
Product pro = ps.getProById(pid);
//从session中获取购物车
HttpSession session = request.getSession();
Cart cart = (Cart)session.getAttribute("cart");
//判断用户是否登录
User user = (User)session.getAttribute("user");
if(user==null) {
//跳转到首页
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
//判断购物车是否为空
if(cart==null) {
//创建一个新的购物车
cart = new Cart();
}
//否则有数据 有数据的话添加商品
HashMap<String, CartItem> map = cart.getMap();
if(map.containsKey(pid)) {
//购物车中已经存在当前要购买的商品
//获取购物车中商品的数量
CartItem ci = map.get(pid);
//获取购物车中商品的数量
int count = ci.getCount();
//购物车商品数量+需要购买的商品的数量=总数
int newCount = count+proNumber;
//商品小计
double subTotal = newCount * pro.getShop_price();
ci.setCount(newCount);
ci.setSubTotal(subTotal);
map.put(pid, ci);
}else {
//购物车中不存在购买的商品
CartItem ca = new CartItem();
ca.setPro(pro);
ca.setCount(proNumber);
ca.setSubTotal(proNumber*pro.getShop_price());
map.put(pid, ca);
}
//定义变量存储总计
double totalMoney=0.0;
Set<String> keySet = map.keySet();
for(String key:keySet) {
CartItem cc = map.get(key);
totalMoney+=cc.getSubTotal();
}
cart.setSubMoney(totalMoney);
cart.setMap(map);
//把购物车放入session中
session.setAttribute("cart", cart);
//请求转发到购物车页面解析
request.getRequestDispatcher("/cart.jsp").forward(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method");
if("getProById".equals(method)) {
getProById(request, response);
}else if("findListByCate".equals(method)) {
findListByCate(request, response);
}else if("cart".equals(method)) {
cart(request, response);
}
}
public void cart(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
//接收前台参数
try {
String pid = request.getParameter("pid");
String pn = request.getParameter("proNumber");
int proNumber = Integer.parseInt(pn);
//查询商品信息
ProductService ps = new ProductService();
Product pro = ps.getProById(pid);
//从session中获取购物车
HttpSession session = request.getSession();
Cart cart = (Cart)session.getAttribute("cart");
//判断用户是否登录
User user = (User)session.getAttribute("user");
if(user==null) {
//跳转到首页
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
//判断购物车是否为空
if(cart==null) {
//创建一个新的购物车
cart = new Cart();
}
//否则有数据 有数据的话添加商品
HashMap<String, CartItem> map = cart.getMap();
if(map.containsKey(pid)) {
//购物车中已经存在当前要购买的商品
//获取购物车中商品的数量
CartItem ci = map.get(pid);
//获取购物车中商品的数量
int count = ci.getCount();
//购物车商品数量+需要购买的商品的数量=总数
int newCount = count+proNumber;
//商品小计
double subTotal = newCount * pro.getShop_price();
ci.setCount(newCount);
ci.setSubTotal(subTotal);
map.put(pid, ci);
}else {
//购物车中不存在购买的商品
CartItem ca = new CartItem();
ca.setPro(pro);
ca.setCount(proNumber);
ca.setSubTotal(proNumber*pro.getShop_price());
map.put(pid, ca);
}
//定义变量存储总计
double totalMoney=0.0;
Set<String> keySet = map.keySet();
for(String key:keySet) {
CartItem cc = map.get(key);
totalMoney+=cc.getSubTotal();
}
cart.setSubMoney(totalMoney);
cart.setMap(map);
//把购物车放入session中
session.setAttribute("cart", cart);
//请求转发到购物车页面解析
request.getRequestDispatcher("/cart.jsp").forward(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}