栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

servlet版购物车项目(上)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

servlet版购物车项目(上)

目录

一、项目相关技术

二、项目介绍

1.目录展示

2.界面展示

登录界面

主页面

购物车页面

三、代码展示

1.数据库帮助包:DBHelper.java

2.实体类

用户:User.java

商品:Goods.java

订单:OrderItem.java

3.数据库访问层接口

用户数据库访问层接口:IUserDao.java

商品数据库访问层接口:IGoodsDao.java

4.实现数据库访问层接口的类

用户:UserDaoImpl.java

商品:GoodsDaoImpl.java

5.业务逻辑层接口

用户业务逻辑层接口:IUserBiz.java

商品业务逻辑层接口:IGoodsBiz.java

6.实现业务逻辑层接口的类

用户:UserBizImpl.java

商品:GoodsBizImpl.java

7.过滤器:LoginFilter.java

8.处理功能

增加购物车:AddServlet.java

清空购物车:ClearServlet.java 

删除购物车商品:DelServlet.java

主页面数据显示:IndexServlet.java

登录判断:LoginServlet.java

增减商品:UpdServlet.java

9.web界面

登录界面:Login.jsp

主界面:index.jsp

购物车界面:car.jsp


一、项目相关技术

开发软件: 支持web开发的eclipse

开发模式: 三层架构

将java代码从jsp文件中分离: 使用Servlet技术实现

访问权限: 使用Filter过滤器实现

二、项目介绍

1.目录展示

 

2.界面展示

登录界面

登录成功后进入主界面

主页面

主界面可以拿到用户名,点击加入购物车后可点击去购物车查看你添加进购物车的物品。

购物车页面

刚加进来都会有一件商品,可增加减少和删除商品

 

三、代码展示

1.数据库帮助包:DBHelper.java
package com.xyz.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.jdbc.driver.OracleDriver;

public class DBHelper {
	
	static {
//		OracleDriver
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
	
	public static Connection getCon() {
		try {
			return DriverManager.getConnection(URL, "scott", "zkingedu");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	public static void close(Connection con,PreparedStatement ps,ResultSet rs) {
		try {
			if(con!=null&&!con.isClosed()) {
				con.close();
			}
			if(ps!=null) {
				ps.close();
			}
			if(rs!=null) {
				rs.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

2.实体类

用户:User.java
package com.xyz.pojo;



public class User {

    private Integer id;
    private String account;
    private String password;
    
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
    
    public User() {
		// TODO Auto-generated constructor stub
	}
    
	public User(Integer id, String account, String password) {
		super();
		this.id = id;
		this.account = account;
		this.password = password;
	}
	
	@Override
	public String toString() {
		return "User [id=" + id + ", account=" + account + ", password=" + password + "]";
	}
    
}

商品:Goods.java
package com.xyz.pojo;



public class Goods {

    private Integer id;
    private String name;
    private String describe;
    private Integer price;
    
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescribe() {
		return describe;
	}
	public void setDescribe(String describe) {
		this.describe = describe;
	}
	public Integer getPrice() {
		return price;
	}
	public void setPrice(Integer price) {
		this.price = price;
	}
    
    public Goods() {
		// TODO Auto-generated constructor stub
	}
    
	public Goods(Integer id, String name, String describe, Integer price) {
		super();
		this.id = id;
		this.name = name;
		this.describe = describe;
		this.price = price;
	}
	
	@Override
	public String toString() {
		return "Goods [id=" + id + ", name=" + name + ", describe=" + describe + ", price=" + price + "]";
	}
    

}

订单:OrderItem.java
package com.xyz.pojo;



public class OrderItem {

    private Integer id;
    private Integer orderId;
    private Goods goods;
    private Integer quantity;
    private Integer total;
    
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getOrderId() {
		return orderId;
	}
	public void setOrderId(Integer orderId) {
		this.orderId = orderId;
	}
	public Goods getGoods() {
		return goods;
	}
	public void setGoods(Goods goods) {
		this.goods = goods;
	}
	public Integer getQuantity() {
		return quantity;
	}
	public void setQuantity(Integer quantity) {
		this.quantity = quantity;
	}
	public Integer getTotal() {
		return total;
	}
	public void setTotal(Integer total) {
		this.total = total;
	}
    
    public OrderItem() {
		// TODO Auto-generated constructor stub
	}
    
	public OrderItem(Integer id, Integer orderId, Goods goods, Integer quantity, Integer total) {
		super();
		this.id = id;
		this.orderId = orderId;
		this.goods = goods;
		this.quantity = quantity;
		this.total = total;
	}
	
	@Override
	public String toString() {
		return "OrderItem [id=" + id + ", orderId=" + orderId + ", goods=" + goods + ", quantity=" + quantity
				+ ", total=" + total + "]";
	}
    

}

3.数据库访问层接口

用户数据库访问层接口:IUserDao.java
package com.xyz.dao;

import com.xyz.pojo.User;



public interface IUserDao {

    User login(User user);

}

商品数据库访问层接口:IGoodsDao.java
package com.xyz.dao;

import com.xyz.pojo.Goods;

import java.util.List;



public interface IGoodsDao {

    List list();

    Goods one(int id);

}

4.实现数据库访问层接口的类

用户:UserDaoImpl.java
package com.xyz.dao.impl;

import com.xyz.dao.IUserDao;
import com.xyz.pojo.User;
import com.xyz.util.DBHelper;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;



public class UserDaoImpl implements IUserDao {

    //定义资源
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;

    @Override
    public User login(User user) {
        try {
            con = DBHelper.getCon();
            ps=con.prepareStatement("select * from car_user where account=?");
            ps.setString(1, user.getAccount());
            rs=ps.executeQuery();
            if(rs.next()){
                User u=new User();
                u.setId(rs.getInt(1));
                u.setAccount(rs.getString(2));
                u.setPassword(rs.getString(3));
                return u;
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBHelper.close(con,ps,rs);
        }
        return null;
    }

}

商品:GoodsDaoImpl.java
package com.xyz.dao.impl;

import com.xyz.dao.IGoodsDao;
import com.xyz.pojo.Goods;
import com.xyz.util.DBHelper;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;



public class GoodsDaoImpl implements IGoodsDao {

    //定义资源
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;

    @Override
    public List list() {
        List list = new ArrayList();
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select * from car_goods");
            rs = ps.executeQuery();
            while (rs.next()) {
                Goods goods = new Goods();
                goods.setId(rs.getInt(1));
                goods.setName(rs.getString(2));
                goods.setDescribe(rs.getString(3));
                goods.setPrice(rs.getInt(4));
                list.add(goods);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return list;
    }

    @Override
    public Goods one(int id) {
        List list = new ArrayList();
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select * from car_goods where id=?");
            ps.setInt(1,id);
            rs = ps.executeQuery();
            if (rs.next()) {
                Goods goods = new Goods();
                goods.setId(rs.getInt(1));
                goods.setName(rs.getString(2));
                goods.setDescribe(rs.getString(3));
                goods.setPrice(rs.getInt(4));
                return goods;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return null;
    }

}

5.业务逻辑层接口

用户业务逻辑层接口:IUserBiz.java
package com.xyz.biz;

import com.xyz.pojo.User;



public interface IUserBiz {

    User login(User user);

}

商品业务逻辑层接口:IGoodsBiz.java
package com.xyz.biz;

import com.xyz.pojo.Goods;

import java.util.List;



public interface IGoodsBiz {

    List list();

    Goods one(int id);

}

6.实现业务逻辑层接口的类

用户:UserBizImpl.java
package com.xyz.biz.impl;

import org.apache.commons.codec.digest.DigestUtils;

import com.xyz.biz.IUserBiz;
import com.xyz.dao.IUserDao;
import com.xyz.dao.impl.UserDaoImpl;
import com.xyz.pojo.User;




public class UserBizImpl implements IUserBiz {

	private IUserDao userDao=new UserDaoImpl();

    @Override
    public User login(User user) {
        //user 是用户给进来的,u 是数据库中存在的
        User u = userDao.login(user);
        if(u==null){
            return null;//account账号在数据库中查询不到记录
        }
        //需要将前端给我的那个用户的密码加密之后再和数据库的密码进行比较
        String pwd= DigestUtils.md5Hex(user.getPassword());
        if(!u.getPassword().equals(pwd)){
            return null;//账号存在,但是密码不一致
        }
        return u;
    }

}

商品:GoodsBizImpl.java
package com.xyz.biz.impl;

import com.xyz.biz.IGoodsBiz;
import com.xyz.dao.IGoodsDao;
import com.xyz.dao.impl.GoodsDaoImpl;
import com.xyz.pojo.Goods;

import java.util.List;



public class GoodsBizImpl implements IGoodsBiz {

    private IGoodsDao goodsDao=new GoodsDaoImpl();

    @Override
    public List list() {
        return goodsDao.list();
    }

    @Override
    public Goods one(int id) {
        return goodsDao.one(id);
    }
}

7.过滤器:LoginFilter.java
package com.xyz.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;



@WebFilter("

@WebServlet("/add.do")
public class AddServlet extends HttpServlet {

    private IGoodsBiz GoodsBiz = new GoodsBizImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	//购物车在哪里?
        List car = (List) req.getSession().getAttribute("car");
        //是哪件商品?需要用户带一个商品的id
        int id = Integer.parseInt(req.getParameter("id"));
        //购物车中已经有了,数量+1
        boolean f = true;
        for (OrderItem item : car) {
            // item就是订单项,订单项中有一个与他对应的商品
            if (item.getGoods().getId().equals(id)) {
                //数量+1
                item.setQuantity(item.getQuantity() + 1);
                //价格需要重新计算
                item.setTotal(item.getQuantity() * item.getGoods().getPrice());
                f = false;
                break;
            }
        }
        //购物车中没有,添加购物车
        if (f) {
            //生成了订单项
            OrderItem item = new OrderItem();
            //根据商品的id去数据库查出这件商品
            Goods one = GoodsBiz.one(id);
            item.setGoods(one);
            item.setQuantity(1);
            item.setTotal(one.getPrice());
            //添加订单项到购物车
            car.add(item);
        }
        req.getSession().setAttribute("total", car.stream()
                .mapToInt(OrderItem::getTotal)
                .sum());
        //返回首页
        resp.sendRedirect("index.do");
    }

}

清空购物车:ClearServlet.java 
package com.xyz.servlet;

import com.xyz.pojo.OrderItem;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;


@WebServlet("/clear.do")
public class ClearServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	//购物车在哪里?
        List car = (List)req.getSession().getAttribute("car");
        //清空购物车
        car.clear();
        //返回首页
        resp.sendRedirect("car.jsp");
    }

}

删除购物车商品:DelServlet.java
package com.xyz.servlet;

import com.xyz.pojo.Goods;
import com.xyz.pojo.OrderItem;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;



@WebServlet("/del.do")
public class DelServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	//购物车在哪里?
        List car = (List)req.getSession().getAttribute("car");
        //是哪件商品?需要用户带一个商品的id
        int id = Integer.parseInt(req.getParameter("id"));
        //购物车中已经有了,删除
        OrderItem i=null;
        for (OrderItem item : car) {
            // item就是订单项,订单项中有一个与他对应的商品
            if(item.getGoods().getId().equals(id)){
                //你就是我要删除的
                i=item;
                break;
            }
        }
        car.remove(i);
        req.getSession().setAttribute("total",car.stream()
                .mapToInt(OrderItem::getTotal)
                .sum());
        //返回首页
        resp.sendRedirect("car.jsp");
    }

}

主页面数据显示:IndexServlet.java
package com.xyz.servlet;

import com.xyz.biz.IGoodsBiz;
import com.xyz.biz.impl.GoodsBizImpl;
import com.xyz.pojo.Goods;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;


@WebServlet("/index.do")
public class IndexServlet extends HttpServlet {

    private IGoodsBiz goodsBiz=new GoodsBizImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	//取到biz层中的商品数据的集合
        List list = goodsBiz.list();
        //把数据放到index.jsp中去显示
        //request【转发】 session appliction
        req.setAttribute("list",list);
        //只有转发才能携带请求的数据
        req.getRequestDispatcher("index.jsp").forward(req,resp);
   }

}

登录判断:LoginServlet.java
package com.xyz.servlet;

import com.xyz.biz.IUserBiz;
import com.xyz.biz.impl.UserBizImpl;
import com.xyz.pojo.Goods;
import com.xyz.pojo.OrderItem;
import com.xyz.pojo.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {

    private IUserBiz userBiz=new UserBizImpl();

    //接收用户的数据: 【post】【get】

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        //参数的获取
        String account = req.getParameter("account");
        String password = req.getParameter("password");
        User user = new User();
        user.setAccount(account);
        user.setPassword(password);
        //去biz完成登录验证
        // 表示层(servlet)->业务逻辑层(biz)->数据库访问层(dao)
        User u = userBiz.login(user);
        if(u==null){
            resp.sendRedirect("login.jsp");
        }else{
            //将数据放到session中
            req.getSession().setAttribute("user",u);
            //为这个用户生成一个购物车
            List car=new ArrayList<>();
            req.getSession().setAttribute("car",car);
            //把总价直接放到session中
            req.getSession().setAttribute("total",0);
            //去到首页
            resp.sendRedirect("index.do");
        }
    }


}

增减商品:UpdServlet.java
package com.xyz.servlet;

import com.xyz.pojo.Goods;
import com.xyz.pojo.OrderItem;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;



@WebServlet("/upd.do")
public class UpdServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	//购物车在哪里?
        List car = (List)req.getSession().getAttribute("car");
        //是哪件商品?需要用户带一个商品的id
        int id = Integer.parseInt(req.getParameter("id"));
        //获取需要改变的类型(1,-1)
        int type = Integer.parseInt(req.getParameter("type"));
        //购物车中已经有了,数量+1
        for (OrderItem item : car) {
            // item就是订单项,订单项中有一个与他对应的商品
            if(item.getGoods().getId().equals(id)){
                //数量+还是-
                int count = item.getQuantity() + type;
                if(count<1)count=1;//最少一个
                if(count>5)count=5;//最多5个
                item.setQuantity(count);
                //价格需要重新计算
              item.setTotal(item.getQuantity()*item.getGoods().getPrice());
                req.getSession().setAttribute("total",car.stream()
                        .mapToInt(OrderItem::getTotal)
                        .sum());
                break;
            }
        }
        //返回首页
        resp.sendRedirect("car.jsp");
    }

}

9.web界面

登录界面:Login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>



    
    
    
    
    
    登录界面
    


登录

主界面:index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>



    
    
    
    
    
    主界面
    


    



    ${user.account},您好, 这是首页


    点我去购物车


    
商品编号 商品名称 商品描述 商品价格 商品操作
${goods.id} ${goods.name} ${goods.describe} ${goods.price} 加入

购物车界面:car.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>



    
    
    
    
    
    购物车界面



    
        ${user.account},您好, 这是购物车
    
    
        继续购买
        订单结算
        查看订单
        清空
    
    
            
商品编号 商品名字 商品数量 商品总价 商品操作
${item.goods.id} ${item.goods.name} ${item.quantity} ${item.total} 删除 +1 -1
total: ${total}

就分享到这啦,还有剩余部分以及优化下期再分享。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847600.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号