j2ee:servlet练习鲜花项目(购物车、分页、ajax、iframe弹出层、jquery、json(计算小计、总计)、map集合高级遍历、图片上传)

第一:概念
购物车全过程的理解:
 1.新建一个购物车类,这样,这个类里面就可以封装商品对象和商品数量了。
 2.每种商品都是一个购物车
 3.把所有的购物车放在一起,也就是放在一个map集合中,这样也就是购买多个商品(一个或者多个),商品放在后一起提交订单。
 4.重点:每次添加商品其实就是往map集合中添加一个购物车对象(购物车对象是根据购物车这个实体类创建的)
 5.重点:购物完成之后把这个map集合放在sesison域中
 6.也就是说第一次购买商品的时候创建一个map集合,第一次购买某个商品的时候创建一个购物车对象car。把每个商品car都放在集合map中。最终把集合放在session中
 7.为什么要使用集合存放购物车?因为集合是长度可变的数组,因此可以完成商品的添加和移除。   第二:代码 1.购物车类 package com.entity;
//购物车类
public class CarItem {
 private Flower flower;
 private int count;
 public Flower getFlower() {
  return flower;
 }
 public void setFlower(Flower flower) {
  this.flower = flower;
 }
 public int getCount() {
  return count;
 }
 public void setCount(int count) {
  this.count = count;
 }
 
} 2:购物车的实现、json计算小计和总计 package com.action; import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry; 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.comm.FormatDate;
import com.dao.FlowerDao;
import com.dao.impl.FlowerDaoImpl;
import com.entity.CarItem;
import com.entity.Flower;
import com.entity.Orders;
import com.entity.UserInfo;
import com.google.common.collect.Iterables; public class FlowerServlet extends HttpServlet{
 FlowerDao fdao= new FlowerDaoImpl();  @SuppressWarnings("unused")
 @Override
 protected void service(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
   req.setCharacterEncoding("gbk");
   String op=req.getParameter("op");
   if(op==null){
    this.IndexFlower(req, resp);
   }else
   if(op.equals("searchoneflower")){
    this.DetailsFlower(req, resp);
   }else
   if(op.equals("addflower")){
    this.ShopFlower(req, resp);
   }else
   if(op.equals("kong")){
    ClearCart(req,resp);
   }else
   if(op.equals("tj")){
    TjCart(req,resp);
   }else
   if(op.equals("clearone")){
    this.ClearOne(req, resp);
   }else
   if(op.equals("updateCount")){
    this.UpdateCount(req, resp);
   }else
   if(op.equals("SearcAll")){
    SearchPage(req,resp);
   }else
  if(op.equals("AdminSearchAll")){
   AdminSearchAll(req,resp);
   }
  
   /*if(op.equals("SearcAll")){
    SearcAll(req,resp);
   }*/
 }
 
 @SuppressWarnings("unchecked")
 protected void IndexFlower(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  //req.setCharacterEncoding("utf-8");
  FlowerDao fdao = new FlowerDaoImpl();
  //1.首页鲜花
    ArrayList<Flower> flist=(ArrayList<Flower>)fdao.SearchFlower(); 
  //2.首页蛋糕
    ArrayList<Flower> fclist=(ArrayList<Flower>)fdao.findCake(); 
  //3.查找新礼蓝
    ArrayList<Flower> fllist=(ArrayList<Flower>)fdao.findLiLan();
  //4.判断
    if(flist!=null&&flist.size()>0&&fclist!=null&&fclist.size()>0&&fllist!=null&&fllist.size()>0){
     HttpSession session=req.getSession();
     session.setAttribute("flist", flist);
     session.setAttribute("fclist", fclist);
     session.setAttribute("fllist", fllist);
     resp.sendRedirect("index.jsp");
    }else{
     resp.sendRedirect("error.jsp");
    }
 }
 
 
 
   
 //1.在首页查询鲜花详情
 protected void DetailsFlower(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String flowerId=req.getParameter("flowerId");
  Flower flower=fdao.DetailsFlower(Integer.parseInt(flowerId));
  if(flower!=null){
   HttpSession session=req.getSession();
   session.setAttribute("flower", flower);
   resp.sendRedirect("details.jsp");
  }else{
   resp.sendRedirect("flowerServlet");
  } 
 }
 
 //2.把鲜花添加到购物车
 @SuppressWarnings("unused")
 protected void ShopFlower(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  HttpSession session=req.getSession();
  //1.判断是否已经登陆
  Object obj=session.getAttribute("u");
  if(obj==null){
   System.out.println("没有登陆成功,没有用户");
   resp.sendRedirect("login.jsp");
   return;
  }
  //2.进行添加到购物车的操作
  CarItem car=null;
  int flowerId=Integer.parseInt(req.getParameter("flowerId"));
  Flower flower=(Flower) session.getAttribute("flower");
  Map mycart=(Map)session.getAttribute("mycart");//创建map结合当做购物车,并把session容器中的内容放在map容器中。这里已经不是第一次购买了。
  if(mycart==null){//第一次购购物,购物车为空
   mycart=new HashMap();//第一次购物的时候给他一个购物
   System.out.println("第一次使用购物车");
  }
    
  if(mycart.keySet().contains(flowerId)){//如果这次添加的商品在购物车里出现过
   System.out.println("重复购买该商品");
   car=(CarItem) mycart.get(flower.getFlowerId());
   car.setCount(car.getCount()+1);  
  }else{//第一次买
   System.out.println("第一次购买该商品");
   car = new CarItem();
   car.setFlower(flower);
   car.setCount(1);
  }
   
  
  mycart.put(flowerId, car);//每个商品对象都是购物车里的一员。该商品对象必须包含商品的主键和数量,因此创建一个新的实体类
  System.out.println("种类:"+mycart.size());;
  session.setAttribute("mycart", mycart);//此session用于保存商品对象
  resp.sendRedirect("shopCart.jsp");
  
 }
 
 
 //3.清空购物车
 protected void ClearCart(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  HttpSession session=req.getSession();
  session.removeAttribute("mycart");
  resp.sendRedirect("flowerServlet");
 }
  
 //4.提交购物车
 protected void TjCart(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  HttpSession session=req.getSession();
  //1.判断当前是否登陆
  Object obj=session.getAttribute("u");
  if(obj==null){
   resp.sendRedirect("login.jsp");
   return;
  }
  //2.判断购物车是否有商品
  Object obj2=session.getAttribute("mycart");
  if(obj2==null){
   PrintWriter out=resp.getWriter();
   out.print("<script>alert('请先去首页添加商品');location.href='flowerServlet'</script>");
   return;
  }
  //3.提交购物车
  resp.sendRedirect("order.jsp");
 }
 
 
/* //5.清除点单中的某个商品,清除mycart这个session容器里的某一个值。
 protected void ClearOne(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String flowerId=req.getParameter("flowerId");
  HttpSession session=req.getSession();
  Map map=(Map) session.getAttribute("mycart");//用map集合接收购物车
  Set set=map.keySet();
  Map map1=new HashMap();//新建一个map1集合用于接收筛选后的map集合
  Object[] arr= set.toArray();
  for(int x=0;x<arr.length;x++){
   if(arr[x].toString().equals(flowerId)){
    map.remove(arr[x]);//如果是要删除的就删除
   }else{
    map1.put(arr[x], map.get(arr[x]));//如果不是要删除的就把内容从map集合存到map1集合中
   }
  }
  session.setAttribute("mycart", map1);//键不变,还是原来购物车的那个键,值变成新的了。
  if(map!=null&&map.size()>0){
    resp.sendRedirect("shopCart.jsp");//如果map集合不为空说明该订单里还有商品,因此显示该订单里的商品
  }else{
    resp.sendRedirect("flowerServlet");//如果map集合为空说明该订单下没有商品了,就直接跳到首页 
  }
  }
 */
 
 ///5.注意:这里是对上面的删除购物车里某个商品的功能的改进,也就是使用另一种思路写的该方法。
 //清除点单中的某个商品,清除mycart这个session容器里的某一个值。
 protected void ClearOne(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String flowerId=req.getParameter("flowerId");
  HttpSession session=req.getSession();
  Map mycart=(Map) session.getAttribute("mycart");//mycart是存放所有购物车的
     CarItem car= (CarItem) mycart.get(Integer.parseInt(flowerId));//这是要删除的某个具体的购物车
    // System.out.println("输出:"+car.getFlower()+"  "+mycart.size());
     mycart.remove(Integer.parseInt(flowerId));
     //System.out.println("输出:"+car.getFlower()+"  "+mycart.size());
    // session.setAttribute("mycart", mycart);不许要写这句话。因为我们只是修改了里面的值
     if(mycart!=null&&mycart.size()>0){
      resp.sendRedirect("shopCart.jsp");
     }else{
      resp.sendRedirect("flowerServlet");
      
     }
    
  }
 
/* //6.修改购物车中某商品的数量
 protected void UpdateCount(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String flowerId=req.getParameter("flowerId");
  HttpSession session=req.getSession();
  Map mycart=(Map) session.getAttribute("mycart");
  CarItem car=(CarItem) mycart.get(Integer.parseInt(flowerId));//通过键找值
  String count=req.getParameter("count");
  //System.out.println("数量:"+count);
  if(count.equals("0")){
   mycart.remove(Integer.parseInt(flowerId));
  }else{
   car.setCount(Integer.parseInt(count));
  } 
  session.setAttribute("mycart", mycart);
  resp.sendRedirect("shopCart.jsp");  
 }*/
 //6.修改购物车中某商品的数量,并按照老师的思路,修改数量的同时修改了小计和总计
 protected void UpdateCount(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String flowerId=req.getParameter("flowerId");
  HttpSession session=req.getSession();
  Map<String,CarItem>  mycart=(Map) session.getAttribute("mycart");
  CarItem car=(CarItem) mycart.get(Integer.parseInt(flowerId));//通过键找值
  String count=req.getParameter("count");
  //System.out.println("数量:"+count);
  if(count.equals("0")){
   mycart.remove(Integer.parseInt(flowerId));
  }else{
   car.setCount(Integer.parseInt(count));
  } 
  session.setAttribute("mycart", mycart);
  
  double xj=car.getCount()*car.getFlower().getCurrentPrice();//小计
  double zj=0;//总计
  for(Entry<String,CarItem> e:mycart.entrySet())
  {
   //xj=e.getValue().getCount()*e.getValue().getFlower().getCurrentPrice();
   zj=zj+(e.getValue().getCount()*e.getValue().getFlower().getCurrentPrice());
  }
  
  /*PrintWriter out=resp.getWriter();
  System.out.println("修改了数量:"+car.getCount());
  out.print(car.getCount());*/
  PrintWriter out =resp.getWriter();
  String json="[{\"xj\":"+xj+",\"zj\":"+zj+"}]";
  System.out.println(json);
  out.print(json);
 }
 
 //没使用分页的查询鲜花
 protected void SearcAll(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String typeId=req.getParameter("type");
  ArrayList<Flower> flowerList=(ArrayList<Flower>) fdao.SearcAll(Integer.parseInt(typeId));
  if(flowerList!=null&&flowerList.size()>0){
   HttpSession session=req.getSession();
   session.setAttribute("flowerList", flowerList);
   resp.sendRedirect("flower.jsp");
  }else{
   resp.sendRedirect("error.jsp");
  }
 }
 
 //使用分页查询鲜花
 protected void SearchPage(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String typeId=req.getParameter("type");
  //实现分页中的上一页和下一页
  int pageNum=0;//初始化当前页
  int pageSize=0;//初始化页大小
  String pn=req.getParameter("pn");
  if(pn==null){
   pageNum=1;
   pageSize=10;
  }
  else{
   pageNum=Integer.parseInt(pn); 
   pageSize=10;
  }
  ArrayList<Flower> flowerList=(ArrayList<Flower>) fdao.searchPage(pageNum, pageSize,(pageNum-1)*pageSize,Integer.parseInt(typeId));
  //实现末页
  int toatlpage=fdao.getTotalPage(pageSize,Integer.parseInt(typeId));
  //System.out.println("总页数:"+toatlpage);
  //跳转
  if(flowerList!=null&&flowerList.size()>0){
   HttpSession session=req.getSession();
   session.setAttribute("flowerList", flowerList);
   session.setAttribute("pageNum", pageNum);
   session.setAttribute("pageSize", pageSize);
   session.setAttribute("toatlpage", toatlpage);
   if(Integer.parseInt(typeId)==0)
   {
    resp.sendRedirect("flower.jsp");
   }
   else if(Integer.parseInt(typeId)==1)
   {
    resp.sendRedirect("cake.jsp");
   }
   else if(Integer.parseInt(typeId)==2)
   {
    resp.sendRedirect("gift.jsp");
   }
   else if(Integer.parseInt(typeId)==3)
   {
    resp.sendRedirect("lvZhiHuaHui.jsp");
   }
   else if(Integer.parseInt(typeId)==4)
   {
    resp.sendRedirect("shangWu.jsp");
   }
  }else{
   resp.sendRedirect("error.jsp");
  }
 }
 protected void AdminSearchAll(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  //实现分页中的上一页和下一页
  int pageNum=0;//初始化当前页
  int pageSize=0;//初始化页大小
  String pn=req.getParameter("pn");
  if(pn==null){
   pageNum=1;
   pageSize=10;
  }
  else{
   pageNum=Integer.parseInt(pn); 
   pageSize=10;
  }
  ArrayList<Flower> flowerList=(ArrayList<Flower>) fdao.AdminsearchPage(pageNum, pageSize);
  int toatlpage=fdao.AdmingetTotalPage(pageSize);
  if(flowerList!=null&&flowerList.size()>0){
   HttpSession session=req.getSession();
   session.setAttribute("flowerList", flowerList);
   session.setAttribute("pageNum", pageNum);
   session.setAttribute("pageSize", pageSize);
   session.setAttribute("toatlpage", toatlpage);
   resp.sendRedirect("Admin/flowerList.jsp");
  }else{
   resp.sendRedirect("error.jsp");
  }
 }
}  3.分页 <%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri=" http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'orderList.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  <script type="text/javascript">
    function go(){
     var p=document.getElementById("p").value;
     var maxpage=document.getElementById("maxpage").value;//注意:开始想写个隐藏域,但是js中不支持隐藏域。注意这里通过id获得值不支持使用type="hidde"
     //alert("设计出:"+p+" "+maxpage);
     if(p>maxpage){
     alert("你输入的页数过大,请重写输入");
      //window.history.back();
      return;
     }else{
     window.location.href="../orderServlet?op=AdminfindOrdersPage&pn="+p;
     }
    }
    </script>
 
<link href="CSS/style.css" rel="stylesheet" type="text/css">
    <link href="../CSS/style.css" rel="stylesheet" type="text/css">
  </head>
  <script type="text/javascript" src="JS/amdinDivControl.js"></script>
  <body>
  <br>
  <form name="form1" method="post" action="DeleteServlet?type=order">
    <table width="605" height="102" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#84C1C1">
      <tr>
        <td width="76" height="35" align="center" bgcolor="#84C1C1" class="font"><input type="submit" name="Submit" value="删除" onClick="deleteE()"></td>
        <td width="105" align="center" bgcolor="#84C1C1" class="font">订单编号</td>
        <td width="106" align="center" bgcolor="#84C1C1" class="font">订单人</td>
        <td width="110" align="center" bgcolor="#84C1C1" class="font">订单总价</td>
        <td width="133" align="center" bgcolor="#84C1C1" class="font">订单状态</td>
        <td width="198" align="center" bgcolor="#84C1C1" class="font">订单时间</td>
      </tr>
      <c:forEach items="${orderList}" var="order">
      <tr>
        <td height="33" align="center" bgcolor="#FFFFFF" class="font"><input type="checkbox" name="checkbox" value="${order.orderId}"></td>
        <td align="center" bgcolor="#FFFFFF" class="font">${order.orderCode }</td>
        <td align="center" bgcolor="#FFFFFF" class="font">${order.userName }</td>
        <td align="center" bgcolor="#FFFFFF" class="font">${order.total }</td>
        <td align="center" bgcolor="#FFFFFF" class="font">${order.orderStatus==1?"正在处理":"完成交易"}</td>
        <td align="center" bgcolor="#FFFFFF" class="font">${order.orderTime}</td>
      </tr>
      </c:forEach>
      <tr>
        <td height="29" colspan="6" align="right" bgcolor="#FFFFFF" class="font">
        <c:choose>
      <c:when test="${pageNum eq 1}">
         <a href="orderServlet?op=AdminfindOrdersPage&pn=${pageNum+1}" style="text-decoration: none;">下一页</a>
         <a href="orderServlet?op=AdminfindOrdersPage&pn=${toatlpage}" style="text-decoration: none;">末页</a>  
      </c:when>
      <c:when test="${pageNum eq toatlpage}">
      <a href="orderServlet?op=AdminfindOrdersPage&pn=${pageNum-1 }"style="text-decoration: none;">上一页</a>
      <a href="orderServlet?op=AdminfindOrdersPage&pn=1" style="text-decoration: none;">首页</a>                       
      </c:when>
      <c:otherwise>
           <a href="orderServlet?op=AdminfindOrdersPage&pn=${pageNum+1}" style="text-decoration: none;">下一页</a>
        <a href="orderServlet?op=AdminfindOrdersPage&pn=${pageNum-1 }"style="text-decoration: none;">上一页</a>
        <a href="orderServlet?op=AdminfindOrdersPage&pn=1" style="text-decoration: none;">首页</a>
        <a href="orderServlet?op=AdminfindOrdersPage&pn=${toatlpage}" style="text-decoration: none;">末页</a>             
      </c:otherwise>
  </c:choose> 
           当前页:<input type="text" value="${pageNum }" readonly="readonly" size="4">&nbsp; 
           共<input type="text" value="${toatlpage }" id="maxpage" readonly="readonly" size="4">页    
           <input type="text" size="4" id="p" value="${pageNum}">           
           <a href="javascript:go()">go</a> 
        </td>
      </tr>
    </table>
  </form>
  </body>
</html>  

猜你喜欢

转载自1601844782.iteye.com/blog/2274217
今日推荐