博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习-案例练习-图书管理-13-添加购物车的实现过程
阅读量:4302 次
发布时间:2019-05-27

本文共 4418 字,大约阅读时间需要 14 分钟。

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

 

1.需求场景

浏览器打开

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

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

 

2.大致实现思路

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

 

3.给购买按钮添加链接跳转

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

 

具体代码如下

 

4.创建AddCartServlet.java

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

5.Dao/Service层代码

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

 

6.Servlet文件代码

package com.anthony.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.anthony.domain.Book;import com.anthony.service.BookService;import com.anthony.service.BookServiceImpl;public class AddCartServlet extends HttpServlet {	public void 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+""); } public void 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	public int hashCode() {		final int prime = 31;		int result = 1;		result = prime * result + ((id == null) ? 0 : id.hashCode());		return result;	}	@Override	public boolean equals(Object obj) {		if (this == obj)			return true;		if (obj == null)			return false;		if (getClass() != obj.getClass())			return false;		Book other = (Book) obj;		if (id == null) {			if (other.id != null)				return false;		} else if (!id.equals(other.id))			return false;		return true;	}

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

package com.anthony.web.servlet;import java.io.IOException;import java.io.PrintWriter;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.anthony.domain.Book;import com.anthony.service.BookService;import com.anthony.service.BookServiceImpl;public class AddCartServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {				response.setContentType("text/html;charset=UTF-8");		PrintWriter out = response.getWriter();		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+""); // 把cart对象放回session作用域中 session.setAttribute("cart", cart); out.print("
继续购物
查看购物车"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

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

下面来在cart.jsp页面中写一个循环,因为购物车列表存在多条数据的情况,下面代码主要看49-73行

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>电子书城
首页    >    购物车
序号 商品名称 价格        数量 库存 小计 取消
${vs.count} ${entry.key.name } ${entry.key.price } ${entry.key.pnum} ${entry.key.price*entry.value} X
合计:  ${total}元
    

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

 

7.部署测试

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

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

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

 

转载地址:http://knows.baihongyu.com/

你可能感兴趣的文章
Activiti工作流会签二 启动流程
查看>>
Activiti工作流会签三 撤销,审批,驳回
查看>>
Oauth2方式实现单点登录
查看>>
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>
win10 Docke安装mysql8.0
查看>>
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>