Maison  >  Article  >  Java  >  Exemple de code pour Java Web pour implémenter la fonction de panier d'achat

Exemple de code pour Java Web pour implémenter la fonction de panier d'achat

黄舟
黄舟original
2017-10-20 09:58:395627parcourir

Cet article présente principalement l'exemple de code pour implémenter la fonction de panier d'achat dans le développement Web Java. L'éditeur pense que c'est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil

Dongdong n'a jamais été exposé à un panier auparavant et ne sait pas comment utiliser un panier, j'ai donc vérifié beaucoup d'informations et résumé les fonctions du panier panier.

Interrogez les informations et trouvez trois méthodes :

1. Utilisez un cookie pour mettre en œuvre le panier

2. panier ;

3. Utiliser des cookies et des bases de données (persistance des informations du panier) pour mettre en œuvre des paniers ;

Analyser les avantages et les inconvénients de ces trois méthodes :

1. Implémenter un panier en utilisant uniquement des cookies n'est pas très idéal Imaginez si le navigateur du client désactive les cookies, cette méthode échouera ici...

2.session Enregistrez les informations du panier. disponible uniquement en une seule session. Si l'utilisateur n'est pas connecté ou ajoute un panier après s'être connecté, après avoir fermé le navigateur ou s'est déconnecté, tous les paniers ajoutés auparavant seront abandonnés...

3. . Ce que je veux dire ici, c'est cette méthode...

Processus principal :

A. Flux de données avant la connexion de l'utilisateur : lorsque l'utilisateur ajoute un produit favori à. le panier sans nous connecter au système, alors à ce moment-là, nous pouvons enregistrer les informations du panier dans le cookie, ce qui impliquera l'ajout et la modification du cookie, c'est-à-dire s'il était auparavant dans le cookie. Si le cookie correspondant le fait ; n'existe pas, ajoutez le cookie. S'il existe un cookie correspondant dans le cookie, alors à ce moment-là, le cookie doit être modifié (cela implique la situation où l'utilisateur ajoute plusieurs fois le même produit au panier).

B. Flux de données après la connexion de l'utilisateur : une fois que l'utilisateur s'est connecté, la première chose que fait le système est d'obtenir les cookies correspondants. S'il existe des cookies de panier pertinents, les informations du panier sont alors exécutées. l'opération de persistance de l'utilisateur correspondant, soit ajouter, soit modifier. (Opération d'ajout : si le panier correspondant à l'utilisateur ne contient pas d'informations correspondantes, une opération d'ajout est effectuée ; opération de modification : de même, s'il existe des informations sur le panier correspondant à l'utilisateur, une opération de modification est effectuée). Une fois connecté, l'utilisateur peut également l'ajouter au panier. Cependant, au lieu de l'ajouter au cookie, il est directement conservé dans la base de données. Remarque : Les données après la connexion de l'utilisateur sont traitées dans la base de données.

Partie du code :

Remarque :


Conf.IDUONA_CASHTICKET_COOKIE_STARTNAME = "iduona_cashTicket_";


/**
   * 用户登录
   * 
   * @author hongten
   */
  public void login() {
    //用户登录的时候,去读取cookies,并且进行持久话操作,更多的登录操作这里省略啦....
    peristShoppingCartWhenUserLogin(newUser);
    }

/**
   * 加入购物车<br> 我的Java学习交流QQ群:589809992 我们一起学Java!
   * ============================================<br>
   * 用户登录前:<br>
   * 用户在选择现金券的时候,点击现金券的加入购物车的时候,会把该现金券的信息(现金券的id,购买数量)<br>
   * 传递到这里,这时候,后台要做的就是从cookie中查询出是否有相同的记录,如果有相同的记录<br>
   * 则把相应的记录更新;否则,就添加新的记录<br>
   * 用户登录后:<br>
   * 用户在登录后,如果有添加购物车操作,则不用保存到cookie中,而是直接持久化购物车信息<br>
   * 
   * @throws Exception
   */
  public void addToShoppingCart() throws Exception {
    if (cashTicket == null || cashTicket.getId() == null || cashTicket.getId() < 1) {
      write("nullId");
    } else if (q == null || q == "") {
      // 购买数量,默认情况下面为1
      q = String.valueOf(1);
    } else {
      // 读取所有的cookie
      Cookie cookies[] = ServletActionContext.getRequest().getCookies();
      if (cookies == null || cookies.length < 0) {
        // 没有cookie
        System.out.println("there is no any cookie ..");
      } else {
        // 判断用户是否登录
        if (getUserInSession() == null) {
          boolean flag = true;
          for (Cookie c : cookies) {
            if (c.getName().equals(Conf.IDUONA_CASHTICKET_COOKIE_STARTNAME + cashTicket.getId())) {
              // 说明已有的cookies中有相应的cookie,就进行更新操作
              Integer oldValue = Integer.valueOf(c.getValue());
              Integer newValue = Integer.valueOf(oldValue + Integer.valueOf(q));
              fixCookie(c, newValue.toString().trim());
              flag = false;
            }
          }
          // 说明已有的cookies中没有相应的cookie,就进行添加操作
          if (flag) {
            addCookie(Conf.IDUONA_CASHTICKET_COOKIE_STARTNAME + cashTicket.getId(), q.trim());
          }

          // ==================================================
          // 测试用,读取所有的cookies
          readShoppingCartFromCookie();
          // ==================================================

          write("success");
        } else {
          // 如果用户登录,说明session存在user,这时就持久化购物车信息
          CashTicket cashTicketTemp = cashTicketService.get(cashTicket.getId());
          if (shoppingCartService.isExistUserAndCashTicket(getUserInSession(), cashTicketTemp)) {
            ShoppingCart oldShoppingCart = shoppingCartService.getByUserAndCashTicket(getUserInSession(), cashTicketTemp);
            oldShoppingCart.setAmount(oldShoppingCart.getAmount() + Integer.valueOf(q));
            if (shoppingCartService.update(oldShoppingCart)) {
              write("success");
            }
          } else {
            ShoppingCart shoppingCartTemp = new ShoppingCart();
            shoppingCartTemp.setAmount(Integer.valueOf(q));
            shoppingCartTemp.setUser(getUserInSession());
            shoppingCartTemp.setCashTicket(cashTicketTemp);
            shoppingCartTemp.setCreateTime(new Date());
            shoppingCartTemp.setStatusType(StatusType.POSITIVE);
            shoppingCartTemp.setUuid(UUID.randomUUID().toString());
            if (shoppingCartService.save(shoppingCartTemp)) {
              write("success");
            }
          }
        }
      }
    }
  }

/**
   * 从cookie中读取购物车信息
   * 
   * @throws Exception
   * @return
   */
  public void readShoppingCartFromCookie() throws Exception {
    System.out.println("======================================================");
    Cookie cookies[] = ServletActionContext.getRequest().getCookies();
    if (cookies == null || cookies.length < 0) {
      // System.out.println("there is no any cookie ..");
      // 没有cookie
    } else {
      for (Cookie c : cookies) {
        System.out.println("haha there are many cookies :" + c.getName() + "  " + c.getValue());
      }
    }
  }

  /**
   * 添加cookie操作
   * 
   * @param name
   *      cookie的name
   * @param value
   *      cookie的value
   */
  public void addCookie(String name, String value) {
    Cookie cookie = new Cookie(name.trim(), value.trim());
    cookie.setMaxAge(2 * 60 * 60 * 1000);// 设置为2个钟
    ServletActionContext.getResponse().addCookie(cookie);
  }

  /**
   * 更新cookie操作
   * 
   * @param c
   *      要修改的cookie
   * @param value
   *      修改的cookie的值
   */
  public void fixCookie(Cookie c, String value) {
    c.setValue(value.trim());
    c.setMaxAge(2 * 60 * 60 * 1000);// 设置为2个钟
    ServletActionContext.getResponse().addCookie(c);
  }

  /**
   * 当用户登录的时候,持久化cookie中的购物车信息,更新为本用户的购物车信息
   */
  public void peristShoppingCartWhenUserLogin(User user) {
    if (null != user) {
      Cookie cookies[] = ServletActionContext.getRequest().getCookies();
      if (cookies != null) {
        for (Cookie c : cookies) {
          if (c.getName().startsWith(Conf.IDUONA_CASHTICKET_COOKIE_STARTNAME)) {
            // 获取cookie的名称:"iduona_cashTicket_45" 和 cookie的值: "21"
            String name = c.getName();
            Integer amount = Integer.valueOf(Integer.valueOf(c.getValue())+Integer.valueOf(q));
            Integer ct_id = Integer.valueOf(name.substring(name.lastIndexOf("_") + 1));
            CashTicket temp = cashTicketService.get(ct_id);
            ShoppingCart shoppingCartTemp = new ShoppingCart();
            if (null != temp) {
              if (shoppingCartService.isExistUserAndCashTicket(user, temp)) {
                // 进行更新操作
                ShoppingCart oldShoppingCart = shoppingCartService.getByUserAndCashTicket(user, temp);
                oldShoppingCart.setAmount(amount);
                shoppingCartService.update(oldShoppingCart);
              } else {
                // 否则进行保存记录
                shoppingCartTemp.setAmount(amount);
                shoppingCartTemp.setUser(user);
                shoppingCartTemp.setCashTicket(temp);
                shoppingCartTemp.setCreateTime(new Date());
                shoppingCartTemp.setStatusType(StatusType.POSITIVE);
                shoppingCartTemp.setUuid(UUID.randomUUID().toString());
                shoppingCartService.save(shoppingCartTemp);
              }
            }
          }
        }
        // 移除所有的现金券cookies
        removeAllCookies();
      }
    }
  }

  /**
   * 移除所有的现金券cookies操作
   */
  public void removeAllCookies() {
    Cookie cookies[] = ServletActionContext.getRequest().getCookies();
    if (cookies == null || cookies.length < 0) {
      // 没有cookie
      System.out.println("there is no any cookie ..");
    } else {
      System.out.println("开始删除cookies..");
      for (Cookie c : cookies) {
        if (c.getName().startsWith(Conf.IDUONA_CASHTICKET_COOKIE_STARTNAME)) {
          c.setMaxAge(0);// 设置为0
          ServletActionContext.getResponse().addCookie(c);
        }
      }
    }
  }

Effet :

Lorsque l'utilisateur n'est pas connecté

Une fois l'utilisateur connecté :

La situation dans la base de données :

Données de pré-connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn