JavaWeb14(购物车项目01)

给大家分享了这么久的JavaWeb小知识,这次就给大家分享一下最近新写的一个Web小项目吧。

目录

一,项目介绍

1.登陆注册界面

操作指南:

2.主界面(里面存放商品)

操作指南:

3.购物车界面(里面存放的是加入购物车的商品)

操作指南:

二,代码详解

1.Dao包代码:(数据库管理层)

IGoodsDao.java:

IUserDao.java:

DaoImpl包代码: 

GoodsDapImpl.java

UserDapImpl.java 

2.pojo包代码:(实体类包)

User.java

Goods.java

3.Biz包代码:(业务逻辑层)

IUserBiz.java

IGoodBiz.java

BizImpl包代码: 

GoodsBizImpl.java

UserBizImpl.java

4.util包代码:

DBHelper

5.vo包代码:

CarItem.java

6,显示界面代码:(表示层)

index.jsp(主界面)

login.jsp(登陆界面)

doLogin.jsp(登录处理界面)

doAddCar.jsp(购物车增加界面) 


一,项目介绍

这次给大家介绍的主要是一个关于购物的小项目,主要分为三个界面:

1.登陆注册界面

操作指南:

点击下方的登录按钮可以进行登陆操作,如果账号密码正确,则会登陆进入主页面,在没有账号的情况下,可以先进行注册的操作(点击下方红色按钮即可)。 

2.主界面(里面存放商品)

操作指南:

点击右边的添加购物车可以将商品添加到购物车里面去,然后可以进入购物车界面进行查看(该界面仅为测试界面)。

3.购物车界面(里面存放的是加入购物车的商品)

操作指南:

可以通过商品个数旁边的加减按钮对商品数量进行更改,总价和单价也会随之改变,同时具备相应的删除功能,点击最右边的蓝色删除按钮即可。结算商品时直接点击结算按钮即可。

二,代码详解

1.Dao包代码:(数据库管理层)

IGoodsDao.java:

package com.xly.dao;

import com.xly.pojo.Goods;

import java.util.List;


public interface IGoodsDao {

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

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

}

IUserDao.java:

package com.xly.dao;

import com.xly.pojo.User;


public interface IUserDao {

    User login(User user);

}

DaoImpl包代码: 

GoodsDapImpl.java

package com.xly.dao.impl;

import com.xly.dao.IGoodsDao;
import com.xly.pojo.Goods;
import com.xly.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<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;
    }

}

UserDapImpl.java 

package com.xly.dao.impl;

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

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


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()){
                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;
    }

}

2.pojo包代码:(实体类包)

User.java

package com.xly.pojo;

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


public class User {

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

}

Goods.java

package com.xly.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;

public class Goods {

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

}

3.Biz包代码:(业务逻辑层)

IUserBiz.java

package com.xly.biz;

import com.zking.pojo.User;


public interface IUserBiz {

    User login(User user);

}

IGoodBiz.java

package com.xly.biz;

import com.xly.pojo.Goods;

import java.util.List;

public interface IGoodsBiz {

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

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

}

BizImpl包代码: 

GoodsBizImpl.java

package com.xly.biz.impl;

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

import java.util.List;

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);
    }

}

UserBizImpl.java

package com.xly.biz.impl;

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

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;
    }

}

4.util包代码:

DBHelper

package com.xly.util;

import oracle.jdbc.driver.OracleDriver;

import java.sql.*;


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());
    }

}

5.vo包代码:

CarItem.java

package com.xly.vo;

import com.xly.pojo.Goods;
import lombok.Data;

public class CarItem {

    private Integer count;//数量
    private Integer sum;//条目总价
    private Goods goods;//对应的商品

}

6,显示界面代码:(表示层)

index.jsp(主界面)

<%@ page import="com.xly.pojo.User" %>
<%@ page import="com.xly.biz.IGoodsBiz" %>
<%@ page import="com.xly.biz.impl.GoodsBizImpl" %>
<%@ page import="com.xly.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="doAddCar.jsp?id=<%=goods.getId()%>" class="btn btn-primary">添加购物车</a>
        </div>
      </td>
    </tr>
    <%}%>
  </table>
</div>
</body></html>

login.jsp(登陆界面)

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%--这里的 html lang="zh"  代表的是中文的意思 --%>
<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.xly.biz.IUserBiz" %>
<%@ page import="com.xly.biz.impl.UserBizImpl" %>
<%@ page import="com.xly.pojo.User" %>
<%@ page import="java.util.List" %>
<%@ page import="com.xly.vo.CarItem" %>
<%@ page import="java.util.ArrayList" %>
<%@ 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");
    }

%>

doAddCar.jsp(购物车增加界面) 

<%@ page import="com.xly.biz.IGoodsBiz" %>
<%@ page import="com.xly.biz.impl.GoodsBizImpl" %>
<%@ page import="java.util.List" %>
<%@ 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");
%>

今天的分享就到此为止啦,精彩下期继续。

  • 17
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的JavaWeb购物车功能代码示例: 首先,我们需要创建一个Cart类来表示购物车: ```java public class Cart { private Map<String, Integer> items = new HashMap<>(); public void addItem(String itemId, int quantity) { if (items.containsKey(itemId)) { int oldQuantity = items.get(itemId); items.put(itemId, oldQuantity + quantity); } else { items.put(itemId, quantity); } } public void removeItem(String itemId) { items.remove(itemId); } public Map<String, Integer> getItems() { return items; } public int getItemCount() { int count = 0; for (int quantity : items.values()) { count += quantity; } return count; } public double getTotalPrice() { double totalPrice = 0; for (Map.Entry<String, Integer> entry : items.entrySet()) { String itemId = entry.getKey(); int quantity = entry.getValue(); double itemPrice = getItemPrice(itemId); totalPrice += itemPrice * quantity; } return totalPrice; } private double getItemPrice(String itemId) { // TODO: 根据 itemId 查询商品价格,这里省略实现 return 0; } } ``` 以上代码中,我们使用了一个HashMap来存储购物车中的商品信息。addItem()方法用于向购物车中添加商品,removeItem()方法用于从购物车中移除商品,getItems()方法用于获取购物车中所有商品信息,getItemCount()方法用于获取购物车中商品数量,getTotalPrice()方法用于获取购物车中商品总价,getItemPrice()方法用于根据商品ID查询商品价格。 接下来,我们需要编写一个Servlet来处理用户的购物车请求: ```java public class CartServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); HttpSession session = request.getSession(); Cart cart = (Cart) session.getAttribute("cart"); if (cart == null) { cart = new Cart(); session.setAttribute("cart", cart); } if (action.equals("add")) { String itemId = request.getParameter("itemId"); int quantity = Integer.parseInt(request.getParameter("quantity")); cart.addItem(itemId, quantity); response.sendRedirect(request.getContextPath() + "/cart.jsp"); } else if (action.equals("remove")) { String itemId = request.getParameter("itemId"); cart.removeItem(itemId); response.sendRedirect(request.getContextPath() + "/cart.jsp"); } } } ``` 以上代码中,我们首先获取用户的请求操作类型(添加商品或移除商品),然后从Session中获取购物车对象,如果购物车对象不存在,则创建一个新的购物车对象并存储到Session中。 如果用户请求添加商品,则获取商品ID和数量,然后调用购物车对象的addItem()方法添加商品并重定向到购物车页面;如果用户请求移除商品,则获取商品ID,然后调用购物车对象的removeItem()方法移除商品并重定向到购物车页面。 最后,我们需要在购物车页面中显示购物车信息: ```html <% Cart cart = (Cart) session.getAttribute("cart"); %> <table> <thead> <tr> <th>商品ID</th> <th>商品名称</th> <th>数量</th> <th>价格</th> <th>操作</th> </tr> </thead> <tbody> <% for (Map.Entry<String, Integer> entry : cart.getItems().entrySet()) { %> <tr> <td><%= entry.getKey() %></td> <td><%= getItemName(entry.getKey()) %></td> <td><%= entry.getValue() %></td> <td><%= getItemPrice(entry.getKey()) %></td> <td> <form method="post" action="<%= request.getContextPath() %>/cart"> <input type="hidden" name="action" value="remove"> <input type="hidden" name="itemId" value="<%= entry.getKey() %>"> <button type="submit">移除</button> </form> </td> </tr> <% } %> </tbody> </table> <p>总计:¥ <%= cart.getTotalPrice() %></p> ``` 以上代码中,我们首先从Session中获取购物车对象,然后使用一个表格来显示购物车中的所有商品信息。对于每个商品,我们显示商品ID、商品名称、数量、价格和一个移除按钮。当用户点击移除按钮时,会向Servlet发送一个POST请求,并将操作类型和商品ID作为参数传递过去。最后,我们还显示了购物车中所有商品的总价。 以上就是一个简单的JavaWeb购物车功能代码示例,仅供参考。实际项目中可能会更加复杂,需要根据具体需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值