java开发购物车案例_Javaweb-案例练习-4-加入购物车的实现过程

这篇博客通过一个实例展示了如何在JavaWeb应用中实现购物车功能。使用HashMap存储购物车数据,当用户点击购买按钮时,图书ID被传递到AddCartServlet,Servlet根据ID查询图书并将其添加到购物车。通过覆盖Book类的equals和hashCode方法,确保对象比较的正确性。最终,购物车列表在cart.jsp页面上以循环形式展示。
摘要由CSDN通过智能技术生成

添加购物车功能实现

这篇来做一个练习,就是图书详情页面,点击购买按钮,这本书添加到购物中。购物车中主要思想就是采用HashMap来存储数据。

需求场景

浏览器打开

显示图书列表,例如点击第一本进入该书的详情页。

a3318c941136e31422f9e0be7c9e8802.gif

Javaweb-案例练习-4-加入购物车的实现过程-1.jpg (33.99 KB, 下载次数: 3)

2020-12-5 21:55 上传

点击购买,这本书被添加到购物中。

大致实现思路

这里来想一下大致实现的思路,就是product_info.jsp页面点击购买按钮,这个跳转到一个addCartServlet中,把book.id传过来,然后根据id去查询这本书,然后放入购物车页面,大致就是这么一个过程。

给购买按钮添加链接跳转

这里跳转到一个addCartServlet,关键是id需要传过来,找到product_info.jsp,找到添加这个元素位置,代码变动如下(红圈位置是代码变动)。

a3318c941136e31422f9e0be7c9e8802.gif

Javaweb-案例练习-4-加入购物车的实现过程-2.jpg (46.47 KB, 下载次数: 6)

2020-12-5 21:55 上传

具体代码如下

创建AddCartServlet.java

这里先创建一个空的servlet文件

a3318c941136e31422f9e0be7c9e8802.gif

Javaweb-案例练习-4-加入购物车的实现过程-3.jpg (48.68 KB, 下载次数: 3)

2020-12-5 21:55 上传

Dao/Service层代码

看看Dao层代码,由于这里我们根据id来查找图书,这个方法我们之前写过了,所以本次练习不需要更改Dao和Service层代码。

Servlet文件代码

package com.kaigejava.web.servlet;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import com.kaigejava.domain.Book;

import com.kaigjava.service.BookService;

import com.kaigejava.service.BookServiceImpl;

publicclass AddCartServlet extends HttpServlet {

publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String id = request.getParameter("id");

//根据id去查找book

BookService bs = new BookServiceImpl();

Book book = bs.findBookById(id);

//从session中购物车取出来

HttpSession session = request.getSession();

Map cart = (Map) session.getAttribute("cart");

int num = 1;

if(cart == null) {

cart = new HashMap();

}

// 如果购物车中包含这本书,num就要加1

if(cart.containsKey(book)) {

num = Integer.parseInt(cart.get(book)) + 1;

}

// 把图书放入购物车

cart.put(book, num+"");

}

publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}

但是上面有一个问题,在这行代码cart.containsKey(book)

Book是一个高级对象,这个引用对象比较,虽然查找出来的book 和session中的book值一样,但是地址不一样,hashmap是根据hashcode去比较,这里我们来Book.java类重写下hashCode和equal方法。

@Override

publicint hashCode() {

finalint prime = 31;

int result = 1;

result = prime * result + ((id == null) ? 0 : id.hashCode());

return result;

}

@Override

publicboolean equals(Object obj) {

if (this == obj)

returntrue;

if (obj == null)

returnfalse;

if (getClass() != obj.getClass())

returnfalse;

Book other = (Book) obj;

if (id == null) {

if (other.id != null)

returnfalse;

} elseif (!id.equals(other.id))

returnfalse;

returntrue;

}

继续写Servlet代码,添加一个打印内容,可以点击继续购物或者点击查看购物车。

上面就添加了字符集设置和最后一行out输出,里面链接跳转。

下面来在cart.jsp页面中写一个循环,因为购物车列表存在多条数据的情况。

下面代码主要看49-73行。

保存代码,接下来进行部署测试

部署测试

保存代码,部署重启Tomcat服务器,然后来点击购买和查看购物车操作。

点击购买之后,跳转页面输出如下内容。

a3318c941136e31422f9e0be7c9e8802.gif

Javaweb-案例练习-4-加入购物车的实现过程-4.jpg (34.38 KB, 下载次数: 3)

2020-12-5 21:55 上传

这里点击继续购物,再买一本。然后点击查看购物车。

a3318c941136e31422f9e0be7c9e8802.gif

Javaweb-案例练习-4-加入购物车的实现过程-5.jpg (58.18 KB, 下载次数: 3)

2020-12-5 21:55 上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值