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层
- userdao
package com.goods.dao;
import com.goods.pojo.User;
public interface IUserDao {
//登录方法
User login(User user);
}
- goodsdao
package com.goods.dao;
import java.util.List;
import com.goods.pojo.Goods;
public interface IGoodsDao {
List<Goods> list();
Goods one(int id);
}
- 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);
}
- 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
- 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;
}
}
- 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;
}
}
- 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;
}
}
- 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层
- goodsbiz
package com.goods.biz;
import java.util.List;
import com.goods.pojo.Goods;
public interface IGoodsBiz {
List<Goods> list();
//
Goods one(int id);
}
- userbiz
package com.goods.biz;
import com.goods.pojo.User;
public interface IUserBiz {
// 登录方法
User login(User user);
}
- 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);
}
- 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
- 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;
}
}
- 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);
}
}
- 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);
}
}
- 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(数据处理)
- 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);
}
}
- 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");
}
}
- 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");
// 没有
}
}
- 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");
}
}
- 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");
}
}
- 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);
}
}
- 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");
}
}
}
- 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);
}
}
- 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(实体类)
- 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
}
}
- 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
}
}
- 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
}
}
- 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的框架