项目案例:JavaWeb14购物车案例

目录

项目实现功能

显示层

用户登录界面  login.jsp

用户登录操作页面  doLogin.jsp

主页主界面  index.jsp

添加购物车操作界面(添加至主页数组)  doAddCart.jsp

实体类

商品实体类  Goods.java

用户实体类 User.java

数据库帮助类  DBHelper.java

数据库访问层

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

 用户数据库访问实现类 UserDaoImpl.java

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

商品数据库访问实现类 GoodsDaoImpl.java

业务逻辑层

用户业务逻辑处理接口  IUserBiz.java

用户业务逻辑处理实体类  IUserBizImpl.java

商品业务逻辑处理接口  IGoodsBiz.java

商品业务逻辑处理实现类  GoodsBizImpl.java

项目实现功能


显示层

用户登录界面  login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/css/bootstrap.css">
    <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
    <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
    <style>
        * {
            outline: none !important;
        }

        html,
        body {
            background: #1abe9c;
        }

        form {
            width: 300px;
            background: #ebeff2;
            box-shadow: 0px 0px 50px rgba(0, 0, 0, .5);
            border-radius: 5px;
            padding: 20px;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
        }

        .btn-group {
            width: 100%;
        }

        .btn-group button {
            width: 50%;
        }
    </style>
</head>

<body>
<form action="doLogin.jsp" method="post">
    <h3 class="text-center" style="text-shadow: 2px 2px 1px #ed3f3f;">欢迎光临胡阿玛超市</h3>
    <div class="form-group">
        <input name="account" type="text" class="form-control" placeholder="请输入您的用户名">
    </div>
    <div class="form-group">
        <input name="password" type="password" class="form-control" placeholder="请输入您的密码">
    </div>
    <div class="btn-group">
        <button type="submit" class="btn btn-primary">登录</button>
        <button type="button" class="btn btn-danger">没有账号?</button>
    </div>
</form>
</body></html>

用户登录操作页面  doLogin.jsp

<%@ page import="com.zking.biz.IUserBiz" %>
<%@ page import="com.zking.biz.impl.UserBizImpl" %>
<%@ page import="com.zking.pojo.User" %>
<%@ page import="java.util.List" %>
<%@ page import="com.zking.vo.CarItem" %>
<%@ page import="java.util.ArrayList" %><%--
  User: hgh
  Date: 2022/4/13
  Time: 8:53
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("utf-8");
    String account = request.getParameter("account");
    String password = request.getParameter("password");

    IUserBiz userBiz = new UserBizImpl();
    User user = userBiz.login(new User(0, account, password));

    System.out.println(user + "---jsp");

    if (user == null) {
        response.sendRedirect("/login.jsp");
    } else {
        //首页需要登录数据
        session.setAttribute("user", user);
        //找来一个购物车
        List<CarItem> car = new ArrayList<>();
        //放到session中(把购物车给我)
        session.setAttribute("car", car);
        response.sendRedirect("/index.jsp");
    }

%>

主页主界面  index.jsp

<%@ page import="com.zking.pojo.User" %>
<%@ page import="com.zking.biz.IGoodsBiz" %>
<%@ page import="com.zking.biz.impl.GoodsBizImpl" %>
<%@ page import="com.zking.pojo.Goods" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/css/bootstrap.css">
  <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
  <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
  <style>

    td:nth-child(3)::before{
      content: "$";
    }

  </style>
</head>

<body>
<%
  Object obj = session.getAttribute("user");
  if(obj==null){
    response.sendRedirect("/login.jsp");
    return;
  }
%>
<div class="jumbotron">
  <div class="container">
    <h1>欢迎光临胡阿玛SuperMarket</h1>
    <p>尊贵的<%=((User)obj).getAccount()%></p>
  </div>
</div>
<%=session.getAttribute("car") %>
<div class="container">
  <table class="table">
    <tr>
      <th>商品序号</th>
      <th>商品名称</th>
      <th>商品单价</th>
      <th>商品描述</th>
      <th>操作</th>
    </tr>
    <%
      IGoodsBiz goodsBiz=new GoodsBizImpl();
      for (Goods goods : goodsBiz.getAll()) {
    %>
    <tr>
      <td><%=goods.getId()%></td>
      <td><%=goods.getName()%></td>
      <td><%=goods.getPrice()%></td>
      <td><%=goods.getInfo()%></td>
      <td>
        <div class="btn-group btn-group-xs">
          <a href="doAddCart.jsp?id=<%=goods.getId()%>" class="btn btn-primary">添加购物车</a>
        </div>
      </td>
    </tr>
    <%}%>
  </table>
</div>
</body></html>

添加购物车操作界面(添加至主页数组)  doAddCart.jsp

<%@ page import="com.zking.vo.CarItem" %>
<%@ page import="com.zking.biz.IGoodsBiz" %>
<%@ page import="com.zking.biz.impl.GoodsBizImpl" %>
<%@ page import="java.util.List" %><%--
  User: hgh
  Date: 2022/4/13
  Time: 9:52
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    //拿购物车
    List<CarItem> car=(List<CarItem>)session.getAttribute("car");

    IGoodsBiz goodsBiz=new GoodsBizImpl();

    //添加购物车的页面

    //1.得知道是那件商品吧
    String str = request.getParameter("id");
    int id = -1;
    if (str != null) {
        id = Integer.parseInt(str);
    }

    //2-1.判断该商品是否存在
    boolean f=true;
    for (CarItem item : car) {
        // item.getGoods().getId() 条目的商品id
        if(id==item.getGoods().getId()){
            //商品应该是已经被添加购物车了 [购物车中某个条目的商品id和你需要添加的商品id相同了]
            item.setCount(item.getCount()+1);//数量+1
            item.setSum(item.getCount()*item.getGoods().getPrice());
            f=false;
            break;
        }
    }
    //只要判断f是否发生了改变
    if(f){
        //2-2.生成一个CarItem [如果购物车没有该商品]
        CarItem carItem=new CarItem();
        //设置对应的商品数据
        carItem.setGoods(goodsBiz.getOne(id));
        //商品加车的数量
        carItem.setCount(1);
        //carItem.getCount() 商品加车的数量
        //carItem.getGoods().getPrice() 商品的单价
        //加车数量*商品单价
        carItem.setSum(carItem.getCount()*carItem.getGoods().getPrice());
        //将 购物条目[carItem] 绑定到 购物车[car] 中
        car.add(carItem);
    }

    //更新购物车
    session.setAttribute("car", car);
    //跳回首页
    response.sendRedirect("/index.jsp");
%>

实体类

ps:这里导入了自动生成get和set方法的jar包,实体类中的get和set方法需要自己封装

商品实体类  Goods.java

package com.zking.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.commons.codec.digest.DigestUtils;

import java.math.BigDecimal;
import java.math.BigInteger;

@SuppressWarnings("all")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class Goods {

    private Integer id;
    private String name;
    private Integer price;
    private String info;

}

用户实体类 User.java

package com.zking.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;


@SuppressWarnings("all")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class User {

    private Integer id;
    private String account;
    private String password;

}

数据库帮助类  DBHelper.java

package com.zking.util;

import oracle.jdbc.driver.OracleDriver;

import java.sql.*;

@SuppressWarnings("all")
public class DBHelper {

    //加载驱动
    static{
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //定义链接字符串
    private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";

    //获得链接
    public static Connection getCon() {
        try {
            return DriverManager.getConnection(URL,"scott","tiger");
        } catch (SQLException e) {
            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();
        }
    }

    public static void main(String[] args) {
        System.out.println(DBHelper.getCon());
    }

}

数据库访问层

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

package com.zking.dao;

import com.zking.pojo.User;

@SuppressWarnings("all")
public interface IUserDao {

    User login(User user);

}

 用户数据库访问实现类 UserDaoImpl.java

package com.zking.dao.impl;

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

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

@SuppressWarnings("all")
public class UserDaoImpl implements IUserDao {

    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;

    @Override
    public User login(User user) {
        System.out.println(user.getAccount());
        try {
            con=DBHelper.getCon();
            ps=con.prepareStatement("select * from shop_user where account=?");
            ps.setString(1,user.getAccount());
            rs=ps.executeQuery();
            if(rs.next()){
                System.out.println("------------");
                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;
    }

}

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

package com.zking.dao;

import com.zking.pojo.Goods;

import java.util.List;

@SuppressWarnings("all")
public interface IGoodsDao {

    //查询所有
    List<Goods> getAll();

    //查询单个
    Goods getOne(Integer id);

}

商品数据库访问实现类 GoodsDaoImpl.java

package com.zking.dao.impl;

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

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

@SuppressWarnings("all")
public class GoodsDaoImpl implements IGoodsDao {

    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;

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

    @Override
    public Goods getOne(Integer id) {
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select * from shop_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.setPrice(rs.getInt(3));
                goods.setInfo(rs.getString(4));
                return goods;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return null;
    }

}

业务逻辑层

用户业务逻辑处理接口  IUserBiz.java

package com.zking.biz;

import com.zking.pojo.User;

@SuppressWarnings("all")
public interface IUserBiz {

    User login(User user);

}

用户业务逻辑处理实体类  IUserBizImpl.java

package com.zking.biz.impl;

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

@SuppressWarnings("all")
public class UserBizImpl implements IUserBiz {

    private IUserDao userDao=new UserDaoImpl();

    @Override
    public User login(User user) {
        User u = userDao.login(user);
        System.out.println(u+"---biz");
        if(u!=null){
            if (u.getPassword().equals(user.getPassword())) {
                return u;
            }
        }
        return null;
    }

}

商品业务逻辑处理接口  IGoodsBiz.java

package com.zking.biz;

import com.zking.pojo.Goods;

import java.util.List;


@SuppressWarnings("all")
public interface IGoodsBiz {

    //查询所有
    List<Goods> getAll();

    //查询单个
    Goods getOne(Integer id);

}

商品业务逻辑处理实现类  GoodsBizImpl.java

package com.zking.biz.impl;

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

import java.util.List;

@SuppressWarnings("all")
public class GoodsBizImpl implements IGoodsBiz {

    private IGoodsDao goodsDao=new GoodsDaoImpl();

    @Override
    public List<Goods> getAll() {
        return goodsDao.getAll();
    }

    @Override
    public Goods getOne(Integer id) {
        return goodsDao.getOne(id);
    }

}

你要尽全力保护你的梦想。那些嘲笑你梦想的人,他们注定失败,他们想把你变成和他们一样。我坚信,只要心中有梦想,我就会与众不同。你也是。