第一:概念
购物车全过程的理解:
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">
共<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>
j2ee:servlet练习鲜花项目(购物车、分页、ajax、iframe弹出层、jquery、json(计算小计、总计)、map集合高级遍历、图片上传)
猜你喜欢
转载自1601844782.iteye.com/blog/2274217
今日推荐
周排行