一、代码实现
购物车类(Cart.java)
购物车类中存储购物车id、用户id、产品id以及产品数量(由于多值传参略为麻烦,这里我们暂时将产品数量写死,后期会通过前台页面弹出文本框进行赋值)
package com. lazy. domain;
public class Cart {
private int cid;
private Users uid;
private Product pid;
private int pnum;
public Cart ( ) {
}
public Cart ( Users uid, Product pid, int pnum) {
this . uid = uid;
this . pid = pid;
this . pnum = pnum;
}
public Cart ( int cid, Users uid, Product pid, int pnum) {
this . cid = cid;
this . uid = uid;
this . pid = pid;
this . pnum = pnum;
}
public int getCid ( ) {
return cid;
}
public void setCid ( int cid) {
this . cid = cid;
}
public Users getUid ( ) {
return uid;
}
public void setUid ( Users uid) {
this . uid = uid;
}
public Product getPid ( ) {
return pid;
}
public void setPid ( Product pid) {
this . pid = pid;
}
public int getPnum ( ) {
return pnum;
}
public void setPnum ( int pnum) {
this . pnum = pnum;
}
}
购物车业务逻辑(CartService)
购物车业务逻辑写了两个方法,分别用来实现添加购物车(存入数据库)以及显示购物车信息(取出数据库) 1、添加购物车(addCart),通过insert语句,将用户id、产品id以及产品数量插入到购物车数据库表 2、显示数据库中的购物车信息(getMyCart),查询出符合当前登录用户id的所有购物车信息以及需要的产品信息,将其加入到list对象中,最后成功将其返回
package com. lazy. service;
import com. lazy. domain. Cart;
import com. lazy. domain. Product;
import com. lazy. domain. Users;
import com. lazy. tools. DBHelper;
import java. util. ArrayList;
import java. util. List;
import java. util. Map;
public class CartService {
private String sql = "" ;
public boolean addCart ( Cart parCart) {
sql = "insert into carts(uid,pid,pnum)values(" +
parCart. getUid ( ) . getUid ( ) +
"," + parCart. getPid ( ) . getPid ( ) +
"," + parCart. getPnum ( ) + ")" ;
int flag = DBHelper. executeUpdata ( sql) ;
if ( flag <= 0 ) {
return false ;
}
return true ;
}
public List< Cart> getMyCart ( Users users) {
sql = "SELECT c.cid,c.pid,p.pname,p.pprice,c.pnum " +
"FROM carts c INNER JOIN products p on c.pid=p.pid " +
"WHERE c.uid = " + users. getUid ( ) ;
List< Map< String, Object> > data = DBHelper. query ( sql) ;
List< Cart> carts = new ArrayList < > ( ) ;
for ( Map< String, Object> row : data) {
int cid = Integer. parseInt ( row. get ( "cid" ) . toString ( ) ) ;
int pid = Integer. parseInt ( row. get ( "pid" ) . toString ( ) ) ;
float pprice = Float. parseFloat ( row. get ( "pprice" ) . toString ( ) ) ;
String pname = row. get ( "pname" ) . toString ( ) ;
int pnum = Integer. parseInt ( row. get ( "pnum" ) . toString ( ) ) ;
Product product = new Product ( pid, pname, pprice) ;
Cart myCart = new Cart ( cid, users, product, pnum) ;
carts. add ( myCart) ;
}
return carts;
}
}
加入购物车(AddCartAction)
1、获取product.jsp页面中传来的pid 2、调用产品业务逻辑,返回符合条件的产品对象 3、获取登录的用户session 4、创建cart对象,调用购物车业务逻辑,进行添加购物车操作 5、为了符合mvc三层架构的设计,重定向至显示购物信息的Servlet
package com. lazy. servlet;
import com. lazy. domain. Cart;
import com. lazy. domain. Product;
import com. lazy. domain. Users;
import com. lazy. service. CartService;
import com. lazy. service. ProductService;
import javax. servlet. ServletException;
import javax. servlet. http. HttpServlet;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
import javax. servlet. http. HttpSession;
import java. io. IOException;
public class AddCartAction extends HttpServlet {
@Override
protected void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pid = request. getParameter ( "pid" ) ;
ProductService ps = new ProductService ( ) ;
Product product = ps. findByProductId ( pid) ;
HttpSession session = request. getSession ( ) ;
Users myUser = ( Users) session. getAttribute ( "user" ) ;
Cart myCart = new Cart ( myUser, product, 1 ) ;
CartService cartService = new CartService ( ) ;
cartService. addCart ( myCart) ;
response. sendRedirect ( "/myCart.do" ) ;
}
@Override
protected void doPost ( HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this . doGet ( req, resp) ;
}
}
显示当前用户的购物车信息(MyCartAction)
1、获取当前用户的session 2、调用购物车业务逻辑,获取当前用户的所有购物车信息 3、将返回的carts对象写入session,重定向至购物车显示页面(mycart.jsp)
package com. lazy. servlet;
import com. lazy. domain. Cart;
import com. lazy. domain. Users;
import com. lazy. service. CartService;
import javax. servlet. ServletException;
import javax. servlet. http. HttpServlet;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
import javax. servlet. http. HttpSession;
import java. io. IOException;
import java. util. List;
public class MyCartAction extends HttpServlet {
@Override
protected void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request. getSession ( ) ;
Users myUser = ( Users) session. getAttribute ( "user" ) ;
CartService cs = new CartService ( ) ;
List< Cart> carts = cs. getMyCart ( myUser) ;
session. setAttribute ( "mycarts" , carts) ;
response. sendRedirect ( "mycart.jsp" ) ;
}
@Override
protected void doPost ( HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this . doGet ( req, resp) ;
}
}
显示购物车信息页面(mycart.jsp)
< % @ page import = "com.lazy.domain.Cart" % >
< % @ page import = "java.util.List" % >
< % --
Created by IntelliJ IDEA.
User: lazytom
Date: 2020 / 9 / 23
Time: 14 : 40
To change this template use File | Settings | File Templates.
-- % >
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< html>
< head>
< title> Title< / title>
< / head>
< body>
< table border= "1" >
< tr>
< td> 产品名称< / td>
< td> 产品单价< / td>
< td> 产品数量< / td>
< td> 小计< / td>
< / tr>
< %
List< Cart> carts = ( List< Cart> ) session. getAttribute ( "mycarts" ) ;
for ( Cart c: carts) {
% >
< tr>
< td> < %= c. getPid ( ) . getPname ( ) % > < / td>
< td> < %= c. getPid ( ) . getPprice ( ) % > < / td>
< td> < %= c. getPnum ( ) % > < / td>
< td> < %= c. getPid ( ) . getPprice ( ) * c. getPnum ( ) % > < / td>
< / tr>
< %
}
% >
< / table>
< / body>
< / html>
二、实现效果图