1. 程式人生 > >淘淘商城系列——新增購物車

淘淘商城系列——新增購物車

上文我們一起改造了下商品詳情頁面關於購物車那塊的部分,本文我們將一起實現新增購物車這個功能。
我們以京東為例,比如我們選了一款手機,然後點選”加入購物車”,注意,此時我們並沒有登入。
這裡寫圖片描述
我們會看到如下圖所示介面,可以看到,我們並沒有直接進入購物車列表,而是到了一箇中間頁面,只是提醒我們成功加入了購物車。如果想進購物車列表的話,就點選那個”去購物車結算”按鈕。
這裡寫圖片描述
我們模仿京東的購物車功能,既然要展示成功加入購物車的頁面,我們就要先把下圖所示的淘淘商城購物車工程靜態資原始檔新增到taotao-cart-web工程當中。
這裡寫圖片描述
記得將css、js、images放到webapp目錄下,將jsp目錄放到WEB-INF目錄下,如下圖所示。
這裡寫圖片描述


下面我們再看下我們的商品詳情頁面以及新增購物車的情況,我們首先要啟動所有的服務,然後啟動除了taotao-cart-web工程之外的所有工程,商品詳情頁面如下圖所示。
這裡寫圖片描述
我們點選上圖的”加入購物車”,會看到如下圖所示介面,可以看到加入購物車的請求當中包含了商品ID以及商品數量。我們可以根據商品ID查詢出商品詳情。
這裡寫圖片描述
下面我們來完成新增購物車的功能,由於查詢商品詳情我們的taotao-manager服務已經實現過了,因此我們只需完成表現層工程即可。首先我們要新增對dubbo服務的引用,即在springmvc.xml配置檔案中新增如下配置:

<dubbo:reference interface="com.taotao.service.ItemService"
id="itemService" />

這裡寫圖片描述
接著我們在taotao-cart-web工程中按照如下業務邏輯編寫一個Controller——CartController.java:

  1. 從cookie中查詢商品列表。
  2. 判斷商品在商品列表中是否存在。
  3. 如果存在,商品數量相加。
  4. 不存在,根據商品id查詢商品資訊。當根據商品id查詢出商品資訊後,取第一張圖片儲存到image屬性中即可。
  5. 把商品新增到購物車列表。
  6. 把購物車商品列表寫入cookie。
    • key:TT_CART
    • value:購物車列表轉換成json資料,並且需要對資料進行編碼
    • cookie的有效期:儲存7天

如下圖所示,在CartController類中處理邏輯並最終返回邏輯檢視。
這裡寫圖片描述


為了方便大家複製,現將CartController類的程式碼貼出。

/**
 * 購物車管理Controller
 * <p>Title: CartController</p>
 * <p>Description: </p>
 * <p>Company: www.itcast.cn</p> 
 * @version 1.0
 */
@Controller
public class CartController {
    @Autowired
    private ItemService itemService;
    @Value("${COOKIE_TT_CART}")
    private String COOKIE_TT_CART;
    @Value("${COOKIE_CART_EXPIRE}")
    private Integer COOKIE_CART_EXPIRE;
    @RequestMapping("/cart/add/{itemId}")
    public String addCart(@PathVariable Long itemId, Integer num, 
            HttpServletRequest request, HttpServletResponse response) {
        // 先從Cookie中查詢購物車列表
        List<TbItem> cartList = getCartList(request);
        // 判斷購物車列表中是否有此商品
        boolean flag = false;
        for (TbItem tbItem : cartList) {
            /*
             * 由於tbItem的ID與引數中的itemId都是包裝型別的Long,要比較是否相等不要用==,
             * 因為那樣比較的是物件的地址而不是值,為了讓它們比較的是值,那麼可以使用.longValue來獲取值 
             */
            if (tbItem.getId() == itemId.longValue()) {
                // 購物車列表中存在此商品,數量要相加
                // 如果有,則商品數量相加
                tbItem.setNum(tbItem.getNum() + num); // 可以用商品的庫存欄位來作為購物車商品數量
                flag = true;
                break;
            }
        }
        if (!flag) {
            // 如果沒有,則根據商品id查詢商品資訊,呼叫商品服務實現
            TbItem tbItem = itemService.getItemById(itemId);
            // 設定商品數量
            tbItem.setNum(num);
            // 取一張圖片
            String image = tbItem.getImage();
            if (StringUtils.isNotBlank(image)) {
                tbItem.setImage(image.split(",")[0]);
            }
            // 新增到商品列表
            cartList.add(tbItem);
        }
        // 把這個購物車寫入Cookie
        CookieUtils.setCookie(request, response, COOKIE_TT_CART, 
                JsonUtils.objectToJson(cartList), COOKIE_CART_EXPIRE, true);
        // 返回新增成功頁面
        return "cartSuccess";
    }

    // 從Cookie中取出購物車列表
    private List<TbItem> getCartList(HttpServletRequest request) {
        // 使用CookieUtils取購物車列表
        String json = CookieUtils.getCookieValue(request, COOKIE_TT_CART, true);
        // 判斷Cookie中是否有值
        if (StringUtils.isBlank(json)) {
            // 沒有值就返回一個空List
            return new ArrayList();
        }
        // 把json轉換成List物件
        List<TbItem> list = JsonUtils.jsonToList(json, TbItem.class);
        return list;
    }
}

CartController類的程式碼中用到了常量,常量我們都放到了配置檔案當中,如下圖所示。
這裡寫圖片描述
下面我們來測試一下,我們啟動taotao-cart-web工程,taotao-cart-web工程啟動成功後,我們再到商品詳情頁面點選”加入購物車”,可以看到如下圖所示介面,可以看到正常顯示了”成功新增商品到購物車”的頁面。
這裡寫圖片描述

相關推薦

商城系列——新增購物車

上文我們一起改造了下商品詳情頁面關於購物車那塊的部分,本文我們將一起實現新增購物車這個功能。 我們以京東為例,比如我們選了一款手機,然後點選”加入購物車”,注意,此時我們並沒有登入。 我們會看到如下圖所示介面,可以看到,我們並沒有直接進入購物車列表,而是

商城系列——刪除購物車商品及購物車總結

刪除購物車商品 通過上文的學習,想必大家都已實現修改購物車商品數量的這個功能,本文我將帶領大家一起實現刪除購物車商品的功能。 我們在購物車列表頁面點選”刪除”連結,如下圖所示。 我們會看到如下圖所示介面,可以看到請求的url是/cart/delete/

商城27_購物車_01新增購物車和將購物車儲存到cookie

一、需求分析 購物車大概分兩種:京東樣式的和淘寶樣式的 京東:在使用者不用登入的情況下也可以將商品放入到購物車 淘寶:使用者必須登入成功後才能將商品放入到購物車   我們要做的類似京東:購物車在使用者不登陸的情況下也可以使用購物車。需要把購物車的商品資訊寫入cookie

商城67-商城購物車系統實現之登入與未登入狀態下新增商品到購物車

目錄 1.匯入靜態資源 將參考資料中的購物車靜態頁面下js、css、images匯入webapp下,將jsp匯入WEB-INF下 2.修改商品詳情頁 商品詳情在taotao-item-web系統的item

商城系列——商品詳情頁面對加入購物車進行改造

在上文中,我就講過,關於購物車模組,京東和淘寶並不一樣,京東允許使用者在沒有登入的情況下就新增商品進購物車,而且加到購物車裡面的商品可以一直儲存著。這其實是把購物車資訊寫入到了Cookie中,如果清空了Cookie也就清空購物車了。把購物車資訊寫入到了Cooki

(轉) 商城系列——使用FastDFS-Client客戶端進行上傳圖片的測試

row 構造方法 無法 空間 依賴 ron 文件下載 信息 utils http://blog.csdn.net/yerenyuan_pku/article/details/72804018 不久之前,我們實現了商品的類目選擇這個功能,但這只是萬裏長征的第一步,我們還有很

(轉) 商城系列——Redis的安裝

真的 停止 參數 ref 服務 其他 fcm 工具 tle http://blog.csdn.net/yerenyuan_pku/article/details/72849612 通過上文的學習,我相信大家已經將首頁的輪播圖展示出來了,接下來我們將進入一個新的領域

(轉)商城系列——導入商品數據到索引庫——Service層

document hit exception earch comm 導入 查詢 文件 操作 http://blog.csdn.net/yerenyuan_pku/article/details/72894187 通過上文的學習,我相信大家已經學會了如何使用Solrj來操作

(轉)商城系列——搜索系統搭建

address face artifact 復制 sco ttr hold zookeeper cts http://blog.csdn.net/yerenyuan_pku/article/details/72886784 上文我們一起搭建了搜索服務工程,本文我將

商城系列——SSM框架整合之逆向工程

我們知道在開發中有些工作是非常耗時但是又沒有什麼技術含量的,比如建立mapper檔案、pojo、dao等,我們更關心的是業務邏輯的處理,而不是這些無關緊要的東西,因此如果能有工具幫我們自動生成程式碼將是非常棒的一件事情,這些mybatis官方已經為我們考慮到了,mybatis官方提供了逆向生成程式

商城系列(二)—— 安裝zookeeper註冊中心(三)

Zookeeper的介紹 註冊中心負責服務地址的註冊與查詢,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心互動,註冊中心不轉發請求,壓力較小。使用dubbo-2.3.3以上版本,官方建議使用zookeeper作為註冊中心。 Zookeeper是Apacahe Hadoop的子專案

商城系列(二)—— SSM框架整合之Dao層(五)

整合思路 1.Dao層 mybatis整合spring,通過spring管理SqlSessionFactory、mapper代理物件。需要mybatis和spring的整合包,由spring建立資料庫連線池。 整合內容 對應工程

商城系列(二)—— SSM框架整合之表現層(七)

前面我們把服務層的dao層和service層框架整合好了,現在來整合表現層。 建立springmvc.xml檔案 開啟我們的taotao-manager-web表現層工程: 在resources目錄下面新建一個spring資料夾 之後再spring資料夾下面,建立sp

商城專案_同步索引庫問題分析 + ActiveMQ介紹/安裝/使用 + ActiveMQ整合spring + 使用ActiveMQ實現新增商品後同步索引庫_匠心筆記

文章目錄 1、同步索引庫問題分析 2、ActiveM的介紹 2.1、什麼是ActiveMQ 2.2、ActiveMQ的訊息形式 3、ActiveMQ的安裝 3.1、安裝環境 3.2、安裝步驟

day79_商城專案_12_購物車流程 + 商城購物車系統的搭建 + 商城購物車系統的實現分析 + 購物車實現增刪改查_匠心筆記

課程計劃 1、購物車的流程 2、購物車的實現 a) 登入狀態下的購物車實現 b) 未登入狀態下的購物車實現 1、購物車流程 1.1、以前的購物車流程 使用者將商品新增到購物車時,判斷使用者是否登入,如果已經登入將購物車放入se

day79_商城專案_商城購物車系統實現三種方案總結

1、商城購物車系統實現的三種方案 1.1、session   將購物車直接存放到與使用者相關的session中。優點:  程式碼實現超級簡單。缺點:  購物車存在session當中,如果session銷燬,購物車就沒有了。(session只存在於一次會話中。)  使用者未登入的時候不能新增購物車

商城系列(五)—— 首頁輪播圖展示(一)

首頁輪播圖展示 taotao-portal-web工程中,動態展示內容資訊。 前端團隊:負責JS,html等開發。 後端團隊:負責後臺的開發並提供資料給前端。 1、功能分析 只需要動態生成一個json資料,輪播圖就可以動態展示: taotao-portal

商城第二天—完成商品新增功能 商品類目選擇 圖片上傳 圖片伺服器搭建 kindEditor富文字編輯器的使用 商品新增功能

1、實現商品類目選擇功能 1.1需求 在商品新增頁面,點選“選擇類目”顯示商品類目列表: 請求初始化樹形控制元件的url:/item/cat/list 1.2 EasyUI tree資料結構 資料結構中必須包含: Id:節點id Text:節

商城08_許可權管理及登入02之新增攔截器

我們新增攔截器,攔截的是Controller裡面的東西 在web工程新增新的包com.taotao.interceptor LoginInterceptor.java package com.taotao.interceptor; import javax.servlet.htt

商城09_商品的新增及描述

注:比較天台頁面,看返回的是什麼資料 分析:/item/save這是controller的URL,$("#itemAddForm").serialize()這是表單序列化,也就數說引數是整張表Tbitem data.status==200,這在taotaoresult這個工具類中有,也