MVC购物车

MVC购物车项目:
(拿码请留赞与关注)

一,html界面:

1,login.jsp(登录界面)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/css/bootstrap.css">
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist\js\bootstrap.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">

<title>登录界面</title>
<style>
form {
	width: 500px;
	margin: auto;	
	
}
</style>
</head>
<body>
	<form action="login.do" method="post">
		<h1>登录</h1>
		<div class="form-group">
			<input name="account" class="form-control" placeholder="用户名">
		</div>
		<div class="form-group">
			<input name="password" class="form-control" placeholder="密码" type="password">
		</div>
		<div class="form-group">
			<button class="btn btn-primary btn-block">登录</button>
		</div>
	</form>

</body>
</html>

2,index.jsp(商城界面)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css">
<script
	src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
<script
	src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist\js\bootstrap.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
body {
	padding: 20px 40px;
}
</style>
</head>
<body>
<c:if test="${list==null}">
<c:redirect url="index.do"></c:redirect>
</c:if>
	<h1>
		${user.account}您好, <small>这是首页</small>
	</h1>
	<h1>
		<a class="btn btn-primary" href="car.jsp">点我去购物车🛒</a>
	</h1>
	<table class="table table-bordered table-striped">
		<tbody>
			<tr>
				<th>商品编号</th>
				<th>商品名称</th>
				<th>商品描述</th>
				<th>商品价格</th>
			    <th>商品操作</th>
			</tr>
			<c:forEach items="${list}" var="goods">
				<tr>
					<td>${goods.id}</td>
					<td>${goods.name}</td>
					<td>${goods.describe}</td>
					<td>${goods.price}</td>
					<td><a href="add.do?id=${goods.id}" class="btn btn-default">加入🚗</a>
				</tr>
			</c:forEach>
		</tbody>
	</table>

</body>
</html>

3,car.jsp(购物车界面)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css">
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist\js\bootstrap.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>我的购物车</title>
</head>
<body>
<div class="container">
	<h1>
		${user.account}您好, <small>这是首页</small>
	</h1>
	<h1>
		<a href="index.do"  class="btn btn-default">继续购买</a>
		<a href="calc.do"   class="btn btn-default">订单结算</a>
		<a href="order.do" class="btn btn-default">查看订单</a>
		<a href="clear.do"  class="btn btn-default">清空购物车</a>
	</h1>
	<table class="table table-bordered table-striped">
		<tbody>
		<tr>
		    <th>商品编号</th>
			<th>商品名字</th>
			<th>商品数量</th>
			<th>商品总价</th>
			<th>商品操作</th>
		</tr>
		<c:forEach items="${car}" var="item">
		<tr>
			<td>${item.goods.id}</td>
			<td>${item.goods.name}</td>
			<td>${item.quantity}</td>
			<td>${item.total}</td>
			<td>
			<a href="upd.do?id=${item.goods.id}&type=1" class="btn btn-default">+1</a>
			<a href="del.do?id=${item.goods.id}" class="btn btn-default">删除</a>
			<a href="upd.do?id=${item.goods.id}&type=-1" class="btn btn-default">-1</a>
			</td>
		</tr>
		</c:forEach>
	</tbody>
	</table>
	<h1> 总价:${total}</h1>
	</div>

</body></html>

4,item.jsp(订单项界面)

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${list==null}">
<c:redirect url="item.do"></c:redirect>
</c:if>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css">
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist\js\bootstrap.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>我的订单项</title>
</head>
<body>
	
	<div class="container">
		
		<h1> ${user.account}您好, <small>这是订单项界面</small>
	</h1>
	<h1>
		<a href="index.do" class="btn btn-default">继续购买</a>
		<a href="car.jsp" class="btn btn-default">返回购物车</a>
	</h1>
	<table class="table table-bordered table-striped">
		<tbody>
		<tr>
			<th>订单项编号</th>
			<th>订单项商品名称</th>
			<th>订单项商品单价</th>
			<th>订单项商品数量</th>
			<th>订单项商品总价</th>
		</tr>
		<c:forEach items="${list}" var="item">
			<tr>
				<td>${item.id}</td>
				<td>${item.goods.name}</td>
				<td>${item.goods.price}</td>
				<td>${item.quantity}</td>
				<td>${item.total}</td>
			</tr>
		</c:forEach>
	</tbody>
	</table>
	</div>
</body></html>

5,order.jsp订单界面

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${list==null}">
<c:redirect url="index.do"></c:redirect>
</c:if>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css">
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist\js\bootstrap.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>我的订单</title>
</head>
<body>
	
	<div class="container">
		
		<h1> ${user.account}您好, <small>这是订单界面</small>
	</h1>
	<h1>
		<a href="index.do" class="btn btn-default">继续购买</a>
		<a href="car.jsp" class="btn btn-default">返回购物车</a>
	</h1>
	<table class="table table-bordered table-striped">
		<tbody>
		<tr>
			<th>订单编号</th>
			<th>订单总价</th>
			<th>订单操作</th>
		</tr>
		<c:forEach items="${list}" var="order">
			<tr>
				<td>${order.id}</td>
				<td>${order.total}</td>
				<td><a href="item.do?id=${order.id}" class="btn btn-default">查看详情</a></td>
			</tr>
		</c:forEach>
	</tbody>
	</table>
	</div>
</body></html>

二,dao层

  1. userdao
package com.goods.dao;

import com.goods.pojo.User;

public interface IUserDao {
//登录方法
	User login(User user);

}

  1. goodsdao
package com.goods.dao;

import java.util.List;

import com.goods.pojo.Goods;

public interface IGoodsDao {

	List<Goods> list();

	Goods one(int id);

}

  1. orderdao
package com.goods.dao;

import java.util.List;

import com.goods.pojo.Order;

public interface IOrderDao {

	int maxPK();

	int insert(Order order);

	List<Order> list(int userId);

}

  1. orderitemdao
package com.goods.dao;

import java.util.List;

import com.goods.pojo.Order;
import com.goods.pojo.OrderItem;

public interface IOrderImplDao {

	int maxPK();

	int insert(OrderItem item);

	List<OrderItem> list(Integer id);

}

三,daoimpl

  1. userdaoimpl
package com.goods.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.goods.dao.IUserDao;
import com.goods.pojo.User;
import com.goods.uitl.DBHepler;

public class UserDaoImpl implements IUserDao {
	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;

	@Override
	public User login(User user) {
		try {
			con = DBHepler.getCon();
			ps = con.prepareStatement("select * from car_user where account=?");
			ps.setString(1, user.getAccount());
			rs = ps.executeQuery();
			if (rs.next()) {
				User u = new User();
				u.setId(rs.getInt(1));
				u.setAccount(rs.getString(2));
				u.setPassword(rs.getString(3));
				return u;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHepler.close(con, ps, rs);
		}

		return null;
	}
}

  1. goodsdaoimpl
package com.goods.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.goods.dao.IGoodsDao;
import com.goods.pojo.Goods;
import com.goods.uitl.DBHepler;

public class GoodsDaoImpl implements IGoodsDao {

	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;

	@Override
	public List<Goods> list() {
		List<Goods> list = new ArrayList<Goods>();
		try {
			con = DBHepler.getCon();
			ps = con.prepareStatement("select * from car_goods");
			rs = ps.executeQuery();
			while (rs.next()) {
				Goods goods = new Goods();
				goods.setId(rs.getInt(1));
				goods.setName(rs.getString(2));
				goods.setDescribe(rs.getString(3));
				goods.setPrice(rs.getInt(4));
				list.add(goods);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHepler.close(con, ps, rs);
		}
		return list;

	}

	@Override
	public Goods one(int id) {
		try {
			con = DBHepler.getCon();
			ps = con.prepareStatement("select * from car_goods where id=? ");
			ps.setInt(1, id);
			rs = ps.executeQuery();
			if (rs.next()) {
				Goods goods = new Goods();
				goods.setId(rs.getInt(1));
				goods.setName(rs.getString(2));
				goods.setDescribe(rs.getString(3));
				goods.setPrice(rs.getInt(4));
				return goods;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHepler.close(con, ps, rs);
		}
		return null;

	}
}

  1. orderdaoimpl
package com.goods.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.goods.dao.IOrderDao;
import com.goods.pojo.Goods;
import com.goods.pojo.Order;
import com.goods.uitl.DBHepler;

public class OrderDaoImpl implements IOrderDao {

	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;

	@Override
	public int maxPK() {
		try {
			con = DBHepler.getCon();
			ps = con.prepareStatement("select nvl(max(id),0)+1 from car_order");
			rs = ps.executeQuery();
			if (rs.next()) {
				return rs.getInt(1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHepler.close(con, ps, rs);
		}
		return 0;
	}

	@Override
	public int insert(Order order) {
		try {
			con = DBHepler.getCon();
			ps = con.prepareStatement("insert into car_order values(?,?,?)");
			ps.setInt(1, order.getId());
			ps.setInt(2, order.getUserId());
			ps.setInt(3, order.getTotal());
			return ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHepler.close(con, ps, rs);
		}
		return 0;
	}

	@Override
	public List<Order> list(int userId) {
		List<Order> list = new ArrayList<>();
		try {
			con = DBHepler.getCon();
			ps = con.prepareStatement("select * from car_order where user_id=?");
			ps.setInt(1, userId);
			rs = ps.executeQuery();
			while (rs.next()) {
				Order order = new Order();
				order.setId(rs.getInt(1));
				order.setUserId(rs.getInt(2));
				order.setTotal(rs.getInt(3));
				list.add(order);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHepler.close(con, ps, rs);
		}
		return list;
	}
}

  1. orderitemdaoimpl
package com.goods.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.goods.dao.IGoodsDao;
import com.goods.dao.IOrderImplDao;
import com.goods.pojo.OrderItem;
import com.goods.uitl.DBHepler;

public class OrderitemDaoImpl implements IOrderImplDao {

	private IGoodsDao goodsDao = new GoodsDaoImpl();

	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;

	@Override
	public int maxPK() {
		try {
			con = DBHepler.getCon();
			ps = con.prepareStatement("select nvl(max(id),0)+1 from car_order_item");
			rs = ps.executeQuery();
			if (rs.next()) {
				return rs.getInt(1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHepler.close(con, ps, rs);
		}
		return 0;
	}

	@Override
	public int insert(OrderItem item) {
		try {
			con = DBHepler.getCon();
			ps = con.prepareStatement("insert into car_order_item values(?,?,?,?,?)");
			ps.setInt(1, item.getId());
			ps.setInt(2, item.getOrderId());
			ps.setInt(3, item.getGoods().getId());
			ps.setInt(4, item.getQuantity());
			ps.setInt(5, item.getTotal());
			return ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHepler.close(con, ps, rs);
		}
		return 0;
	}

	@Override
	public List<OrderItem> list(Integer orderId) {
		List<OrderItem> list = new ArrayList<OrderItem>();
		try {
			con = DBHepler.getCon();
			ps = con.prepareStatement("select * from car_order_item where order_id=?");
			ps.setInt(1, orderId);
			rs = ps.executeQuery();
			while (rs.next()) {
				OrderItem item = new OrderItem();
				item.setId(rs.getInt(1));
				item.setOrderId(rs.getInt(2));
				item.setGoods(goodsDao.one(rs.getInt(3)));
				item.setQuantity(rs.getInt(4));
				item.setTotal(rs.getInt(5));
				list.add(item);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHepler.close(con, ps, rs);
		}
		return list;
	}
}

四,biz层

  1. goodsbiz
package com.goods.biz;

import java.util.List;

import com.goods.pojo.Goods;

public interface IGoodsBiz {

	List<Goods> list();
	
	//
	Goods one(int id);
}

  1. userbiz
package com.goods.biz;

import com.goods.pojo.User;

public interface IUserBiz {
	// 登录方法
	User login(User user);

}

  1. orderbiz
package com.goods.biz;

import java.util.List;

import com.goods.pojo.Order;

public interface IOrderBiz {
	int maxPK();

	int insert(Order order);

	List<Order> list(int userId);
}
  1. orderitembiz
package com.goods.biz;

import java.util.List;

import com.goods.pojo.OrderItem;

public interface IOrderImplBiz {

	int maxPK();

	int insert(OrderItem item);

	List<OrderItem> list(Integer id);

}

五,bizimpl

  1. userbizimpl
package com.goods.biz.impl;

import org.apache.commons.codec.digest.DigestUtils;

import com.goods.biz.IUserBiz;
import com.goods.dao.IUserDao;
import com.goods.dao.impl.UserDaoImpl;
import com.goods.pojo.User;

public class UserBizImpl implements IUserBiz {
	// 调用dao
	private IUserDao userdao = new UserDaoImpl();

	@Override
	public User login(User user) {
		// u 数据库中的对象
		// user 用户前端传过来的
		User u =userdao.login(user);
		// 无账号
		if (u == null) {
			return null;
		}
		// 密码加密
		String pwd = DigestUtils.md5Hex(user.getPassword());
		// 密码错误
		if (!u.getPassword().equals(pwd)) {
			return null;
		}
		return u;
	}
}

  1. goodsbizimpl
package com.goods.biz.impl;

import java.util.List;

import com.goods.biz.IGoodsBiz;
import com.goods.dao.IGoodsDao;
import com.goods.dao.impl.GoodsDaoImpl;
import com.goods.pojo.Goods;

public class GoodsBizImpl implements IGoodsBiz {
	private IGoodsDao goodsdao = new GoodsDaoImpl();

	@Override
	public List<Goods> list() {

		return goodsdao.list();
	}

	@Override
	public Goods one(int id) {
		// TODO Auto-generated method stub
		return goodsdao.one(id);
	}
}

  1. orderbizimpl
package com.goods.biz.impl;

import java.util.List;

import com.goods.biz.IOrderBiz;
import com.goods.dao.IOrderDao;
import com.goods.dao.impl.OrderDaoImpl;
import com.goods.pojo.Order;

public class OrderBizImpl implements IOrderBiz {

	private IOrderDao orderdao = new OrderDaoImpl();

	@Override
	public int maxPK() {
		// TODO Auto-generated method stub
		return orderdao.maxPK();
	}

	@Override
	public int insert(Order order) {
		return orderdao.insert(order);
	}
	@Override
	public List<Order> list(int userId) {
		// TODO Auto-generated method stub
		return orderdao.list(userId);
	}

}

  1. orderitembizimpl
package com.goods.biz.impl;

import java.util.List;

import com.goods.biz.IOrderImplBiz;
import com.goods.dao.IOrderImplDao;
import com.goods.dao.impl.OrderDaoImpl;
import com.goods.dao.impl.OrderitemDaoImpl;
import com.goods.pojo.OrderItem;

public class OrderImplBizImpl implements IOrderImplBiz {

	private IOrderImplDao orderimpldao = new OrderitemDaoImpl();

	@Override
	public int maxPK() {
		// TODO Auto-generated method stub
		return orderimpldao.maxPK();
	}

	@Override
	public int insert(OrderItem item) {
		// TODO Auto-generated method stub
		return orderimpldao.insert(item);
	}

	@Override
	public List<OrderItem> list(Integer id) {
		return orderimpldao.list(id);
	}
}

六,Filter(登录过滤器)

package com.goods.filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter("/*") // 所有的请求都会被拦截
public class LoginFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 集合内放你不需要拦截的路径
		List<String> list = new ArrayList<String>();
		{
			list.add("login.jsp");
			list.add("login.do");
			list.add(".css");
			list.add(".js");
		}
		// 强转
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
		// 获取页面路径
		String path = req.getServletPath();
		// 会带"/"
		// 遍历list集合
		boolean f = false;
		for (String p : list) {
			if (path.endsWith(p)) {
				f = true;
				break;
			}
		}
		//
		if (f) {
			chain.doFilter(request, response);// 放行
			return;
		}

		// 根据判断是否登录【g根据session中是否有user来判断】
		Object user = req.getSession().getAttribute("user");
		if (user == null) {
			System.out.println("失败");
			resp.sendRedirect("login.jsp");
			return;
		} else {
			chain.doFilter(request, response);// 放行
		}

	}

}

七,servlet(数据处理)

  1. IndexServlet
package com.goods.servlet;

import java.io.IOException;
import java.util.List;

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 com.goods.biz.IGoodsBiz;
import com.goods.biz.impl.GoodsBizImpl;
import com.goods.pojo.Goods;

@WebServlet("/index.do")
public class IndexServlet extends HttpServlet {

	private IGoodsBiz goodsbiz = new GoodsBizImpl();

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 取到biz的数据
		List<Goods> list = goodsbiz.list();
		// 通过转发吧数据发到index
		req.setAttribute("list", list);
		//
		req.getRequestDispatcher("index.jsp").forward(req, resp);
	}

}

  1. AddServlet
package com.goods.servlet;

import java.io.IOException;
import java.util.List;

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 com.goods.biz.IGoodsBiz;
import com.goods.biz.impl.GoodsBizImpl;
import com.goods.pojo.Goods;
import com.goods.pojo.OrderItem;

@WebServlet("/add.do")
public class AddServlet extends HttpServlet {
	  private IGoodsBiz GoodsBiz = new GoodsBizImpl();

	    @Override
	    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	        doPost(req, resp);
	    }

	    @Override
	    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	        //购物车在哪里?
	        List<OrderItem> car = (List<OrderItem>) req.getSession().getAttribute("car");
	        //是哪件商品?需要用户带一个商品的id
	        int id = Integer.parseInt(req.getParameter("id"));
	        //购物车中已经有了,数量+1
	        boolean f = true;
	        for (OrderItem item : car) {
	            // item就是订单项,订单项中有一个与他对应的商品
	            if (item.getGoods().getId().equals(id)) {
	                //数量+1
	                item.setQuantity(item.getQuantity() + 1);
	                //价格需要重新计算
	                item.setTotal(item.getQuantity() * item.getGoods().getPrice());
	                f = false;
	                break;
	            }
	        }
	        //购物车中没有,添加购物车
	        if (f) {
	            //生成了订单项
	            OrderItem item = new OrderItem();
	            //根据商品的id去数据库查出这件商品
	            Goods one = GoodsBiz.one(id);
	            item.setGoods(one);
	            item.setQuantity(1);
	            item.setTotal(one.getPrice());
	            //添加订单项到购物车
	            car.add(item);
	        }
	        req.getSession().setAttribute("total", car.stream()
	                .mapToInt(OrderItem::getTotal)
	                .sum());
	        //返回首页
	        resp.sendRedirect("index.do");
	    }

}

  1. CalcServlet
package com.goods.servlet;

import java.io.IOException;
/**
 * 订单结算的功能
 */
import java.util.List;

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 com.goods.biz.IOrderBiz;
import com.goods.biz.IOrderImplBiz;
import com.goods.biz.impl.OrderBizImpl;
import com.goods.biz.impl.OrderImplBizImpl;
import com.goods.pojo.Goods;
import com.goods.pojo.Order;
import com.goods.pojo.OrderItem;
import com.goods.pojo.User;

@WebServlet("/calc.do")
public class CalcServlet extends HttpServlet {

	private IOrderBiz orderbiz = new OrderBizImpl();
	private IOrderImplBiz orderitmbiz = new OrderImplBizImpl();

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 购物车在哪里?
		List<OrderItem> car = (List<OrderItem>) req.getSession().getAttribute("car");
		//
		int sum = 0;
		for (OrderItem item : car) {
			sum += item.getTotal();
		}
		// 吧数据插到订单,订单项中
		User user = (User) req.getSession().getAttribute("user");
		if (car.isEmpty()) {
			// 返回首页
			resp.sendRedirect("car.jsp");
			return;
		}

		// 优先结算订单
		Order order = new Order();
		order.setId(orderbiz.maxPK());
		order.setUserId(user.getId());
		order.setTotal(sum);

		int i = orderbiz.insert(order);
		if (i > 0) {
			// 如果订单插入成功了,则插入订单项
			for (OrderItem item : car) {
				// item没有id
				item.setId(orderitmbiz.maxPK());
				// 也没有订单编号
				item.setOrderId(order.getId());
				orderitmbiz.insert(item);
			}
			// 结算完毕
			car.clear();
			// 清空价格
			req.getSession().setAttribute("total", 0);
		}

		// 返回首页
		resp.sendRedirect("car.jsp");
		// 没有

	}

}

  1. ClearServlet
package com.goods.servlet;

import java.io.IOException;
import java.util.List;

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 com.goods.biz.IGoodsBiz;
import com.goods.biz.impl.GoodsBizImpl;
import com.goods.pojo.Goods;
import com.goods.pojo.OrderItem;

@WebServlet("/clear.do")
public class ClearServlet extends HttpServlet {
	private IGoodsBiz GoodsBiz = new GoodsBizImpl();

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 购物车在哪里?
		List<OrderItem> car = (List<OrderItem>) req.getSession().getAttribute("car");
		car.clear();
		//
		resp.sendRedirect("index.do");
	}

}

  1. Delservlet
package com.goods.servlet;

import java.io.IOException;
import java.util.List;

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 com.goods.pojo.Goods;
import com.goods.pojo.OrderItem;

@WebServlet("/del.do")
public class Delservlet extends HttpServlet {
	 @Override
	    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	        doPost(req, resp);
	    }

	    @Override
	    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	        //购物车在哪里?
	        List<OrderItem> car = (List<OrderItem>)req.getSession().getAttribute("car");
	        //是哪件商品?需要用户带一个商品的id
	        int id = Integer.parseInt(req.getParameter("id"));
	        //购物车中已经有了,删除
	        OrderItem i=null;
	        for (OrderItem item : car) {
	            // item就是订单项,订单项中有一个与他对应的商品
	            if(item.getGoods().getId().equals(id)){
	                //你就是我要删除的
	                i=item;
	                break;
	            }
	        }
	        car.remove(i);
	        req.getSession().setAttribute("total",car.stream()
	                .mapToInt(OrderItem::getTotal)
	                .sum());
	        //返回首页
	        resp.sendRedirect("car.jsp");
	    }

}

  1. ItemServlet
package com.goods.servlet;

import java.io.IOException;
/**
 * 订单结算的功能
 */
import java.util.List;

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 com.goods.biz.IOrderBiz;
import com.goods.biz.IOrderImplBiz;
import com.goods.biz.impl.OrderBizImpl;
import com.goods.biz.impl.OrderImplBizImpl;
import com.goods.dao.IOrderDao;
import com.goods.dao.impl.OrderDaoImpl;
import com.goods.pojo.Goods;
import com.goods.pojo.Order;
import com.goods.pojo.OrderItem;
import com.goods.pojo.User;

@WebServlet("/item.do")
public class ItemServlet extends HttpServlet {

	private IOrderImplBiz orderItemBiz = new OrderImplBizImpl();

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 购物车在哪里?
		Integer id = Integer.parseInt(req.getParameter("id"));

		List<OrderItem> list = orderItemBiz.list(id);
		// 放到作用域
		req.setAttribute("list", list);
		// 返回首页
		req.getRequestDispatcher("item.jsp").forward(req, resp);

	}

}

  1. LoginServlet
package com.goods.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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 com.goods.biz.IUserBiz;
import com.goods.biz.impl.UserBizImpl;
import com.goods.pojo.OrderItem;
import com.goods.pojo.User;

/**
 * 
 * @author 荞荞 实现登录功能
 */
@SuppressWarnings("all")
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
	// 调biz
	private IUserBiz userbiz = new UserBizImpl();

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("good");
		req.setCharacterEncoding("utf-8");
		String account = req.getParameter("account");
		String password = req.getParameter("password");
		// 将拿到的值封装到一个对象
		User user = new User();
		user.setAccount(account);
		user.setPassword(password);
		// 把对象传过去
		User u = userbiz.login(user);

		//
		if (u == null) {
			resp.sendRedirect("login.jsp");
		} else {
			// 把用户放到session
			req.getSession().setAttribute("user", u);

			List<OrderItem> car = new ArrayList<OrderItem>();
			req.getSession().setAttribute("car", car);

			// 把总价放到session中
			req.getSession().setAttribute("total", 0);
			// 去主界面
			resp.sendRedirect("index.do");

		}

	}

}

  1. OrderServlet
package com.goods.servlet;

import java.io.IOException;
/**
 * 订单结算的功能
 */
import java.util.List;

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 com.goods.biz.IOrderBiz;
import com.goods.biz.IOrderImplBiz;
import com.goods.biz.impl.OrderBizImpl;
import com.goods.biz.impl.OrderImplBizImpl;
import com.goods.pojo.Goods;
import com.goods.pojo.Order;
import com.goods.pojo.OrderItem;
import com.goods.pojo.User;

@WebServlet("/order.do")
public class OrderServlet extends HttpServlet {

	private IOrderBiz orderBiz = new OrderBizImpl();

	@Override

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 用户
		User user = (User) req.getSession().getAttribute("user");
		//
	//	Integer id = Integer.parseInt(req.getParameter("id"));

		List<Order> list = orderBiz.list(user.getId());
		// 放到作用域
		req.setAttribute("list", list);
		// 返回首页
		req.getRequestDispatcher("order.jsp").forward(req, resp);

	}

}

  1. UpdServlet
package com.goods.servlet;

import java.io.IOException;
import java.util.List;

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 com.goods.pojo.Goods;
import com.goods.pojo.OrderItem;

@WebServlet("/upd.do")
public class UpdServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// 拿到购物车,转成list集合
		List<OrderItem> car = (List<OrderItem>) req.getSession().getAttribute("car");
		// 查询商品拿到id
		int id = Integer.parseInt(req.getParameter("id"));
		// type
		int type = Integer.parseInt(req.getParameter("type"));
		// 添加购物车
		// 有
		for (OrderItem item : car) {
            // item就是订单项,订单项中有一个与他对应的商品
            if(item.getGoods().getId().equals(id)){
                //数量+还是-
                int count = item.getQuantity() + type;
                if(count<1)count=1;//最少一个
                if(count>5)count=5;//最多5个
                item.setQuantity(count);
                //价格需要重新计算
              item.setTotal(item.getQuantity()*item.getGoods().getPrice());
                req.getSession().setAttribute("total",car.stream()
                        .mapToInt(OrderItem::getTotal)
                        .sum());
                break;
            }
        }
//	返回首页
		resp.sendRedirect("car.jsp");

		// 没有

	}

}

八,pojo(实体类)

  1. order
package com.goods.pojo;

public class Order {
	private Integer id;
	private Integer userId;
	private Integer total;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getUserId() {
		return userId;
	}

	public void setUserId(Integer userId) {
		this.userId = userId;
	}

	public Integer getTotal() {
		return total;
	}

	public void setTotal(Integer total) {
		this.total = total;
	}

	public Order(Integer id, Integer userId, Integer total) {
		super();
		this.id = id;
		this.userId = userId;
		this.total = total;
	}

	@Override
	public String toString() {
		return "Order [id=" + id + ", userId=" + userId + ", total=" + total + "]";
	}

	public Order() {
		// TODO Auto-generated constructor stub
	}

}

  1. orderitem
package com.goods.pojo;

/**
 * 
 * @author 荞荞
 *
 *       订单项实体类
 */
public class OrderItem {

	private Integer id;
	private Integer orderId;
	private Goods goods;
	private Integer quantity;
	private Integer total;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getOrderId() {
		return orderId;
	}

	public void setOrderId(Integer orderId) {
		this.orderId = orderId;
	}

	public Goods getGoods() {
		return goods;
	}

	public void setGoods(Goods goods) {
		this.goods = goods;
	}

	public Integer getQuantity() {
		return quantity;
	}

	public void setQuantity(Integer quantity) {
		this.quantity = quantity;
	}

	public Integer getTotal() {
		return total;
	}

	public void setTotal(Integer total) {
		this.total = total;
	}

	@Override
	public String toString() {
		return "OrderItem [id=" + id + ", orderId=" + orderId + ", goods=" + goods + ", quantity=" + quantity
				+ ", total=" + total + ", getId()=" + getId() + ", getOrderId()=" + getOrderId() + ", getGoods()="
				+ getGoods() + ", getQuantity()=" + getQuantity() + ", getTotal()=" + getTotal() + ", getClass()="
				+ getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]";
	}

	public OrderItem(Integer id, Integer orderId, Goods goods, Integer quantity, Integer total) {
		super();
		this.id = id;
		this.orderId = orderId;
		this.goods = goods;
		this.quantity = quantity;
		this.total = total;
	}

	public OrderItem() {
		// TODO Auto-generated constructor stub
	}
}

  1. user
package com.goods.pojo;

/**
 * 
 * @author 荞荞
 *
 *         用户实体类
 */
public class User {

	private Integer id;
	private String account;
	private String password;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getAccount() {
		return account;
	}

	public void setAccount(String account) {
		this.account = account;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", account=" + account + ", password=" + password + "]";
	}

	public User(Integer id, String account, String password) {
		super();
		this.id = id;
		this.account = account;
		this.password = password;
	}

	public User() {
		// TODO Auto-generated constructor stub
	}

}

  1. goods
package com.goods.pojo;

/**
 * 
 * @author 荞荞
 * 
 *         商品实体类
 */
public class Goods {

	private Integer id;
	private String name;
	private String describe;
	private Integer price;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getDescribe() {
		return describe;
	}

	public void setDescribe(String describe) {
		this.describe = describe;
	}

	public Integer getPrice() {
		return price;
	}

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

	@Override
	public String toString() {
		return "Goods [id=" + id + ", name=" + name + ", describe=" + describe + ", price=" + price + "]";
	}

	public Goods(Integer id, String name, String describe, Integer price) {
		super();
		this.id = id;
		this.name = name;
		this.describe = describe;
		this.price = price;
	}

	public Goods() {
		// TODO Auto-generated constructor stub
	}

}

九,Oracle数据库语句

create table car_user
(
    id       number primary key,
    account  varchar2(30) not null,
    password varchar(32)  not null
);

comment on column car_user.ID is '用户编号';
comment on column car_user.account is '用户账户';
comment on column car_user.password is '用户密码(MD5)';

create table car_goods
(
    id       number primary key,
    name     varchar2(20)                        not null,
    describe varchar2(100) default '此商品暂时没有介绍����' not null,
    price    number                              not null
);

comment on column car_goods.ID is '商品编号';
comment on column car_goods.name is '商品名称';
comment on column car_goods.describe is '商品描述';
comment on column car_goods.price is '用户价格';

create table car_order
(
    id      number primary key,
    user_id number not null,
    total   number not null
);

comment on column car_order.ID is '订单编号';
comment on column car_order.user_id is '谁的订单!';
comment on column car_order.total is '订单总价';

create table car_order_item
(
    id       number primary key,
    order_id number not null,
    goods_id number not null,
    quantity number not null,
    total    number not null
);

comment on column car_order_item.ID is '订单项编号';
comment on column car_order_item.order_id is '哪个订单!';
comment on column car_order_item.goods_id is '哪个商品!';
comment on column car_order_item.quantity is '下单数量';
comment on column car_order_item.total is '订单项总价';

comment on table car_user is '购物车用户表';
comment on table car_goods is '购物车商品表';
comment on table car_order is '购物车订单表';
comment on table car_order_item is '购物车订单项表';

create unique index car_user_account_idx on car_user (account);

insert into car_user
values (1, 'root', 'ff9830c42660c1dd1942844f8069b74a');-- root123

insert into car_user
values (2, 'sa', 'e10adc3949ba59abbe56e057f20f883e');-- 123456

insert into car_goods
select 1, '草莓奶茶', '冰冰娘娘,很好喝', 99
from dual
union
select 2, '西瓜奶茶', '啊~,好冰冰', 29
from dual
union
select 3, '蜜雪大圣代', '可以加个桃桃����', 59
from dual
union
select 4, '咖啡', '人气最高', 88
from dual
union
select 5, '雪王咖啡', 'incredible taste', 999
from dual
union
select 6, '甜甜弹筒', '����,就亿点点', 1
from dual;

insert into car_order_item
values (1, 1, 1, 2, 99 * 2);
insert into car_order_item
values (2, 1, 2, 3, 29 * 3);
insert into car_order_item
values (3, 1, 6, 100, 100);

insert into car_order
values (1, 1, 99 * 2 + 29 * 3 + 100);

insert into car_order_item
values (4, 2, 3, 2, 59 * 2);
insert into car_order_item
values (5, 2, 4, 3, 88 * 3);
insert into car_order_item
values (6, 2, 5, 100, 999 * 100);

insert into car_order
values (2, 2, 59 * 2 + 88 * 3 + 999 * 100);

select *
from car_user;
select *
from car_order;
select *
from car_order_item;
select *
from car_goods;

十,项目整体包图

包图


包图


包图

总: 写完这些东西后,还需要写一个uitl包下的DBHepler提供连接数据库,然后还需要导入jstl,jQuery,Oracle等的jar包,还要提供bootstrap的框架

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值