博客
关于我
强烈建议你试试无所不能的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/

你可能感兴趣的文章
sql反模式分析2
查看>>
Poj 1556 The Doors 计算几何+最短路
查看>>
react项目在ie空白解决
查看>>
[spring boot] 01 环境搭建 - 配置java和mvn环境
查看>>
10个机器学习人工智能开发框架和AI库(优缺点对比表)/贪心学院
查看>>
docker常用命令
查看>>
前序工作(宏定义,typedef,函数等)
查看>>
莫队模板
查看>>
Codeforces Round #FF (Div. 1) A. DZY Loves Sequences
查看>>
php获取当前时间戳方法
查看>>
JAVA字符串格式化-String.format()的使用
查看>>
编译时类型 和运行时类型的 区别(1)
查看>>
php pcntl 多进程学习
查看>>
C++类指针类型的成员变量的浅复制与深复制
查看>>
看看清华的同学在四年的大学中干什么吧,非常值得学习
查看>>
Java和.NET(C#)的开发用到的技术对比总结
查看>>
关于strassen矩阵乘法的矩阵大小不是2^k的形式时,时间复杂度是否还是比朴素算法好的看法...
查看>>
vl_sift函数用法
查看>>
Ios17个常用代码整理
查看>>
适配ios7
查看>>