javaweb之MVC购物车(加入购物车,订单,订单详情)

2023-11-13

MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

用MVC写购物车的优点:
1. 耦合性低,方便维护,可以利于分工协作

2. 重用性高
 


1、index.jsp(主界面)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!--通过taglib引入JSTL标准标签库  -->
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!--通过c标签判断是否在域对象中存在数据-->
	<c:if test="${empty listGoods }">
		<jsp:forward page="GoodsListServlet"></jsp:forward>
	</c:if>

	<h2 style="text-align:center">${users.username}购物首页</h2>
	<hr/>
	<p>欢迎您!大佬先生--${users.username}
	<button onclick="tc()">退出登录</button>
	</p>
	<table border="1" cellspacing="0" cellpadding="0" width="100%" >
		<tr>
			<th>商品编码</th>
			<th>商品名称</th>
			<th>商品价格</th>
			<th>操作</th>
		</tr>
		<!--通过c标签遍历数据  -->
		<c:forEach items="${listGoods}" var="goods">
			<tr>
				<td>${goods.gid}</td>
				<td>${goods.gname}</td>
				<td>${goods.gprice}</td>
				<td>
					<button onclick="addCart(${goods.gid})">加入购物车</button>
				</td>
			</tr>
		</c:forEach>
	</table>
	
	<script type="text/javascript">
	//加入购物车的点击事件
	function addCart(gid) {
		//alert(gid);
		window.location.href="AddCartServlet?gid="+gid;
	}
	
	function tc() {
		window.location.href="DownLoadServlt";
	}
	
	</script>
</body>
</html>

效果图:

 cart.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>Insert title here</title>
</head>
<body>
	<h1>我的购物车</h1>
	<p><a href="index.jsp">返回首页</a></p>
	<hr/>
	<table border="1" cellspacing="0" cellpadding="0" width="100%" >
		<tr>
			<th>购物车编码</th>
			<th>商品名称</th>
			<th>商品单价</th>
			<th>商品数量</th>
			<th>商品总价</th>
			<th>操作</th>
		</tr>
		<!--通过c标签遍历数据  -->
		<c:forEach items="${listCarts}" var="cart">
			<tr>
				<td>${cart.cid}</td>
				<td>${cart.goods.gname}</td>
				<td>${cart.goods.gprice}</td>
				<td>${cart.count}</td>
				<td>${cart.ctotal}</td>
				<td>
					<button>删除</button><button>修改</button>
				</td>
			</tr>
		</c:forEach>
	</table>
	
	<p style="text-align: right" onclick="buy()">
		<button>结算</button>
	</p>
	
	<script type="text/javascript">
	
		function buy() {
			location.href="FindCartInfoServlet";
		}
	
	
	
	</script>
	
	
	
	
</body>
</html>

效果图:

 3.cartfirm.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>Insert title here</title>
</head>
<body>
	<h3>确认订单</h3>
	<h6>确认收货地址</h6>
	<input id="oaddress" type="text" style="width: 100%;height: 40px"/>
	<br/><br/>
	<hr/>
	<h6>确认订单信息</h6>
	<p>
		商品总件数:${sessionScope.maps.sumCount }
	</p>
	
	<h6>商品信息</h6>
	<c:forEach items="${sessionScope.maps.cartByUsersid }" var="mycar">
		<p>
			<span>${mycar.goods.gname}</span>
		</p>
	</c:forEach>
	<hr/>
	<p>
		<h1>总金额:${sessionScope.maps.sumPrince}</h1>
	</p>
	<input type="button" value="支付" onclick="confirmorder()"/>
	<script type="text/javascript">
		function confirmorder() {
			var oaddress = document.getElementById("oaddress").value;
			if(!oaddress){
				alert("请输入地址在确认订单");
				return;
			}
			location.href="ConfirmOrderServlet?oaddress="+oaddress;
		}
	
	</script>
	
	
	
	
	
</body>
</html>

底层代码(dao方法)

GoodsDaoImpl.java

package com.zking.mvc.cart.dao.impl;

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

import com.zking.mvc.cart.dao.IGoodsDao;
import com.zking.mvc.cart.entity.Cart;
import com.zking.mvc.cart.entity.Goods;
import com.zking.mvc.cart.entity.OrderItem;
import com.zking.mvc.cart.entity.Users;
import com.zking.mvc.cart.utils.DBHelper;

public class GoodsDaoImpl implements IGoodsDao {

	@Override
	public List<Goods> queryGoodsAll() {
		
		//1.定义对应的三兄弟以及其他的相关变量
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "";
		Goods  goods = null;
		List<Goods> list = new ArrayList<Goods>();
		//2.给对应的对象以及变量赋值
		try {
			//获取连接
			conn = DBHelper.getCon();
			//sql
			sql = "select * from tb_goods";
			//执行SQL语句
			ps = conn.prepareStatement(sql);
			//返回结果集
			rs = ps.executeQuery();
			//遍历结果集
			while(rs.next()) {
				goods = new Goods();
				goods.setGid(rs.getInt(1));
				goods.setGname(rs.getString(2));
				goods.setGprice(rs.getInt(3));
				list.add(goods);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			DBHelper.myClo(conn, ps, rs);
		}
		//3.返回结果
		return list;
	}

	

	@Override
	public Goods getGoodsByGid(int gid) {
		//1.定义对应的三兄弟以及其他的相关变量
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "";
		Goods  goods = null;
		//2.给对应的对象以及变量赋值
		try {
			//获取连接
			conn = DBHelper.getCon();
			//sql
			sql = "select * from tb_goods where gid="+gid;
			//执行SQL语句
			ps = conn.prepareStatement(sql);
			//返回结果集
			rs = ps.executeQuery();
			//遍历结果集
			if(rs.next()) {
				goods = new Goods();
				goods.setGid(rs.getInt(1));
				goods.setGname(rs.getString(2));
				goods.setGprice(rs.getInt(3));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			DBHelper.myClo(conn, ps, rs);
		}
		//3.返回结果
		return goods;
	}



	@Override
	public int deleteGoods(int usersid) {
		// 1.定义对应的三兄弟以及其他的相关变量
				Connection conn = null;
				PreparedStatement ps = null;
				String sql = "";
				int n = 0;
				// 2.给对应的对象以及变量赋值
				try {
					// 获取连接
					conn = DBHelper.getCon();
					// sql
					sql = "delete tb_cart where userid="+usersid;
					// 执行SQL语句
					ps = conn.prepareStatement(sql);
					n = ps.executeUpdate();
				} catch (Exception e) {
					e.printStackTrace();
				} finally {
					DBHelper.myClo(conn, ps, null);
				}
				// 3.返回结果
				return n;
	}
	
	
	
	
	
}

CartDaoImpl.java

package com.zking.mvc.cart.dao.impl;

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

import com.zking.mvc.cart.dao.IcartDao;
import com.zking.mvc.cart.entity.Cart;
import com.zking.mvc.cart.entity.Goods;
import com.zking.mvc.cart.entity.Users;
import com.zking.mvc.cart.utils.DBHelper;

public class CartDaoImpl implements IcartDao {

	
	@Override
	public int addCart(Cart cart) {
		//1.定义对应的三兄弟以及其他的相关变量
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "";
		int n = 0;
		List<Goods> list = new ArrayList<Goods>();
		//2.给对应的对象以及变量赋值
		try {
			//获取连接
			conn = DBHelper.getCon();
			//sql
			sql ="insert into tb_cart " + " select nvl(max(cid),0)+1 ,?,?,?,? from tb_cart";
			//执行SQL语句
			ps = conn.prepareStatement(sql);
			ps.setInt(1, cart.getGoods().getGid());
			ps.setInt(2, cart.getUsers().getUserid());
			ps.setInt(3, cart.getCount());
			ps.setInt(4, cart.getCtotal());
			n=ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			DBHelper.myClo(conn, ps, null);
		}
		//3.返回结果
		return n;
	}

	@Override
	public List<Cart> getCartByUsersid(int userid) {
		//1.定义对应的三兄弟以及其他的相关变量
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "";
		Cart c = null;
		List<Cart> list =  new ArrayList<Cart>();
		ResultSet rs = null;
		//2.给对应的对象以及变量赋值
		try {
			//获取连接
			conn = DBHelper.getCon();
			//sql
			sql ="select * from tb_cart where userid = "+userid;
			ps = conn.prepareStatement(sql);
			//执行sql语句
			rs = ps.executeQuery();
			while(rs.next()) {
				c = new Cart();
				c.setCid(rs.getInt(1));
				c.setGoods(new GoodsDaoImpl().getGoodsByGid(rs.getInt(2)));
				//更新
				c.setUsers(new Users(rs.getInt(3),"zkingzz","123"));
				c.setCount(rs.getInt(4));
				c.setCtotal();
				list.add(c);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			DBHelper.myClo(conn, ps, null);
		}
		//3.返回结果
		return list;
	}

	@Override
	public int editCartByCidAndUserid(Cart cart) {
		//1.定义对应的三兄弟以及其他的相关变量
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "";
		int n = 0;
		List<Goods> list = new ArrayList<Goods>();
		//2.给对应的对象以及变量赋值
		try {
			//获取连接
			conn = DBHelper.getCon();
			//sql
			sql ="update tb_cart set ccount = ?,ctotal = ? where cid=? and userid = ?";
			//执行SQL语句
			ps = conn.prepareStatement(sql);
			ps.setInt(1, cart.getCount());
			ps.setInt(2, cart.getCtotal());
			ps.setInt(3, cart.getCid());
			ps.setInt(4, cart.getUsers().getUserid());
			n=ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			DBHelper.myClo(conn, ps, null);
		}
		//3.返回结果
		return n;
	}

	
}

OrderDao .java

package com.zking.mvc.cart.dao.impl;

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

import com.zking.mvc.cart.biz.IGoodsBiz;
import com.zking.mvc.cart.biz.impl.GoodsBizImpl;
import com.zking.mvc.cart.biz.impl.UserBizImpl;
import com.zking.mvc.cart.dao.IOrderDao;
import com.zking.mvc.cart.dao.IOrderItemDao;
import com.zking.mvc.cart.entity.Cart;
import com.zking.mvc.cart.entity.Order;
import com.zking.mvc.cart.entity.OrderItem;
import com.zking.mvc.cart.entity.Users;
import com.zking.mvc.cart.utils.DBHelper;

public class OrderDao implements IOrderDao {

	private IOrderItemDao iod = new OrderItemDaoItem();

	@Override
	public int add(Order o) {
		// 1.定义对应的三兄弟以及其他的相关变量
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "";
		int n = 0;
		// 2.给对应的对象以及变量赋值
		try {
			// 获取连接
			conn = DBHelper.getCon();
			// sql
			sql = "insert into orders " + " select nvl(max(id),0)+1 ,?,?,?,?,? from orders";
			// 执行SQL语句
			ps = conn.prepareStatement(sql);
			ps.setInt(1, o.getOrderid());
			ps.setInt(2, o.getUsers().getUserid());
			ps.setInt(3, o.getNum());
			ps.setInt(4, o.getPrice());
			ps.setInt(5, o.getOstate());

			n = ps.executeUpdate();
			if (n != 0) {
				if (o.getList() != null) {
					List<Cart> list = o.getList();
					for (Cart cart : list) {
						// 实例化
						OrderItem orderitem = new OrderItem();
						// 订单编号
						orderitem.setOrder(o);
						// 商品编号
						orderitem.setGood(cart.getGoods());
						// 商品数量
						orderitem.setNum(cart.getCount());
						// 单价
						orderitem.setPrice(cart.getCtotal());

						// 将这些商品保存到订单详情
						iod.addOrderItems(orderitem);

						// 生成订单的同时清空购物车
						IGoodsBiz ig = new GoodsBizImpl();

						ig.deleteGoods(cart.getUsers().getUserid());

					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHelper.myClo(conn, ps, null);
		}
		// 3.返回结果
		return n;
	}

	@Override
	public Order getall(int orderid) {
		// 1.定义对应的三兄弟以及其他的相关变量
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "";
		Order o=null;
		// 2.给对应的对象以及变量赋值
		try {
			// 获取连接
			conn = DBHelper.getCon();
			// sql
			sql = "select * from orders where orderid="+orderid;
			// 执行SQL语句
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			if(rs.next()) {
				o = new Order();
				o.setOrderid(rs.getInt(2));
				o.setUsers(new IUsersDaoImpl().getall(rs.getInt(3)));
				o.setNum(rs.getInt(4));
				o.setPrice(rs.getInt(5));
				o.setOstate(rs.getInt(6));
				o.setOaddress("浪琴湾");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHelper.myClo(conn, ps, null);
		}
		// 3.返回结果
		return o;
	}

	
}

OrderItemDaoItem .java

package com.zking.mvc.cart.dao.impl;

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

import com.zking.mvc.cart.dao.IOrderItemDao;
import com.zking.mvc.cart.entity.Cart;
import com.zking.mvc.cart.entity.OrderItem;
import com.zking.mvc.cart.utils.DBHelper;

public class OrderItemDaoItem implements IOrderItemDao {

	@Override
	public int addOrderItems(OrderItem orderitem) {
		// 1.定义对应的三兄弟以及其他的相关变量
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "";
		int n = 0;
		// 2.给对应的对象以及变量赋值
		try {
			// 获取连接
			conn = DBHelper.getCon();
			// sql
			sql = "insert into ordersitem " + " select nvl(max(id),0)+1 ,?,?,?,? from ordersitem";
			// 执行SQL语句
			ps = conn.prepareStatement(sql);
			ps.setInt(1, orderitem.getOrder().getOrderid());
			ps.setInt(2,orderitem.getGood().getGid());
			ps.setInt(3, orderitem.getNum());
			ps.setInt(4, orderitem.getPrice());
			n = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHelper.myClo(conn, ps, null);
		}
		// 3.返回结果
		return n;
	}
	
	
	@Override
	public List<OrderItem> getAll() {
		// 1.定义对应的三兄弟以及其他的相关变量
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "";
		ResultSet rs = null;
		List<OrderItem> lo = new ArrayList<OrderItem>();
		// 2.给对应的对象以及变量赋值
		try {
			// 获取连接
			conn = DBHelper.getCon();
			// sql
			sql = "select * from ordersitem ";
			// 执行SQL语句
			ps = conn.prepareStatement(sql);
			rs=ps.executeQuery();
			while(rs.next()) {
				OrderItem o = new OrderItem();
				o.setId(rs.getInt(1));
				o.setOrder(new OrderDao().getall(rs.getInt(2)));
				o.setGood(new GoodsDaoImpl().getGoodsByGid(rs.getInt(3)));
				o.setNum(rs.getInt(4));
				o.setPrice(rs.getInt(5));
				lo.add(o);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHelper.myClo(conn, ps, null);
		}
		// 3.返回结果
		return lo;
	}


}

servlet包

AddCartServlet .java

package com.zking.mvc.cart.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 javax.servlet.http.HttpSession;

import com.zking.mvc.cart.biz.ICartBiz;
import com.zking.mvc.cart.biz.IGoodsBiz;
import com.zking.mvc.cart.biz.impl.CartBizImpl;
import com.zking.mvc.cart.biz.impl.GoodsBizImpl;
import com.zking.mvc.cart.entity.Cart;
import com.zking.mvc.cart.entity.Goods;
import com.zking.mvc.cart.entity.Users;

/**
 * Servlet implementation class AddCartServlet
 */
@WebServlet("/AddCartServlet")
public class AddCartServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//jrebel  热部署插件
		//加入加购物车的servlet
		//System.out.println("进来了!");
		//1.设置字符集编码
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		//2.获取location带过来的gid
		String id = request.getParameter("gid");
		int gid = 0;
		if(null!=id) {
			gid = Integer.valueOf(id);
		}
		//数据封装
		Cart c = new Cart();
		//将gid Userid ccount ctotal 封装到cart实体对象中
		IGoodsBiz igb = new GoodsBizImpl();
		Goods goods = igb.getGoodsByGid(gid);
		
		//userid
		HttpSession session = request.getSession();
		Users users = (Users)session.getAttribute("users");
		
		c.setGoods(goods);
		c.setUsers(users);
		c.setCount(1);
		c.setCtotal();
		
		//System.out.println(c);
		
		//要想将封装好的购物车信息 保存到数据库中
		//先获取当前这个登录用户的购物车
		ICartBiz icb = new CartBizImpl();
		List<Cart> listCarts =  icb.getCartByUsersid(users.getUserid());
		//如果购物车List<Cart> listCarts = null;
		boolean flag = true;
		//如果该用户第一次进入 构建一个新的购物车 实例化
		if(null == listCarts ) {
			listCarts = new ArrayList<Cart>();
		}
		else {//非第一次
			//遍历所有的商品
			for (Cart cart : listCarts) {
				//判断当前加入的与购物车已有的进行匹配
				if(cart.getGoods().getGid() == c.getGoods().getGid()) {
					//不需要重复添加 修改数量和总价格
					cart.setCount(cart.getCount()+1);
					cart.setCtotal();
					//进行一个数据库的更新
					icb.editCartByCidAndUserid(cart);
					flag = false;
					break;
				}
			}
		}
		
		//问题:加入购物车 不是加入集合 而是加到数据库
		//listCarts.add(c);
		if(flag) {
			icb.addCart(c);
		}
		//加入后数据要继续更新
		listCarts =  icb.getCartByUsersid(users.getUserid());
		
		session.setAttribute("listCarts", listCarts);
		
		response.sendRedirect("cart.jsp");
		
	}

}

FindCartInfoServlet .java

package com.zking.mvc.cart.servlet;

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

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 javax.servlet.http.HttpSession;

import com.zking.mvc.cart.biz.ICartBiz;
import com.zking.mvc.cart.biz.impl.CartBizImpl;
import com.zking.mvc.cart.entity.Cart;
import com.zking.mvc.cart.entity.Users;

/**
 * Servlet implementation class FindCartInfoServlet
 */
@WebServlet("/FindCartInfoServlet")
public class FindCartInfoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1、设置字符集编码
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		//获取session
		HttpSession session = request.getSession();
		//用户
		Users users = (Users)session.getAttribute("users");
		
		//2、直接获取数据库
		ICartBiz icb = new CartBizImpl();
		List<Cart> cartByUsersid = icb.getCartByUsersid(users.getUserid());
		
		//总件数
		int sumCount = 0;
		int sumPrince = 0;
		//1.商品
		for (Cart cart : cartByUsersid) {
			sumCount +=cart.getCount();
			sumPrince +=cart.getCtotal();
		}
		
		Map<String, Object> maps = new HashMap<String,Object>();
		maps.put("cartByUsersid", cartByUsersid);
		maps.put("sumCount", sumCount);
		maps.put("sumPrince", sumPrince);
		
		session.setAttribute("maps", maps);
		
		response.sendRedirect("confirmOrder.jsp");
	}

}

GoodsListServlet .java

package com.zking.mvc.cart.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 javax.servlet.http.HttpSession;

import com.zking.mvc.cart.biz.IGoodsBiz;
import com.zking.mvc.cart.biz.impl.GoodsBizImpl;
import com.zking.mvc.cart.entity.Goods;
import com.zking.mvc.cart.entity.Users;

/**
 * Servlet implementation class GoodsListServlet
 */
@WebServlet("/GoodsListServlet")
public class GoodsListServlet extends HttpServlet {
	

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//servlet作用:负责处理用户的请求以及响应
		//1.设置字符集编码
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		//2.获取参数
		//3.封装 调用biz判断
		IGoodsBiz igb =  new GoodsBizImpl();
		List<Goods> listGoods = igb.queryGoodsAll();
		//System.out.println(listGoods);
		
		//数据保存在域对象中
		//获取域对象 session
		HttpSession session =  request.getSession();
		session.setAttribute("listGoods", listGoods);
		
		//获取当前项目的绝对路径
		String path =  request.getServletContext().getContextPath();// /web_mvc_cart_t280
		//4.响应
		response.sendRedirect("index.jsp");
		
	}

}

ConfirmOrderServlet .java

package com.zking.mvc.cart.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 javax.servlet.http.HttpSession;

import com.zking.mvc.cart.biz.ICartBiz;
import com.zking.mvc.cart.biz.IOrderbiz;
import com.zking.mvc.cart.biz.impl.CartBizImpl;
import com.zking.mvc.cart.biz.impl.OrderbizImpl;
import com.zking.mvc.cart.entity.Cart;
import com.zking.mvc.cart.entity.Order;
import com.zking.mvc.cart.entity.Users;
import com.zking.mvc.cart.utils.BaseDao;

/**
 * Servlet implementation class ConfirmOrderServlet
 */
@WebServlet("/ConfirmOrderServlet")
public class ConfirmOrderServlet extends HttpServlet {
	
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1、设置字符集编码
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
				
	//获取
		String oaddress = request.getParameter("oaddress");
		/*System.out.println(oaddress);*/
		
		//获取session
		HttpSession session = request.getSession();
		//用户
		Users users = (Users)session.getAttribute("users");
				
		//2、直接获取数据库
		ICartBiz icb = new CartBizImpl();
		List<Cart> cartByUsersid = icb.getCartByUsersid(users.getUserid());
				
		//总件数
		int sumCount = 0;
		int sumPrince = 0;
		//1.商品
		for (Cart cart : cartByUsersid) {
			sumCount +=cart.getCount();
			sumPrince +=cart.getCtotal();
		}
		
		//实例化实体类
		Order order = new Order(new BaseDao().getmaxid("orders", "orderid"),users, sumCount, sumPrince, oaddress, 0);
		order.setList(cartByUsersid);
		
		
		//实例化biz
		IOrderbiz io =new OrderbizImpl();
		int n = io.add(order);
		if(n>0) {
			System.out.println("支付成功");
			response.sendRedirect("Dd.jsp");
		}
		else {
			System.out.println("支付失败");
		}
		
	}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javaweb之MVC购物车(加入购物车,订单,订单详情) 的相关文章

  • 根据 $_POST 值填充字段

    我正在寻求有关我试图填写的表格的帮助 我通常会使用 onChange 函数 但我认为这不是一个选择 基本上我有一个
  • 将网页中的表格导入 Excel

    我只有中高级的Excel水平和中级的VBA与Excel背景 我想要做的是从链接中显示的网页导入表格 http www admission unmsm edu pe res20130914 A 011 0 html http www admi
  • 从网站获取数据的vba代码

    我是这个网站和 VBA 编程的新手 我遇到了一个问题 我必须从中获取数据这一页 http www kieskeurig nl zoeken index html q 4960999543345 我需要有超链接网址Check Rates 10
  • 函数默认参数有些问题?

    看到这个 let foo outer function bar func x gt foo let foo inner console log func bar outer 我想知道为什么输出是 外部 而不是 内部 我知道 JavaScri
  • 尝试访问我的网站时出现内部服务器错误

    我收到这个错误 内部服务器错误 服务器遇到内部错误或配置错误 无法完成您的请求 请联系服务器管理员 电子邮件受保护 cdn cgi l email protection和 告知他们错误发生的时间以及您可能会发生的任何事情 所做的事情可能导致
  • Electron 应用程序可以与 java 代码集成吗?

    由于node js仍然缺乏Java中存在的重要功能 因此我想使用Java而不是node js 并使用Web语言 html js css 创建客户端 Electron 是跨平台的 java 也是跨平台的 因此似乎有一个能够两全其美的解决方案
  • 使用节点http代理转发http代理

    我正在使用 node http proxy 库来创建转发代理服务器 我最终计划使用一些中间件来动态修改 html 代码 这就是我的代理服务器代码的样子 var httpProxy require http proxy httpProxy c
  • Ruby On Rails - 在控制器中使用关注点

    可能的菜鸟警告 刚接触 RoR 我正在尝试在 RoR 中使用关注点 现在我只写了一个非常简单的问题 app controllers concerns foo rb module Foo extend ActiveSupport Concer
  • 从 Harp.js 中的 EJS 模板调用另一个文件上的 javascript 函数

    尝试使用 Harp js 制作一个网站 我使用 ejs 模板 并希望将一些有用的 javascript 函数存储在中央文件中 我怎么做 我尝试使用 但它不起作用 似乎js文件没有被解析 有任何想法吗 谢谢 尽管有多种方法 有时 可以实现这一
  • 对同一域发出 get 请求,出现 CORS 错误

    在浏览器扩展中 这是我的 ajax 调用 var xhr new XMLHttpRequest xhr open GET window location href true xhr responseType arraybuffer xhr
  • asp.NET 2.0网站无法访问App_Code中的类

    将我的网站部署到服务器后 我在访问课程时遇到问题 请注意 这是一个网络Site不是网络应用 错误是 编译器错误消息 CS0246 找不到类型或命名空间名称 Order 是否缺少 using 指令或程序集引用 版本信息 Microsoft N
  • Java selenium - 如何在 TimeoutException 之后正确刷新网页?

    ChromeOptions options new ChromeOptions options addExtensions new File extension 6 2 5 0 crx ZenMate options addExtensio
  • 如何防止桌面浏览器(Chrome、Safari)缩放网页

    我尝试使用以下元视图端口标记来防止浏览器缩放 但这不起作用 我知道这是可能的 因为我的缩放在此网站上被阻止 未来主义 xyz http futurism xyz 该网站的视口标签是这样的
  • Safari 的“阅读器模式” - 开源解决方案? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Safari 有一个 阅读器模式 可以删除网站上除文本之外的所有内容 有谁知道提供相同功能的开源库 或
  • 重新加载更新的 javascript> 代码而不完全重新加载 html 页面

    我正在开发一个单页 Web 应用程序 它具有许多不同的功能和形式 当开发一个深度 我的意思是主页上没有的 功能时 我会经历这个循环 开发代码 编辑类和函数 刷新整个页面 一路点击 直到到达我需要测试的部分 有时加起来大约一分钟 测试新代码
  • powershell Invoke-WebRequest WebSession 不起作用

    我无法让以下代码工作 它似乎已登录 但随后返回带有 response 的登录页面 我猜这与回发有关 有办法解决这个问题吗 谢谢 login Invoke WebRequest Uri http www sqlpass org UserLog
  • 网站 YouTube 嵌入视频不断播放

    我正在使用 youtube 提供的 iframe 在我的网站上嵌入视频 我还使用了一个 css 弹出窗口 这是我从这个页面学到的http www pat burt com web development how to do a css po
  • VBA - 如何从网站下载.xls并将数据放入Excel文件

    我设法使用 VBA 达到准备从网络下载 Excel 文件的程度 但我无法弄清楚如何实际下载该文件并将其内容放入我正在使用的 Excel 文件中 有什么建议么 谢谢 这是到目前为止的代码 Sub GetData Dim IE As Inter
  • 找不到模块:错误:包路径。未从包中导出

    import firebase from firebase const firebaseConfig apiKey AIzaSyBOK7x5N5UnjY4TDqndzH7l5tvdNIsWFRc authDomain todo app e3
  • 我想将我的 NEXT.js 项目链接到静态网站

    我有一个使用 HTML CSS 开发的网站 它是一个静态网站 但现在我使用 NEXT js 与 Strapi API 集成创建了一个博客项目 我的问题是如何将我的静态网站与我的 Next js 项目链接起来 我尝试使用链接标签 但没有用 i

随机推荐

  • Android之 内存泄漏问题检测和解决

    一 背景 1 1 什么是内存泄漏 内存泄漏指程序在申请内存后 无法释放已申请的内存空间 导致系统无法及时回收内存并且分配给其他进程使用 1 2 内存管理 1 3 垃圾回收 上面可以看出GC回收的主要对象是java堆 也就是new出来的对象
  • Zipkin链路追踪

    Zipkin链路追踪技术分享 什么是Zipkin Zipkin 是 Twitter 的一个开源项目 它基于 Google Dapper 实现 它致力于收集服务的定时数据 以 解决微服务架构中的延迟问题 包括数据的收集 存储 查找和展现 我们
  • Python实现移动平均数

    首先 什么是移动平均数呢 来自百度百科 若依次得到测定值 时 按顺序取一定个数所做的全部算术平均值 例如 等是移动平均值 详细可以点击此处链接 Python中是如何实现呢
  • 电子科技大学计算机系统结构复习笔记(三):流水线技术

    目录 前言 重点一览 流水线定义 基本概念 流水线分类 流水线特点 流水线时空图 流水线性能分析 流水线特点 经典5段流水线RISC处理器 流水线的三种冒险 冒险分类 停顿流水线 结构冒险 数据冒险 控制冒险 流水线处理机的指令系统 流水线
  • kitti数据集解析以及在mmdection3d中的pkl文件参数解析

    kiiti数据集介绍 kitti数据集存在4个相机 其中0和1为灰度相机 2和3为彩色相机 各设备之间的安装示意图如下所示 如图所示 相机坐标系 x轴向右 y轴向下 z轴向前 雷达坐标系 x轴向前 y轴向左 z轴向上 GPS IMU坐标系
  • STM32项目设计:基于stm32f4的智能门锁(附项目视频全套教程、源码资料)

    文章目录 智能门锁 一 项目背景 二 项目功能要求 三 元件准备 四 项目设计 一 原理图设计 二 硬件设计 三 程序设计 五 上机调试 六 知识扫盲 七 项目图片展示 智能门锁 资料链接 智能门锁 rar 2022年1月1日前 单片机设计
  • 机器学习项目入门篇:一个完整的机器学习项目

    本部分 我们会作为被一家地产公司雇佣的数据科学家 完整地学习一个项目 下面是主要步骤 项目概述 获取数据 发现并可视化数据 发现规律 为机器学习算法准备数据 选择模型 进行训练 微调模型 给出解决方案 部署 监控 维护系统 一 项目概述 任
  • 05-Redis

    1 Redis为什么快 1 纯内存操作 2 单线程可以省去多线程时CPU上下文会切换的时间 3 渐进式ReHash 缓存时间戳 数组需要扩容的时候 他会维护两张hash表 比如第一张的数组长度为6 另一张的数组长度为12 在set和get的
  • Android Stuido卡顿解决方法

    修改Android studio的安装目录下bin studio vmoptions和studio64 vmoptions 两个文件的以下属性就可以在内存配置比较大的电脑上有效减少Android Stuido卡顿现象 多开也不怎么卡了 Xm
  • Gate仿真错误Illegal application state /gate/source/addSources ***

    我采用vGate8 2进行仿真 仿真程序是gate GateContrib CT vrt 出现如下错误 Illegal application state source addSources xraygun gt google搜索发现 是I
  • addr2line 定位bug

    addr2line e 文件地址 exe so a 地址 0x
  • Qt 的TCP网络通信

    Qt网络通信 Socket 通信 Qt 中提供的所有的 Socket 类都是非阻塞的 Qt 中常用的用于Socket 通信的套接字类 QTCPServer 用于TCP IP 通信 作为服务器端套接字使用 QTCPSocket 用于TCP I
  • 第四章. Pandas进阶—数据格式化

    第四章 Pandas进阶 4 2 数据格式化 1 设置小数位数 round函数 DataFrame round decimals 0 args kwargs 参数说明 decimals 用于设置保留的小数位数 args kwargs 附加关
  • Unity灯光效果及设置详解

    时间 2017 03 03 发布 Unity3D培训 来源 Unity3D教程 分享到 Unity已经成为游戏程序员中越来越受欢迎的游戏引擎 这是因为Unity直接支持多种平台 如移动 桌面和控制台环境 此外 对于低收入开发者或工作室来说
  • 4399游戏测试实习生面试

    2014年5月13日 经常在大街网看到4399的测试招聘 我都没放在心上 虽然肥佬一直说4399福利很棒 送车 但我不喜欢游戏 有一天爱游邀请我投它的游戏测试实习生岗位 我就点击几下申请了 心里想着反正不是4399 或许游戏性质不会太强 忘
  • 数学建模——模拟退火算法(Simulated Annealing,SA)

    模拟退火算法 一 模拟退火算法概述 二 算法步骤 三 算法特点 四 模拟退火算法理解 图解 五 Metropolis准则 六 模拟退火算法的应用 七 模拟退火算法Matlab代码 工具箱求解非线性函数 注 本博客仅做本人笔记参考使用 推荐博
  • 微信小程序的点击、双击、长按事件

    一 点击事件 点击事件是最常用的事件 轻点即可触发事件 如果想要添加参数即可通过 data 加事件名 的方式添加参数 通过 event参数的target dataset 加事件名 获取 我们来看看样例 wxml代码
  • 序列化pickle&json模块

    序列化pickle json模块 序列化 序列化是指把内存里的数据类型转变成字符串 以使其能存储到硬盘或通过网络传输到远程 因为硬盘或网络传输时只能接受bytes 用于序列化的两个模块 json 用于字符串 和 python数据类型间进行转
  • 错误ERROR: cannot launch node of type

    ERROR cannot launch node of type robot vision motion detector py can t locate node motion detector py in package robot v
  • javaweb之MVC购物车(加入购物车,订单,订单详情)

    MVC Model View Controller 是软件工程中的一种软件架构模式 它把软件系统分为模型 视图和控制器三个基本部分 用一种业务逻辑 数据 界面显示分离的方法组织代码 将业务逻辑聚集到一个部件里面 在改进和个性化定制界面及用户