MVC简易购物车项目--购物大厅

前面用户验证成功以后跳转到hall.jsp,展示商品

hall.jsp

<%@ page language="java" import="java.util.*,com.wxh.domain.*"  contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body style="text-align:center; margin:0 auto; ">
    <h1>欢迎来到购物大厅</h1>
     <table border="1"style="border-collapse: collapse; width: 500px"  align="center">
    <tr><th>书名</th><th>价格</th><th>出版社</th><th>点击购买</th></tr>

    <%
    //取出request中的那个Araylist
    ArrayList al=(ArrayList)request.getAttribute("books");
    for(int i=0;i<al.size();i++){
    Book book=(Book)al.get(i);
    %>    

    <tr><td><%=book.getName()%></td><td><%=book.getPrice() %></td><td><%=book.getPublishHouse() %></td>
   	<td>
     <a href="/shopping/ShoppingClServlet?type=add&id=<%=book.getId()%>" >点击购买</a>
    </td>
    </tr>
    <%
        }
    %>   

    <tr align="center"><td colspan="4"><input type="button" value="查看购物车"  onclick="window.location.href='/shopping/ShoppingClServlet?type=show';"></td></tr>
    </table>
    <hr/>
    <a href="/shopping/">返回重新登录</a>
  </body>
</html>

在GoHallUI中已经给下一个页面hall.jsp准备要了显示的数据

调用了BookService类

首先

Book.java

package com.wxh.domain;

public class Book {
	private int id;
	private String name;
	private String publishHouse;
	private double price;
	private int nums; //该书的库存
	private int shoppingNum=1;	//购买的数量
	private String author;	

	public int getShoppingNum() {
		return shoppingNum;
	}
	public void setShoppingNum(int shoppingNum) {
		this.shoppingNum = shoppingNum;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPublishHouse() {
		return publishHouse;
	}
	public void setPublishHouse(String publishHouse) {
		this.publishHouse = publishHouse;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public int getNums() {
		return nums;
	}
	public void setNums(int nums) {
		this.nums = nums;
	}
}

BookService.java

package com.wxh.service;
import java.util.ArrayList;
import com.wxh.domain.Book;
import com.wxh.utils.SqlHelper;

//这是一个业务逻辑类,用于处理与book表相关的业务,各司其职
public class BookService {	

	//根据书的编号,返回一个Book
	public Book getBookById(String id){
		Book book=new Book();
		String sql="select * from book where id=?";
		String paras[]={id};
		ArrayList al=new SqlHelper().executeQuery(sql, paras);
		if(al.size()==1){
			Object[] obj=(Object[])al.get(0);
			book.setId(Integer.parseInt(obj[0].toString()));
			book.setName(obj[1].toString());
			book.setAuthor(obj[2].toString());
			book.setPublishHouse(obj[3].toString());
			book.setPrice(Float.parseFloat(obj[4].toString()));
			book.setNums(Integer.parseInt(obj[5].toString()));
		}
		return book;
	}

	//得到所有的书籍信息(分页)
	public ArrayList getAllBook(){
		String sql="select * from book where 1=?";
		String paras[]={"1"};
		ArrayList al=new SqlHelper().executeQuery(sql, paras);
		ArrayList<Book> newAl=new ArrayList<Book>();
		//二次业务封装
		for(int i=0;i<al.size();i++){
			Object obj[]=(Object[])al.get(i);
			Book book=new Book();
			book.setId(Integer.parseInt(obj[0].toString()));
			book.setName(obj[1].toString());
			book.setAuthor(obj[2].toString());
			book.setPublishHouse(obj[3].toString());
			book.setPrice(Float.parseFloat(obj[4].toString()));
			book.setNums(Integer.parseInt(obj[5].toString()));
			newAl.add(book);
		}
		return newAl;
	}
}

购买功能的实现

在GOHallUI中已经创建了一个购物车

MyCart.java

package com.wxh.service;
import java.util.*;
import com.wxh.domain.Book;

//这个表示我的购物车
public class MyCart {
	HashMap<String,Book> hm=new HashMap<String,Book>();

	//添加书的第二个方法
	public void addBook2(String id){
		if(hm.containsKey(id)){
			//hm已经有这个书
			Book book=hm.get(id);
			int shoppingNum=book.getShoppingNum();
			book.setShoppingNum(shoppingNum+1);
		}else{
			hm.put(id, new BookService().getBookById(id));
		}
	}

	//返回该购物车的总价格
	public float getTotalPrice(){
		float totalPrice=0.0f;

		//得到总价格
		ArrayList<Book> al=new ArrayList<Book>();
		Iterator it=hm.keySet().iterator();
		while(it.hasNext()){
			//取出书号
			String bookId=(String)it.next();
			//取出书号对应的Book
			Book book=hm.get(bookId);
			totalPrice+=book.getPrice()*book.getShoppingNum();

		}

		return totalPrice;
	}

	//添加书籍
	public void addBook(String id,Book book){
		if(hm.containsKey(id)){
			book=hm.get(id);
			//如果这本书已经购买过,shoppingNum数量+1
			int shoppingNum=book.getShoppingNum();
			book.setShoppingNum(shoppingNum+1);
			//hm.put(id, book);
		}else{
		   hm.put(id, book);
		}

	}
	//删除书籍
	public void delBook(String id){
		hm.remove(id);
	}

	//更新书籍(对于购物车,更新所买书籍的数量)
	public void updateBook(String id,String nums){
		//取出id对应的Book
		Book book=hm.get(id);
		book.setShoppingNum(Integer.parseInt(nums));	

	}
	//显示该购物车中的所有商品信息
	public ArrayList showMyCart(){
		ArrayList<Book> al=new ArrayList<Book>();

		//遍历HashMap
		Iterator it=hm.keySet().iterator();
		while(it.hasNext()){
			//取出key
			String id=(String)it.next();
			//取出Book
			Book book=hm.get(id);
			al.add(book);
		}
		return al;
	}

	//清空书,清空购物车
	public void clearBook(){
		hm.clear();
	}

}

当点击 点击购买 链接时 提交给ShoppingClServlet处理

ShoppingClServlet.java

//该控制器处理用户购买商品的请求
public class ShoppingClServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();

		//接收type值,区分用户希望做什么,del,update,add
		String type=request.getParameter("type");
		if(type.equals("del")){
			//说明用户要删除商品
			//接收用户想购买的商品的id
			String id=request.getParameter("id");
			//得到购物车(从session中取得购物车)
			MyCart myCart=(MyCart)request.getSession().getAttribute("myCart");
			myCart.delBook(id);
			//把要显示的商品信息放入request
			request.setAttribute("bookList", myCart.showMyCart());

			//跳回showMyCart.jsp
			request.getRequestDispatcher("/WEB-INF/showMyCart.jsp").forward(request, response);

		}else if(type.equals("add")){
			//接收用户想购买的商品的id
			String id=request.getParameter("id");
			System.out.println(id);

			//什么时候创建购物车对象(当用户登录成功后,为他创建一个购物车)
			//取出购物车,并添加书到购物车中
			MyCart myCart=(MyCart)request.getSession().getAttribute("myCart");
			//相当于把商品加到购物车
			myCart.addBook2(id);
			/*
			//把要显示的数据放入request,准备显示。
			request.setAttribute("bookList", myCart.showMyCart());

			request.setAttribute("totalPrice", myCart.getTotalPrice()+"");
			//跳转到显示我的购物车去
			request.getRequestDispatcher("/WEB-INF/showMyCart.jsp").forward(request, response);
			*/
			//为了防止某个页面刷新,我们可以用sendredirect()
			response.sendRedirect("/shopping/GoShowMyCart");

		}else if(type.equals("update")){
			//更新
			//判断有没有书籍		

			//得到用户希望更新的书号和数量
			String bookIds[]=request.getParameterValues("id");
			//得到每本书的数量
			String nums[]=request.getParameterValues("booknum");
			MyCart myCart=(MyCart)request.getSession().getAttribute("myCart");
			for(int i=0;i<bookIds.length;i++){
				//更新购物车
				myCart.updateBook(bookIds[i], nums[i]);
			}
			//跳转回我的购物车
			//把要显示的数据放入request,准备显示。
			request.setAttribute("bookList", myCart.showMyCart());

			request.setAttribute("totalPrice", myCart.getTotalPrice()+"");
			//跳转到显示我的购物车去
			request.getRequestDispatcher("/WEB-INF/showMyCart.jsp").forward(request, response);
		}
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}

————摘自《韩顺平细说jsp》

时间: 2024-08-28 02:22:51

MVC简易购物车项目--购物大厅的相关文章

MVC简易购物车项目--展示购物车页面

在展示购物车这个页面可以看到自己的订单,并且可以修改商品的数量,并更新总价,还可以删除商品. 当在购物大厅点击购买时,提交给GoShowMyCart这个servlet处理 GoShowMyCart.java public class GoShowMyCart extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExceptio

Servlet+oracle MVC 架构 搭建简易购物车web项目---数据库设计

Servlet+oracle MVC 架构 搭建简易购物车web项目 主要实现以下功能: 1.用户登录,从数据库验证用户的合法性. 2.购物大厅,从数据库取出商品进行展示. 3.在购物大厅可以点击购买商品,跳到我的购物车界面. 4.在我的购物车页面,可以更新商品数量,并能够计算商品总价.可以删除商品.可以提交订单. 5.提交订单以后,进入订单页面,展示个人信息和订单信息  6.再次提交订单以后,给用户发送电子邮件,提醒用户. 数据库设计 用户表 create table users ( id n

asp.net mvc 简易通用自定义Pager实现分页

asp.net mvc 简易通用自定义Pager实现分页 Intro 一个WEB应用程序中经常会用到数据分页,本文将实现一个简单通用的分页组件,包含一个 PagerModel (用来保存页码信息),一个 HtmlHelper 的 Pager 扩展方法和一个 PagedListModel<T> 分页数据模型. PagerModel 分页模型 PagerModel 用来保存分页信息,代码实现如下: 1 /// <summary> 2 /// PagerModel 分页模型 3 ///

Asp.net MVC 4新项目中创建area的后续操作

Asp.net MVC 4新项目中创建area后,往往HomeController与area的HomeController路由发生混淆,需要手工设置一些地方避免mvc无法识别默认路由的状况. 无废话具体步骤: 1. 检查早Global.asax和\App_Start\RouteConfig.cs中是否已经自动添加了AreaRegistration.RegisterAllAreas();如不存在,进入第2步,否则第3步 2. 在\App_Start\RouteConfig.cs中,添加AreaRe

spring mvc 实战化项目之三板斧

接上文希望从一张表(tb_role_info 用户角色表)的CRUD展开spring mvc的项目实战化魅力. 开发技术选型:spring mvc+freemarker+bootstrap+mybatis+mysql. 项目目录结构: (1)业务表 tb_role_info -- ---------------------------- -- Table structure for `tb_role_info` 用户角色表 -- ---------------------------- DROP

Python 练习1——简易购物车

简易购物车用于了解购物车的大致原理,利用Python实现简易购物车的基本功能,即:用户将所选择的商品放入购物车中,结算时自动输出所购买商品及所剩余额. # -*- coding: UTF-8 -*- product_list = [ ('iphone',6000), ('Mac Pro',10000), ('bike',2000), ('Watch',16000), ('coffee',30), ('book',40)]shopping_list = []salary = input("Inpu

ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package

目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我的项目结构如下: 可以看到解决方案中就两个项目,AspNetCoreWebApp就是一个ASP.NET CORE MVC 2.0的项目,而MyNetCoreLib是一个.Net Core 2.0的类库项目,为了体现AspNetCoreWebApp是通过程序集来引用MyNetCoreLib的,我还在解

DRF 商城项目 - 购物( 购物车, 订单, 支付 )逻辑梳理

购物车 购物车模型 购物车中的数据不应该重复. 即对相同商品的增加应该是对购买数量的处理而不是增加一条记录 因此对此进行联合唯一索引, 但是也因此存在一些问题 class ShoppingCart(models.Model): user = models.ForeignKey(User, verbose_name=u"用户") goods = models.ForeignKey(Goods, verbose_name=u"商品") nums = models.Int

mvc购物车项目--提交订单并创建订单

SubmitOrderServlet.java public class SubmitOrderServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setC