首頁  >  文章  >  Java  >  java web開發_購物車功能實現

java web開發_購物車功能實現

高洛峰
高洛峰原創
2016-12-17 14:29:591141瀏覽

之前沒有接觸過購物車的東東,也不知道購物車該怎麼做,所以在查詢了很多資料,總結一下購物車的功能實現。

查詢的資料,找到三種方法:

1.用cookie實現購物車;

2.用session實現購物車;

3.用cookie和資料庫(購物車資訊持久化)實現購物車;

================================================ =========================

分析一下這三種方法的優缺點:

1.單純有cookie實現購物車,這樣的購物車不是很理想,設想一下,如果客戶端的瀏覽器把cookie給禁用了,

這種方法就會在這裡流產...

2.session中保存購物車的信息,這個只是在一個會話中可用,如果用戶沒有登錄,或者說登錄了以後,添加購物車,在關閉瀏覽器

或者登出後,之前所添加的購物車通通都流產啦...

3.我這裡要說就是這種方法啦.....

主要的流程:

A.用戶登錄前的資料流:用戶在沒有登入系統的時候,對喜歡的商品進行添加購物車,那麼這個時候,我們可以把購物車資訊保存

到cookie中,這裡會涉及到cookie的添加,修改操作;也即如果之前在cookie中不存對應的cookie,則就對cookie進行添加操作。

如果在cookie中存在對應的cookie,那麼,這時候,就要對cookie進行修改操作了(這裡涉及到用戶對同一個商品進行多次添加購物車的情況)。

B.使用者登入後的資料流:使用者在登入後,系統首先做的第一件事就是去獲取對應的cookies,如果存在相關的購物車cookies,那麼就對該購物車

資訊進行相應使用者User的持久化操作,要麼添加,要麼修改。 (添加操作:該用戶所對應的購物車如果沒有相應的信息進行添加操作;修改操作:類似的,

如果存在對應用戶的購物車信息,就進行修改操作)。使用者登入後,也可以進行購物車的新增操作,不過,這裡不是加入cookie中,而是直接持久化到

資料庫。註:使用者登入後的資料都是和資料庫打交道。

================================================ =========================

程式碼部分:

==================== ================================================== =====

注:

1 Conf.IDUONA_CASHTICKET_COOKIE_STARTNAME = "iduona_cashTicket_";

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

/**
     * 加入购物车<br>
     * ============================================<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);
                }
            }
        }
    }

這是部分代碼....

效果:

用戶沒有登錄的情況下

java web开发_购物车功能实现

用戶登入了以後:

java web开发_购物车功能实现

資料庫裡面的狀況:

登入前資料

java web开发_购物车功能实现



web_🎜 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn