商城系统购物车功能分析实现
現(xiàn)在網(wǎng)上購物已經(jīng)成了人們生活中不可缺少的一部分,今天我們來看下當我們從商城里面瀏覽搜索了商品,看到了自己喜歡的商品準備加入到購物車的這個功能實現(xiàn)。
購物車功能實現(xiàn):
購物車功能流程:
功能分析:
(1)我們平時購物的時候,有時候點擊商品頁面的加入購物車,然后商品就直接加入到購物車列表中,不管用戶是否登錄。然后我們換了一臺設(shè)備,發(fā)現(xiàn)該網(wǎng)站我們之前在另一臺設(shè)備上加入購物車的商品不存在。由此我們可以推斷出:購物車列表的內(nèi)容不是存放在數(shù)據(jù)庫,而是在cookie中。,所以購物車功能實現(xiàn)是在客戶端實現(xiàn)的。
(2)購物車我們需要實現(xiàn)的功能有哪些呢?
展示購物車列表、向購物車列表中添加商品(add)、修改購物車列表中商品的數(shù)量、刪除列表中的商品。
邏輯實現(xiàn):
一、展示購物車列表:
因為購物車的商品列表是保存在cookie中的,所以我們獲取購物車列表就是從cookie中獲取商品列表。
首先cookie中保存形式也是key-value的形式,key指的是保存的名稱,比如TT_CART,是一個標志而已。value是保存的商品的具體信息,是以字符串的形式保存的,我們通常將列表的形式轉(zhuǎn)換成json格式的數(shù)據(jù),因為json格式的就是一個字符串的形式保存的。
cookie屬于會話跟蹤技術(shù),寫入cookie是服務(wù)器的response寫入的,即服務(wù)器給客戶端頒發(fā)一個名詞cookie。所以我們我們獲取cookie就需要使用request來獲取。
cookie是客戶端的,如果直接將對象顯示很危險,所以我們需要對商品進行編碼。
service層實現(xiàn):
獲取到商品的列表后,我們可以展示該列表:controller層實現(xiàn):
二、向購物車添加商品信息
我們首先判斷購物車列表中是否存在該商品,如果存在則將該商品的數(shù)量加1,如果不存在則將商品加入購物車,重新將商品列表寫入cookie。
分析:傳入?yún)?shù):id,num,request,response;返回值:可以采用我們的TaotaoResult,
dao層:無。
service層實現(xiàn):因為之前顯示了購物車列表,所以我們遍歷購物車列表,對吧購物車中商品的id和加入的商品的id是否一致,如果一致則數(shù)量加1,如果不一致則需要從商品信息表中獲取該上商品的信息。這里需要調(diào)用服務(wù)層的根據(jù)id獲取商品信息的接口,即用httpclient。
這里還有一個問題:商品信息表中的字段是非常多的,我們難道都需要嗎,此時我們就要考慮一個新的接收對象pojo了,只需要購物車里面所需要的字段即可。所以重新建立一個pojo來承接商品信息的部分信息。
其中:這里需要注意cookie中和cookie外的數(shù)據(jù)的形式,是json還是java對象。
具體實現(xiàn)如下:controller:
service層:
@Value("${SHANG_PIN_BASE_INFORMATION_URL}")
private String SHANG_PIN_BASE_INFORMATION_URL;
@Override
public TaotaoResult getCartList(long id, Integer num, HttpServletRequest request, HttpServletResponse response) {
/*添加購物車商品,首先購物車商品是保存在cookie中的,因為我們只要不付款是沒有什么作用的。
* 如何從cookie中讀取購物車列表呢,是利用request來實現(xiàn)的。
* 第一步:首先判斷cookie中是否存在該商品,如果存在,則商品數(shù)量加1,
* 如果沒有則根據(jù)商品id從rest工程中獲取該商品,將商品寫入cookie。
* 因為我們不需要獲取商品的全部信息,只有一部分id,title,price,image,num。所以獨立建立一個pojo才存放這些字段。
*/
CartItem cartItem=null;
//從cookie中獲取商品列表的方法
List<CartItem> itemList=getItemListByCookie(request);
//遍歷cookie的商品列表,
for (CartItem cItem : itemList) {
if (cItem.getId()==id) {
cItem.setNum(cItem.getNum()+num);
cartItem=cItem;
break;
}
}
if (itemList==null) {
cartItem=new CartItem();
String itemjson = HttpClientUtil.doGet(SHANG_PIN_BASE_INFORMATION_URL+id);
//從http協(xié)議獲取的返回值是json格式的
TaotaoResult taotaoResult= TaotaoResult.formatToPojo(itemjson, TbItem.class);
//返回結(jié)果是taotaoresult,如果想獲取pojo對象,就利用它的getData方法
if (taotaoResult.getStatus()==200) {
TbItem item=(TbItem) taotaoResult.getData();
cartItem.setId(item.getId());
cartItem.setTitle(item.getTitle());
cartItem.setPrice(item.getPrice());
cartItem.setNum(item.getNum());
cartItem.setImage(item.getImage()==null?"":item.getImage().split(",")[0]);
}
//將商品添加到購物車列表
itemList.add(cartItem);
}
//將商品添加到cookie中,因為cookie中的存值方式是key-value的形式,value是一個字符串,所以需要將轉(zhuǎn)換的商品列表轉(zhuǎn)成json的形式再保存到cookie中
CookieUtils.setCookie(request, response,"TT_CART", JsonUtils.objectToJson(itemList), true);
return TaotaoResult.ok();
}
//從cookie中獲取購物車列表
private List<CartItem> getItemListByCookie(HttpServletRequest request) {
String cookiejson = CookieUtils.getCookieValue(request, "TT_CART",true);
//轉(zhuǎn)換成商品列表
if (cookiejson==null) {
return new ArrayList<>();
}
//cookie 中保存的也是key -value的值,value是字符串,即json格式的數(shù)據(jù)
List<CartItem> list = JsonUtils.jsonToList(cookiejson, CartItem.class);
return list;
}
三、修改購物車商品的數(shù)量,這里利用了js來實現(xiàn),調(diào)用我們的add商品的功能,num設(shè)置成1或者-1
四:刪除購物車的商品
邏輯實現(xiàn):傳入要刪除商品的id,讀取購物車的商品列表,遍歷列表,比較id,如果id一樣,則從cookie中remove該商品,然后重新將商品列表寫入cookie。
返回購物車列表的頁面。
實現(xiàn):controller:
service層實現(xiàn):
購物車功能還有一些問題:
1、更換設(shè)備購物車商品不能同步
a) 不能把購物車商品保存到數(shù)據(jù)庫
b) 要求用戶登錄才能同步信息
c) 可以把購物車信息保存到redis中,key就是用戶,value就是購物車列表
d) 購物車商品合并的問題。
2、提交訂單后購物車商品需要清空。
總結(jié)
以上是生活随笔為你收集整理的商城系统购物车功能分析实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux查看文件的首个字母 文件属性字
- 下一篇: ZXing拍摄代码扫描之后以区分一维码、