JavaWeb_购物案例

来源:互联网 发布:跑跑辅助源码猴岛 编辑:程序博客网 时间:2024/05/26 14:09

DB位于db包

package cn.itcast.db;import java.util.LinkedHashMap;import java.util.Map;import cn.itcast.domain.Book;public class DB {  private static Map<String,Book> map=new LinkedHashMap<String,Book>();  static{    map.put("1", new Book("1","javascript","老张",59,"一本好书"));    map.put("2", new Book("2","javase","老毕",69,"一本好书"));    map.put("3", new Book("3","javaweb","老方",79,"一本好书"));    map.put("4", new Book("4","struts","老方",89,"一本好书"));    map.put("5", new Book("5","hibernate","老方",49,"一本好书"));    map.put("6", new Book("6","android","老黎",39,"一本好书"));  }  public static Map<String, Book> getAll(){    return map;  }}
BookDao位于dao包

package cn.itcast.dao;import java.util.Map;import cn.itcast.db.DB;import cn.itcast.domain.Book;public class BookDao {public Map<String , Book> getAll(){return DB.getAll();}public Book find(String id){return DB.getAll().get(id);}}

Book位于domain包

package cn.itcast.domain;public class Book {  private String id;  private String name;  private String author;  private double price;  private String description;  public Book() {    super();  }  public Book(String id, String name, String author, double price,      String description) {    super();    this.id = id;    this.name = name;    this.author = author;    this.price = price;    this.description = description;  }  public String getId() {    return id;  }  public void setId(String id) {    this.id = id;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public String getAuthor() {    return author;  }  public void setAuthor(String author) {    this.author = author;  }  public double getPrice() {    return price;  }  public void setPrice(double price) {    this.price = price;  }  public String getDescription() {    return description;  }  public void setDescription(String description) {    this.description = description;  }}
Cart位于domain包

package cn.itcast.domain;import java.util.LinkedHashMap;import java.util.Map;public class Cart {  //购物车里面有所有购物项(CartItem),用map维护,键盘是id号,值是购物项(book和数目)  private Map<String,CartItem> map=new LinkedHashMap<String,CartItem>();  private double price;//购物车的总价值  //方法添加书(分情况讨论)  public void add(Book book){    CartItem item=map.get(book.getId());    if(item==null){      item=new CartItem();      item.setBook(book);      item.setQuantity(1);      map.put(book.getId(), item);    }else{      //否则,书已经有了,就把数量加1      item.setQuantity(item.getQuantity()+1);    }  }  public Map<String, CartItem> getMap() {    return map;  }  public void setMap(Map<String, CartItem> map) {    this.map = map;  }  public double getPrice() {    //迭代map算出购物车的总价值    double totalPrice=0;    for (Map.Entry<String,CartItem>   entry : map.entrySet()) {      CartItem item=entry.getValue();      totalPrice+=item.getPrice();    }    this.price=totalPrice;    return price;  }  public void setPrice(double price) {    this.price = price;  }  }
CartItem位于domain包

package cn.itcast.domain;public class CartItem {  private Book book;  private int quantity;  private double price;//代表单种商品的总计  public Book getBook() {    return book;  }  public void setBook(Book book) {    this.book = book;  }  public int getQuantity() {    return quantity;  }  public void setQuantity(int quantity) {    this.quantity = quantity;    this.price=this.book.getPrice()*this.quantity;  }  public double getPrice() {    return price;  }  public void setPrice(double price) {    this.price = price;  }  }
ListBookServlet位于web.controller包

package cn.itcast.web.controller;import java.io.IOException;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.itcast.domain.Book;import cn.itcast.service.BusinessService;public class ListBookServlet extends HttpServlet {/*当在首页上点击超链接:显示所有书籍时,转到这儿 * ListBookServlet调用BusinessService业务服务取出所有书的集合 * 将集合存到request域里面, * 转发到listbook.jsp,由listbook.jsp从域里面取出所有书籍显示 */  public void doGet(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    BusinessService service=new BusinessService();    Map<String, Book> map=service.getAll();    request.setAttribute("map", map);    request.getRequestDispatcher("/WEB-INF/jsp/listbook.jsp").forward(request, response);  }  public void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    doGet(request, response);  }}
BusinessService位于service包

package cn.itcast.service;import java.util.Map;import cn.itcast.dao.BookDao;import cn.itcast.domain.Book;import cn.itcast.domain.Cart;public class BusinessService {//对外提供所有的业务服务  BookDao dao=new BookDao();  //服务1:得到所有书  public Map<String, Book> getAll(){    return dao.getAll();  }  //服务2:根据id查找某书  public Book find(String id){    return dao.find(id);  }  //服务3:根据id和购物车cart,移除购物车的map集合里对应的购物项  public void deleteCartItem(String id, Cart cart) {    cart.getMap().remove(id);  }  //服务4:将购物车cart里面的成员map清空  public void clearCart(Cart cart) {    cart.getMap().clear();  }  //服务4:设置购物车cart的成员map中的值(CartItem)的数量  public void changeItemQuantity(String id, String quantity, Cart cart) {    cart.getMap().get(id).setQuantity(Integer.parseInt(quantity));  }  }
BuyServlet位于web.controller包

package cn.itcast.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.itcast.domain.Book;import cn.itcast.domain.Cart;import cn.itcast.service.BusinessService;public class BuyServlet extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    String id=request.getParameter("id");    BusinessService service=new BusinessService();    Book book=service.find(id);    //从Session得到用户的购物车Cart,将book添加进去    Cart cart=(Cart) request.getSession().getAttribute("cart");    //用户第一次买,没有购物车,为其创建一个Cart,并存到session    if (cart==null) {      cart=new Cart();      request.getSession().setAttribute("cart", cart);    }    //至此,每个用户都有一个购物车Cart    cart.add(book);    //完成购买后,跳转到购物车显示页面(listcart.jsp)    //request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);    //跳转到购物车,使用重定向,由于WEB-INF禁止浏览器访问,先跳ListCartServlet    String path=request.getContextPath();///day10    response.sendRedirect(path+"/servlet/ListCartServlet");  }  public void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    doGet(request, response);  }}
deleteItemServlet位于web.controller包

package cn.itcast.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.itcast.domain.Cart;import cn.itcast.service.BusinessService;public class deleteItemServlet extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    /*     * 调用service删除购物车里指定的购物项     */    String id=request.getParameter("id");    Cart cart=(Cart) request.getSession().getAttribute("cart");    BusinessService service=new BusinessService();    service.deleteCartItem(id,cart);    //删除成功后,依然跳回listcart.jsp(转发-刷新会再删一次)    //request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);    //跳转到购物车,使用重定向,由于WEB-INF禁止浏览器访问,先跳ListCartServlet    String path=request.getContextPath();///day10    response.sendRedirect(path+"/servlet/ListCartServlet");  }  public void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    doGet(request, response);  }}
ClearCartServlet位于web.controller包

package cn.itcast.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.itcast.domain.Cart;import cn.itcast.service.BusinessService;public class ClearCartServlet extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    /*     * 调用service的方法,清空购物车!     */    Cart cart=(Cart) request.getSession(false).getAttribute("cart");    BusinessService service=new BusinessService();    service.clearCart(cart);    //清空cart里面的map后,依然跳回listcart.jsp(转发-刷新会再清空一次,无所谓!)    //request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);    //跳转到购物车,使用重定向,由于WEB-INF禁止浏览器访问,先跳ListCartServlet    String path=request.getContextPath();///day10    response.sendRedirect(path+"/servlet/ListCartServlet");  }  public void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    doGet(request, response);  }}
ChangeQuantityServlet位于web.controller包

package cn.itcast.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.itcast.domain.Cart;import cn.itcast.service.BusinessService;public class ChangeQuantityServlet extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    /*     * 将购物车中cart的书修改为指定数量     */    String id=request.getParameter("id");    String quantity=request.getParameter("quantity");    String regex="[1-9]\\d*";    boolean b=quantity.matches(regex);    if(!b){      request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);      return;    }    Cart cart=(Cart) request.getSession().getAttribute("cart");    BusinessService service=new BusinessService();    service.changeItemQuantity(id,quantity,cart);    //设置购物车cart的成员map中的值(CartItem)的数量后,跳回listcart.jsp(转发-刷新会再设置一次,无所谓!)    //request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);    //跳转到购物车,使用重定向,由于WEB-INF禁止浏览器访问,先跳ListCartServlet    String path=request.getContextPath();///day10    response.sendRedirect(path+"/servlet/ListCartServlet");  }  public void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    doGet(request, response);  }}
ListCartServlet位于web.UI包

package cn.itcast.web.ui;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ListCartServlet extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);  }  public void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    doGet(request, response);  }}
index.jsp位于web应用根目录

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>网站首页</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache">  </head>  <a href="${pageContext.request.contextPath }/servlet/ListBookServlet">浏览书籍</a>  <body>  </body></html>
listbook.jsp位于WEB-INF/jsp文件夹内

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>书籍列表页面</title>  </head>  <body style="text-align: center;">  <h2>书籍列表</h2>    <table width="70%" border="1">      <tr>        <td>书名</td>        <td>作者</td>        <td>售价</td>        <td>操作</td>        <td>描述</td>      </tr>      <c:forEach var="entry" items="${map}">        <tr>          <td>${entry.value.name }</td>          <td>${entry.value.author }</td>          <td>${entry.value.price }</td>          <td>${entry.value.description }</td>          <td><a href="${pageContext.request.contextPath }/servlet/BuyServlet?id=${entry.value.id }" target="_blank">购买</a> </td>        </tr>      </c:forEach>    </table>  </body></html>
listcart.jsp位于WEB-INF/jsp文件夹内

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>购物车列表</title>    <script type="text/javascript">        /*因为是先加载,所以传id进来*/        function deleteItem(id){          var b=window.confirm("您确认删除吗?");          if(b){            window.location.href="${pageContext.request.contextPath }/servlet/deleteItemServlet?id="+id;          }        }        function clearCart(){          var b=window.confirm("您确认删除吗?");          if(b){            window.location.href="${pageContext.request.contextPath }/servlet/ClearCartServlet";          }        }        function changeQuantity(input,id,oldNum){          var quantity=input.value;          /*          //先检查是不是数字          if(isNaN(quantity)){            alert("请输入正整数!");            input.value=oldNum;            return;          }*/          if(quantity<0||quantity!=parseInt(quantity)){            input.value=oldNum;            alert("请输入正整数!");            input.focus();            return;          }          var b=window.confirm("您确定购买"+quantity+"本吗?");          if(b){            window.location.href="${pageContext.request.contextPath }/servlet/ChangeQuantityServlet?id="+id+"&quantity="+quantity;          }else{            input.value=oldNum;          }        }    </script>  </head><body style="text-align: center;">  <h2>购物车列表</h2>  <c:if test="${empty(cart.map)}">  您尚未购买任何商品    <a href="${pageContext.request.contextPath }/servlet/ListBookServlet">浏览书籍</a>  </c:if>  <c:if test="${!empty(cart.map)}">    <table width="70%" border="1">      <tr>        <td>书名</td>        <td>作者</td>        <td>单价</td>        <td>数量</td>        <td>小计</td>        <td>操作</td>      </tr>      <c:forEach var="entry" items="${cart.map}">        <tr>          <td>${entry.value.book.name }</td>          <td>${entry.value.book.author }</td>          <td>${entry.value.book.price }</td>          <td><input style="width: 35px;" type="text" value="${entry.value.quantity}" onchange="changeQuantity(this,${entry.key },${entry.value.quantity})"/> </td>          <td>${entry.value.price}</td>          <td><a href="javascript:void(0)" onclick="deleteItem(${entry.key })">删除</a> </td>        </tr>      </c:forEach>      <tr>        <td colspan="3">总计</td>        <td colspan="2">${cart.price }元</td>        <td>          <a href="javascript:void(0)" onclick="clearCart()">清空购物车</a>       </td>      </tr>          </table>  </c:if>  </body></html>
















原创粉丝点击