Utilice Servlet y JSP para desarrollar un carrito de compras simplificado

Hace unos días, después de revisar el conocimiento de Servlet y JSP, quise resumirlo, y luego quise desarrollar una versión simplificada del carrito de la compra. Aunque es una versión simplificada, la lógica del carrito de la compra es básicamente la igual que el de Tmall y Jingdong. Veamos cómo se implementa este carrito de compras.
Nota: Este artículo está basado en el libro de texto de un gran tipo. Explicaré la fuente al final del artículo.
Desarrolla principalmente los siguientes puntos:

  • Relación de clase
  • Módulo de producto
  • Módulo de usuario
  • Módulo de carrito de compras
  • Módulo de pedido

En primer lugar, debemos aclarar algunas relaciones básicas. Hay productos , pedidos , usuarios y artículos de pedido . Los tres primeros se comprenden bien. ¿Cuál es el artículo de cuarto pedido? Para decirlo sin rodeos, un artículo de pedido es un registro y varios pedidos idénticos se colocan en una sesión. Entonces, ¿cuál es la relación entre ellos? Existe una relación de uno a muchos entre los productos y los artículos de pedido, la relación entre los artículos de pedido y los pedidos es de muchos a uno y la relación entre los pedidos y los usuarios es de muchos a uno. Después de introducir la relación entre clases y clases, estamos a punto de desarrollarnos.
Primero, necesitamos crear una base de datos y crear una nueva tabla de productos, luego insertar cuatro datos para su uso posterior, Inserte la descripción de la imagen aquí
y luego crear la clase de entidad correspondiente en la idea, los campos deben corresponder a los campos de la base de datos, y luego Necesito crear una tabla de productos. El DAO se usa para consultar datos. Dado que es una versión simplificada del carrito de compras, solo realicé operaciones de consulta. A continuación, necesitamos un servlet para llamar a DAO y mostrar los datos en el navegador. El código es como sigue:

 @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Product> products = new ProductListDAO().list();
        req.setAttribute("Product",products);

        req.getRequestDispatcher("JSP/listProduct.jsp").forward(req, resp);
    }

El significado general en JSP es que hay una tabla, y luego cada fila se incrementa de acuerdo con la matriz pasada. El efecto se muestra en la figura:
Efecto de inicio de sesión
Efecto de un inicio de sesión exitoso
si el inicio de sesión falla, se redirigirá a la página de inicio de sesión. El código del servlet de inicio de sesión es el siguiente:

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String name = req.getParameter("name");
        String password = req.getParameter("password");

        User user = new UserDAO().getUser(name, password);

        if (null != user.getName()){
            System.out.println("登录成功!");
            req.getSession().setAttribute("user",user);
            resp.sendRedirect("ProductListServlet");
        }else {
            System.out.println("登录失败!");
            resp.sendRedirect("index.jsp");
        }
    }

Luego está el módulo de usuario. El inicio de sesión de usuario implementado ahora es el contenido del módulo de usuario. Describiré brevemente el proceso de implementación general. Primero, se necesita una tabla de usuario, luego se necesita una clase de entidad correspondiente, y luego una necesario para consultar a los usuarios. El DAO del contenido de la tabla, llamémoslo UserListDAO, ¿verdad? Entonces necesitamos un servlet, que se usa para verificar si la entrada es correcta o no es la parte anterior del código. Si es correcta, pasarle el contenido del usuario y se puede realizar el inicio de sesión.
Entonces lo que hay que hacer es el módulo de visualización del carro de la compra, pensemos bien, ¿qué pedidos del carro de la compra se realizan? No es que se coloque el mismo pedido en un artículo de pedido, y luego habrá muchos artículos de pedido. Puede comprar el mismo producto y comprar uno o más, pero si compra varios, solo se puede generar un artículo de pedido. Si el mismo producto Compró tres, y luego correspondió a tres artículos de pedido, esto es incorrecto. En esta etapa, todos los artículos del pedido se guardan en la sesión y solo se guardarán en la base de datos cuando finalmente se envíe el pedido.
Aquí necesitamos crear una nueva clase de artículo de pedido OrderItem, que contiene la cantidad y la información del producto. Dado que el pid se envía cuando se compra el producto y el producto en el artículo de pedido, necesitamos encontrar el precio y el nombre del producto de acuerdo con al id. De hecho, el comportamiento de compra en sí mismo es el proceso de creación de un OrderItem, porque cada vez que crea un nuevo pedido, debe crear un nuevo objeto OiderItem y luego poner el nombre del precio y finalmente agregarlo a la colección. vacío cuando se crea por primera vez. Luego, coloque el primer registro en él, luego salte a la interfaz de pantalla y luego agréguelo directamente después de agregarlo al carrito de compras.
Es más fácil mostrar el carrito de compras, casi todos se hacen en el servlet, solo muestran los datos y agregan una operación de eliminación.
Interfaz de carrito de compras
Acabo de mencionar que el mismo pedido corresponde a un artículo de pedido independientemente de la cantidad, y luego debemos juzgar si es el mismo ID en el servlet, y si es así, simplemente cambie la cantidad.

 boolean found = false;
        for (OrderItem orderItem : ois) {
            if (orderItem.getProduct().getId() == oi.getProduct().getId()) {
                orderItem.setNum(orderItem.getNum() + oi.getNum());
                found = true;
                break;
            }
        }
 
        if (!found)
            ois.add(oi);

La idea general de la operación de eliminación es pasar este artículo de pedido, es decir, el número de identificación de este producto al servlet, y luego recorrer la colección, comparar y, si se encuentra el artículo de pedido correspondiente, eliminar este registro. . Vaya a la interfaz del carrito de compras.

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        int id = Integer.parseInt(req.getParameter("id"));
        List<OrderItem> ois ;
        ois = (List<OrderItem>) req.getSession().getAttribute("ois");
        for (OrderItem orderItem : ois) {
            if(orderItem.getProduct().getId()==id){
                ois.remove(orderItem);
                req.getSession().setAttribute("ois", ois);
                break;
            }
        }
        resp.sendRedirect("/listOrderItem");
    }

De acuerdo con la lógica del carrito de compras, todos los preparativos se han realizado antes de realizar un pedido.Cuando hacemos un pedido en Taobao, lo agregamos al carrito de compras para determinar la cantidad y ¿qué hacer a continuación? Sí, se envía el pedido y luego se realiza el pago. Después de que se envía el pedido, la misión del carrito de compras ha terminado oficialmente. ¡Entonces hagamos la operación de vaciar el carrito de compras a continuación!
Aproximadamente terminada la implementación lógica del carrito de compras. Publiquemos algunas imágenes para ver el efecto. Hablemos
Interfaz de carrito de compras mejorada
Interfaz de finalización de pedidos
de la lógica después de leer el efecto. Primero, necesitamos dos tablas, una para almacenar información del usuario y la otra para almacenar compras. La tabla de información en el carrito, la información en el carrito de compras muestra el número y precio del nombre del producto, y el nombre de usuario correspondiente, porque cada vez que se envía un pedido es un pedido enviado por el mismo objeto, no puede ser dos objetos Se envía el mismo orden, por lo que después de conocer esta lógica, necesitamos crear un nuevo servlet para operar en él. También necesitamos crear dos DAO. Uno es para almacenar el nombre de usuario y el otro es para almacenar la información en el carrito de la compra., Lo que se hace en el servlet es verificar si ha iniciado sesión (esta es la lógica de realizar pedidos en las principales plataformas de comercio electrónico, si no inicia sesión, debe iniciar sesión primero). Si no está vacío, primero almacene la identificación del nombre de usuario en la base de datos. Con la identificación del usuario, puede recorrer el contenido del carrito de compras y luego almacenar la identificación del usuario en cada artículo, y luego Almacenar el artículo de pedido completo en la base de datos. Cuando todos los artículos del carrito de compras están almacenados, el carrito de compras se borrará. Debido a que los artículos del carrito de compras son una colección, no hay una tabla de datos involucrada, por lo que solo necesitamos llamar al colección El método claro se puede borrar.
El código del servlet para enviar el pedido:

  @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        User u = (User) req.getSession().getAttribute("user");
        if (null == u){
            resp.sendRedirect("JSP/index.jsp");
        }

        Order o = new Order();
        o.setUser(u);

        //将这个购物车的用户存入数据库
        new OrderDAO().insert(o);

        List<OrderItem> ois = (List<OrderItem>)req.getSession().getAttribute("ois");
        for (OrderItem oi:ois) {
            oi.setOrder(o);
            new OrderItemDAO().insert(oi);
        }

        //清空购物车
        ois.clear();

        resp.setContentType("text/html; charset=UTF-8");
        resp.sendRedirect("JSP/success.jsp");
    }

Después de haber sido autorizado, significa que el pedido está completo. Está bien saltar a la interfaz de finalización del pedido. Si necesita saltar a la interfaz de pago cuando realmente está comprando, ya que aquí tenemos una versión simplificada, lo haremos paso Omitido, siempre que conozca la lógica general.
Bueno, lo anterior es toda la lógica para desarrollar un carrito de compras simplificado. Básicamente, todas las plataformas de comercio electrónico tienen la misma lógica para desarrollar un carrito de compras, por lo que será más fácil desarrollar un carrito de compras más completo con esta lógica. Siga trabajando duro , Sao Nian ~

Referencias: https://how2j.cn/k/cart/cart-tutorials/595.html

Supongo que te gusta

Origin blog.csdn.net/weixin_44475741/article/details/112919316
Recomendado
Clasificación