cart.jsp
</em> 赠送积分: <em style="color:#ff6600;">596</em> 商品金额: <strong style="color:#ff6600;">${cart.total }元 </strong>
</div>
<div style="text-align:right;margin-top:10px;margin-bottom:10px;">
<a href="javascript:void(0)" onlick="clearCart();" id="clear" class="clear">清空购物车</a>
<a href="${pageContext.request.contextPath }/product?method=submitOrder">
<input type="button" width="100" value="提交订单" name="submit" border="0" style="background: url('./images/register.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0);
height:35px;width:100px;color:white;">
</a>
</div>
</div>
Order
public class Order {
private String oid;//订单的订单号
private Date ordertime;//下单时间
private double total;//该订单总金额
private int state;//订单状态 1代表已付款,0代表未付款
private String addr;//收货地址
private String name;//收货人
private String telephone;//收货人电话
private User user;//该订单属于哪个用户
//该订单中有多少订单项
List<OrderItem> orderItems = new ArrayList();
public String getOid() {
return oid;
}
public void setOid(String oid) {
this.oid = oid;
}
public Date getOrdertime() {
return ordertime;
}
public void setOrdertime(Date ordertime) {
this.ordertime = ordertime;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<OrderItem> getOrderItems() {
return orderItems;
}
public void setOrderItems(List<OrderItem> orderItems) {
this.orderItems = orderItems;
}
}
OrderItem
public class OrderItem {
private String itemid;//订单项id
private int count;//订单内商品的购买数量
private double subtotal;//订单项小计
private Product product;//订单项内部的商品
private Order order;//该订单项属于哪个订单
public String getItemid() {
return itemid;
}
public void setItemid(String itemid) {
this.itemid = itemid;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public double getSubtotal() {
return subtotal;
}
public void setSubtotal(double subtotal) {
this.subtotal = subtotal;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
public class ProductServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
//获得请求的方法
String methodName = request.getParameter("method");
if("productList".equals(methodName)){
productList(request,response);
}else if("categoryList".equals(methodName)){
categoryList(request,response);
}else if("index".equals(methodName)){
index(request,response);
}else if("productInfo".equals(methodName)){
productInfo(request,response);
}else if("addProductToCart".equals(methodName)){
addProductToCart(request,response);
}else if("delProFromCart".equals(methodName)){
delProFromCart(request,response);
}else if("submitOrder".equals(methodName)){
submitOrder(request,response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
//确认订单--更新收货人信息
public void confirmOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//更新收货人信息
Map<String, String[]> properties = request.getParameterMap();
Order order = new Order();
try {
BeanUtils.populate(order, properties);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
ProductService service = new ProductService();
service.updateOrderAddr(order);
}
//提交订单
public void submitOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
HttpSession session = request.getSession();
//判断用户已经登录,如果未登录,下面代码不执行
/*User user = (User) session.getAttribute("user");
if(user == null){
response.sendRedirect(request.getContextPath()+"/login.jsp");
return;
}*/
User user = new User();
user.setUid("42d049d84c3a");
//目的:封装好一个Order对象,并传递给service层
Order order = new Order();
//private String oid;//订单的订单号
String oid = CommonsUtils.getUUID();
order.setOid(oid);
//private Date ordertime;//下单时间
order.setOrdertime(new Date());
//private double total;//该订单总金额
//获得购物车
Cart cart = (Cart) session.getAttribute("cart");
double total = cart.getTotal();
order.setTotal(total);
//private int state;//订单状态 1代表已付款,0代表未付款
order.setState(0);
//private String addr;//收货地址
order.setAddr(null);
//private String name;//收货人
order.setName(null);
//private String telephone;//收货人电话
order.setTelephone(null);
//private User user;//该订单属于哪个用户
order.setUser(user);
//该订单中有多少订单项
//List<OrderItem> orderItems = new ArrayList();
//获得购物车中的购物项Map
Map<String, CartItem> cartItems = cart.getCartItems();
for(Map.Entry<String,CartItem> entry:cartItems.entrySet()){
//取出每一个购物项
CartItem cartItem = entry.getValue();
//创建新的订单项
OrderItem orderItem = new OrderItem();
//1)private String itemid;//订单项id
orderItem.setItemid(CommonsUtils.getUUID());
//2)private int count;//订单内商品的购买数量
orderItem.setCount(cartItem.getBuyNum());
//3)private double subtotal;//订单项小计
orderItem.setSubtotal(cartItem.getSubtotal());
//4)private Product product;//订单项内部的商品
orderItem.setProduct(cartItem.getProduct());
//5)private Order order;//该订单项属于哪个订单
orderItem.setOrder(order);
//将该订单项添加到订到的订单集合中
order.getOrderItems().add(orderItem);
}
//order对象封装完毕
//传递数据到service层
ProductService service = new ProductService();
service.submitOrder(order);
//存储订单数据
session.setAttribute("order", order);
//页面跳转
response.sendRedirect(request.getContextPath()+"/order_info.jsp");
}
}
ProductService
public class ProductService {
//提交订单 将订单的数据和订单项的数据提交到数据库
public void submitOrder(Order order) {
ProductDao dao = new ProductDao();
try {
//1.开启事务
DataSourceUtils.startTransaction();
//2.调用dao存储order表数据的方法
dao.insertOrders(order);
//3.调用dao存储orderitem表数据的方法
dao.insertOrderItem(order);
} catch (SQLException e) {
try {
DataSourceUtils.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
try {
DataSourceUtils.commitAndRelease();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//更新收货人信息
public void updateOrderAddr(Order order) {
ProductDao dao = new ProductDao();
try {
dao.updateOrderAddr(order);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ProductDao
public class ProductDao {
//向orders表插入数据
public void insertOrders(Order order) throws SQLException {
QueryRunner runner = new QueryRunner();
String sql = "insert into orders values(?,?,?,?,?,?,?,?)";
Connection conn = DataSourceUtils.getConnection();
runner.update(conn, sql, order.getOid(),order.getOrdertime(),order.getTotal(),order.getState(),
order.getAddr(),order.getName(),order.getTelephone(),order.getUser().getUid());
}
//向orderitem表插入数据
public void insertOrderItem(Order order) throws SQLException {
QueryRunner runner = new QueryRunner();
String sql = "insert into orderitem values(?,?,?,?,?)";
Connection conn = DataSourceUtils.getConnection();
List<OrderItem> orderItems = order.getOrderItems();
for(OrderItem item : orderItems){
runner.update(conn,sql,item.getItemid(),item.getCount(),item.getSubtotal(),item.getProduct().getPid(),
item.getOrder().getOid());
}
}
//更新收货人信息
public void updateOrderAddr(Order order) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "update orders set address=?,name=?,telephone=? where oir=?";
runner.update(sql,order.getAddr(),order.getName(),order.getTelephone(),order.getOid());
}
}
order_info.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 name="viewport" content="width=device-width, initial-scale=1"> <title>会员登录</title> <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" /> <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script> <script src="js/bootstrap.min.js" type="text/javascript"></script> <!-- 引入自定义css文件 style.css --> <link rel="stylesheet" href="css/style.css" type="text/css" /> <style> body { margin-top: 20px; margin: 0 auto; } .carousel-inner .item img { width: 100%; height: 300px; } </style> <script type="text/javascript"> function confirmOrder(){ $("#orderForm").submit(); } </script> </head> <body> <!-- 引入header.jsp --> <jsp:include page="/header.jsp"></jsp:include> <div class="container"> <div class="row"> <div style="margin: 0 auto; margin-top: 10px; width: 950px;"> <strong>订单详情</strong> <table class="table table-bordered"> <tbody> <tr class="warning"> <th colspan="5">订单编号:${order.oid }</th> </tr> <tr class="warning"> <th>图片</th> <th>商品</th> <th>价格</th> <th>数量</th> <th>小计</th> </tr> <c:forEach items="${order.orderItems }" var="orderItem"> <tr class="active"> <td width="60" width="40%"><input type="hidden" name="id" value="22"> <img src="${orderItem.product.pimage }" width="70" height="60"> </td> <td width="30%"><a target="_blank">${orderItem.product.pname }</a></td> <td width="20%">${orderItem.product.shop_price }</td> <td width="10%">${orderItem.count }</td> <td width="15%"><span class="subtotal">${orderItem.subtotal }</span></td> </tr> </c:forEach> </tbody> </table> </div> <div style="text-align: right; margin-right: 120px;"> 商品金额: <strong style="color: #ff6600;">${order.total }</strong> </div> </div> <div> <hr /> <form class="form-horizontal" action="${pageContext.request.contextPath }/product" method="post" style="margin-top: 5px; margin-left: 150px;" id="orderForm"> <!-- method的名字通过表单提交 --> <input type="hidden" name="method" value="confirmOrder"> <!-- 传递订单Id --> <input type="hidden" name="oid" value="${order.oid }"> <div class="form-group"> <label for="username" class="col-sm-1 control-label">地址</label> <div class="col-sm-5"> <input type="text" class="form-control" id="address" name="address" placeholder="请输入收货地址"> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-1 control-label">收货人</label> <div class="col-sm-5"> <input type="password" class="form-control" id="inputPassword3" name="name" placeholder="请输收货人"> </div> </div> <div class="form-group"> <label for="confirmpwd" class="col-sm-1 control-label">电话</label> <div class="col-sm-5"> <input type="password" class="form-control" id="confirmpwd" name="telephone" placeholder="请输入联系方式"> </div> </div> <hr /> <div style="margin-top: 5px; margin-left: 150px;"> <strong>选择银行:</strong> <p> <br /> <input type="radio" name="pd_FrpId" value="ICBC-NET-B2C" checked="checked" />工商银行 <img src="./bank_img/icbc.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="BOC-NET-B2C" />中国银行 <img src="./bank_img/bc.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="ABC-NET-B2C" />农业银行 <img src="./bank_img/abc.bmp" align="middle" /> <br /> <br /> <input type="radio" name="pd_FrpId" value="BOCO-NET-B2C" />交通银行 <img src="./bank_img/bcc.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="PINGANBANK-NET" />平安银行 <img src="./bank_img/pingan.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="CCB-NET-B2C" />建设银行 <img src="./bank_img/ccb.bmp" align="middle" /> <br /> <br /> <input type="radio" name="pd_FrpId" value="CEB-NET-B2C" />光大银行 <img src="./bank_img/guangda.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="CMBCHINA-NET-B2C" />招商银行 <img src="./bank_img/cmb.bmp" align="middle" /> </p> <hr /> <p style="text-align: right; margin-right: 100px;"> <a href="javascript:;" οnclick="confirmOrder();"> <img src="./images/finalbutton.gif" width="204" height="51" border="0" /> </a> </p> <hr /> </div> </form> </div> </div> <!-- 引入footer.jsp --> <jsp:include page="/footer.jsp"></jsp:include> </body> </html>