【JavaWeb】网上蛋糕项目商城-我的订单,退出功能

概念

上一文中,我们实现了注册,登录,提交订单以及修改个人信息等功能。本文在登录的状态下,实现订单列表以及退出登录功能等。

我的订单

在head.jsp头部页面中,当用户处于登录状态,则会显示"我的订单"选项

点击"我的订单"后,触发超链接向服务器发送请求,因此需要在servlet包中创建OrderListServlet类,用于接收浏览器请求,查询当前用户的所有订单信息,并返回给浏览器显示

java 复制代码
package servlet;

import model.Order;
import model.User;
import service.OrderService;

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 java.io.IOException;
import java.util.List;

@WebServlet(name = "order_list", urlPatterns = "/order_list")
public class OrderListServlet extends HttpServlet {
    private OrderService oService = new OrderService();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

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

        User u = (User) request.getSession().getAttribute("user");
        if(u==null)
        {
            response.sendRedirect("/index");
            return;
        }
        List<Order> list = oService.selectAll(u.getId());
        request.setAttribute("orderList", list);
        request.getRequestDispatcher("/order_list.jsp").forward(request, response);
    }
}

以上代码中,接收到浏览器的请求后,先判断session中是否存在user对象,也就是判断是否用户处于登录状态,如果未登录,则回到首页,处于登录状态,则将用户编号发送给业务逻辑层执行操作。

因此需要在OrderService类中定义对应方法

java 复制代码
public List<Order> selectAll(int userid){
    List<Order> list=null;
    try {
        list = oDao.selectAll(userid);
        for(Order o :list) {
            List<OrderItem> l = oDao.selectAllItem(o.getId());
            o.setItemList(l);
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return list;
}

以上代码中,通过用户编号传递给数据访问层dao层执行查询该用户的所有订单信息,但可能一个订单中包含多种商品的购买信息,因此还需要根据每一个订单编号获取当前这次订单中购买的所有商品信息。

因此需要在OrderDao类中定义对应的方法

java 复制代码
public List<Order> selectAll(int userid) throws SQLException {
    QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
    String sql = "select * from `order` where user_id=? order by datetime desc";
    return r.query(sql, new BeanListHandler<Order>(Order.class),userid);
}
java 复制代码
public List<OrderItem> selectAllItem(int orderid) throws SQLException{
    QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());
    String sql = "select i.id,i.price,i.amount,g.name from orderitem i,goods g where order_id=? and i.goods_id=g.id";
    return r.query(sql, new BeanListHandler<OrderItem>(OrderItem.class),orderid);
}

最后将查询出来的订单信息发送给order_list.jsp页面进行展示

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
   <title>我的订单</title>
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <link type="text/css" rel="stylesheet" href="css/bootstrap.css">
   <link type="text/css" rel="stylesheet" href="css/style.css">
   <script type="text/javascript" src="js/jquery.min.js"></script>
   <script type="text/javascript" src="js/bootstrap.min.js"></script>
   <script type="text/javascript" src="layer/layer.js"></script>
   <script type="text/javascript" src="js/cart.js"></script>
</head>
<body>
   <jsp:include page="header.jsp">
      <jsp:param name="flag" value="5"></jsp:param>
   </jsp:include>
   <div class="cart-items">
      <div class="container">
         <h2>我的订单</h2>
            <table class="table table-bordered table-hover">
            <tr>
               <th width="10%">ID</th>
               <th width="10%">总价</th>
               <th width="20%">商品详情</th>
               <th width="30%">收货信息</th>
               <th width="10%">订单状态</th>
               <th width="10%">支付方式</th>
               <th width="10%">下单时间</th>
            </tr>
               <c:forEach items="${orderList }" var="order">

                  <tr>
                     <td><p>${order.id }</p></td>
                     <td><p>${order.total }</p></td>
                     <td>
                        <c:forEach items="${order.itemList }" var="item">
                           <p>${item.goodsName }(${item.price }) x ${item.amount }</p>
                        </c:forEach>

                     </td>
                     <td>
                        <p>${order.name }</p>
                        <p>${order.phone }</p>
                        <p>${order.address }</p>
                     </td>
                     <td>
                        <p>
                           <c:if test="${order.status==2 }"><span style="color:red;">已付款</span></c:if>
                           <c:if test="${order.status==3 }"><span style="color:green;">已发货</span></c:if>
                           <c:if test="${order.status==4 }"><span style="color:black;">已完成</span></c:if>
                        </p>
                     </td>
                     <td>
                        <p>
                           <c:if test="${order.paytype==1 }">微信</c:if>
                           <c:if test="${order.paytype==2 }">支付宝</c:if>
                           <c:if test="${order.paytype==3 }">货到付款</c:if>
                        </p>
                     </td>
                     <td><p>${order.datetime }</p></td>
                  </tr>
               </c:forEach>
            </table>

      </div>
   </div>
   <jsp:include page="footer.jsp"></jsp:include>
</body>
</html>

以上效果图中,当用户支付完成后,查看订单情况时,处于已付款状态,需要管理员【商家】进入后台管理系统进行发货后,用户从订单中查看到已完成状态。

退出功能

登录之后,在head.jsp头部页面中会出现退出选项,当点击退出后,会想服务器发送请求

因此在servlet包中创建UserLogoutServlet类,用于处理退出登录的操作

java 复制代码
package servlet;

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 java.io.IOException;

@WebServlet(name = "user_logout",urlPatterns = "/user_logout")
public class UserLogoutServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().removeAttribute("user");
        response.sendRedirect("/index");
    }
}

以上代码中,接收到浏览器的退出登录请求,需要从session中删除user对象,也就是清除用户的登录信息,然后回头首页。

相关推荐
路在脚下@3 分钟前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
森屿Serien6 分钟前
Spring Boot常用注解
java·spring boot·后端
苹果醋31 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader2 小时前
深入解析 Apache APISIX
java·apache
菠萝蚊鸭2 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
旭东怪2 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
007php0072 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
∝请叫*我简单先生2 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl
ssr——ssss2 小时前
SSM-期末项目 - 基于SSM的宠物信息管理系统
java·ssm
一棵星3 小时前
Java模拟Mqtt客户端连接Mqtt Broker
java·开发语言