JavaWeb购物系统(七)购物系统主页,商品的管理
效果图
未登录状态
登陆状态
商品管理页面
商品修改模态框
功能
- 商品展示
- 添加商品到购物车
- 查看商品
- 商品的信息的修改
正文
index.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>
<%@ page import="com.service.GoodsService" %>
<%@ page import="com.entity.Goods" %>
<%@ page import="java.util.List" %>
<%@ page import="com.myUtil.ProcessUtil" %>
<%@ page import="com.myUtil.JdbcUtil" %>
<%-- Created by IntelliJ IDEA.User: huaweiDate: 2022/9/26Time: 17:02To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>登陆成功页面</title><%--阿里项目图标引入--%><link rel="stylesheet" href="//at.alicdn.com/t/c/font_3722667_bquibw4d428.css"><!-- 新 Bootstrap5 核心 CSS 文件 --><link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/css/bootstrap.min.css"><%--icon图标--%><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css"><!-- popper.min.js 用于弹窗、提示、下拉菜单 --><script src="https://cdn.staticfile.org/popper.js/2.9.3/umd/popper.min.js"></script><!-- 最新的 Bootstrap5 核心 JavaScript 文件 --><script src="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/js/bootstrap.min.js"></script><script type="text/javascript" src="script/jquery-3.6.0.min.js"></script><style>.link-secondary:hover{color: orange;}</style><script type="text/javascript">$(function () {// 添加商品到购物车$("a[id^='purchase_']").click(function (e) {$.post("/MyProject/cartProcessServlet",{goodId: e.target.id,method: "addShopCartItem"},function (data) {if ("success" == data){alert("添加购物车成功!");location.reload(true);}// 拦截未登录用户添加购物车if ("error" == data){window.location.href="/MyProject/login.jsp";}},"json")return false;})// 时间显示函数function getTime() {var date = new Date();var year = date.getFullYear(); //获取年份var month = date.getMonth() + 1; //获取月份var day = date.getDate(); //获取日期var hour = date.getHours(); //获取小时hour = hour < 10 ? '0' + hour : hour;var minute = date.getMinutes(); // 获取分minute = minute < 10 ? '0' + minute : minute;var seconds = date.getSeconds(); //获取秒seconds = seconds < 10 ? '0' + seconds : seconds;return year + '年' + month + '月' + day + '日 ' + hour + ':' + minute + ':' + seconds;}setInterval(function() {document.querySelector('#timeBox').innerHTML = getTime();}, 1000)})</script>
</head>
<body><%SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(System.currentTimeMillis());String format = formatter.format(date);GoodsService goodsService = new GoodsService();List<Goods> goods = goodsService.showAllGoods();JdbcUtil.commit();request.setAttribute("goods",goods);String userName = ProcessUtil.getUserNameBySessionId(session);session.setAttribute("userName",userName);%>
<div class="container"><%--头部导航栏--%><div class="row sticky-top bg-light"><header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom "><a href="/MyProject/index.jsp" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-decoration-none"><svg class="bi me-2" width="40" height="32"><use xlink:href="#"/></svg><span class="fs-4 bi bi-triangle-half">Simple header</span></a><ul class="nav nav-pills"><li class="nav-item"><a href="/MyProject/index.jsp" class="nav-link active bi bi-house" aria-current="page">Home</a></li><li class="nav-item"><a href="/MyProject/order.jsp" class="nav-link iconfont icon-order"> 我的订单</a></li><li class="nav-item position-relative"><a href="/MyProject/shoppingCar.jsp" class="nav-link bi bi-cart"> 购物车</a><div class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-secondary">${sessionScope.cart.totalCount}</div></li><li class="nav-item"><a href="/MyProject/comments.jsp" class="nav-link bi bi-chat-square"> 留言板</a></li><c:if test="${sessionScope.user == null}"><li class="nav-item"><a href="/MyProject/login.jsp" class="nav-link">登录</a></li></c:if><c:if test="${sessionScope.user != null}"><div class="btn-group"><button type="button" class="btn btn-primary dropdown-toggle bi bi-gear-fill" data-bs-toggle="dropdown"> 设置</button><ul class="dropdown-menu"><li><a class="dropdown-item" href="/MyProject/userDetailInfo.jsp">修改信息</a></li><li><a class="dropdown-item" href="/MyProject/goodsManage.jsp">商品管理</a></li><li><a class="dropdown-item" href="/MyProject/userProcessServlet?method=logout" id="logout">退出登录</a></li></ul></div></c:if><li class="nav-item"><a href="#" class="nav-link"></a></li></ul></header></div><div class="row" style="padding-bottom: 30px"><div class="row h-50"><%--左边分类栏--%><div class="card bg-light text-center m-auto font-monospace" style="max-width: 18rem; height: 388px"><div class="card-body"><div class="title">分类</div><ul class="list-group list-group-flush" style="text-align: left;"><li class="list-group-item iconfont icon-dress " style="border-bottom: none"><a href="#" class="link-secondary font-monospace" style="text-decoration: none;"> 女装 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 内衣 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 奢品 </a></li><li class="list-group-item iconfont icon-shoes" style="border-bottom: none"><a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 女鞋 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 男鞋 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 箱包 </a></li><li class="list-group-item iconfont icon-perfume" style="border-bottom: none"><a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 美妆 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 饰品 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 洗护 </a></li><li class="list-group-item iconfont icon-clothes" style="border-bottom: none"><a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 男装 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 运动 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 百货 </a></li><li class="list-group-item iconfont icon-phone" style="border-bottom: none"><a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 手机 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 数码 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 企业礼品 </a></li><li class="list-group-item iconfont icon-SOFTWARE_FURNITURE" style="border-bottom: none"><a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 家装 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 电器 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 车品 </a></li><li class="list-group-item iconfont icon-cherry" style="border-bottom: none"><a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 食品 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 生鲜 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 母婴 </a></li><li class="list-group-item iconfont icon-medicinebox" style="border-bottom: none"><a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 医药 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 保健 </a>/<a href="#" class="link-secondary font-monospace" style="text-decoration: none"> 进口 </a></li></ul></div></div><%--轮播图--%><div id="carouselExampleDark bg-light" class="carousel slide col" data-bs-ride="carousel"><div class="carousel-inner"><div class="carousel-item active"><img src="https://img.alicdn.com/imgextra/i4/6000000003872/O1CN01AxHfgt1eTQLmwCFTj_!!6000000003872-2-octopus.png" class="d-block w-100" alt="..."></div><div class="carousel-item"><img src="https://img.alicdn.com/imgextra/i3/6000000004754/O1CN01G2onsB1kzNg9NfdBH_!!6000000004754-2-octopus.png" class="d-block w-100" alt="..."></div><div class="carousel-item"><img src="https://img.alicdn.com/imgextra/i3/6000000004754/O1CN01G2onsB1kzNg9NfdBH_!!6000000004754-2-octopus.png" class="d-block w-100" alt="..."></div></div></div><%--右边个人信息栏--%><div class="card text-white text-center " style="width: 18rem;height: 388px"><div class="card-body font-monospace"><div class="card-title">个人信息</div><ul class="list-group list-group-flush"><li class="list-group-item"><c:if test="${sessionScope.user == null}"><div class="card-subtitle">Hi 你好!</div></c:if><c:if test="${sessionScope.user != null}"><div class="card-subtitle">Hi ${sessionScope.userName}</div></c:if></li><c:if test="${sessionScope.user == null}"><li class="list-group-item" style="margin-top: 100px"><a href="/MyProject/login.jsp" class="btn btn-primary">请登录</a></li></c:if><c:if test="${sessionScope.user != null}"><li class="list-group-item"><div class="card-text" style="margin-top: 40px"><div><img style="height: 90px;width: 90px;border-radius: 50%;" src="http://q1.qlogo.cn/g?b=qq&nk=${sessionScope.userName}&s=640" class="img-circle"></div>第<span class="badge bg-info text-dark">${sessionScope.count}</span>次成功登录!</br><%if (session.getAttribute("lastTime") == null){ //首次登陆session.setAttribute("lastTime",format);}else {out.print("第一次登录时间为:" + session.getAttribute("lastTime"));}%></div></li></c:if></ul></div><%--显示时间--%><div class="card-footer bg-secondary" id="timeBox"></div></div></div></div><%--商品栏--%><div class="row row-cols-1 row-cols-md-4 g-4"><c:forEach items="${requestScope.goods}" var="good"><div class="col px-3 gy-4"><div class="card border-primary"><img src="${good.img}" class="card-img-top" alt="..."><div class="card-body"><h5 class="card-title text-truncate">${good.name}</h5><p class="card-text text-truncate">${good.describe}</p><p class="card-text fw-bold text-danger">¥${good.price}</p><a href="#" class="btn btn-primary" id="purchase_${good.id}">添加到购物车</a></div></div></div></c:forEach></div><%--footer--%><div class="row align-items-end"><footer class="py-5"><div class="row"><div class="col-2"><h5>Section</h5><ul class="nav flex-column"><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">Home</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">Features</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">Pricing</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">FAQs</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">About</a></li></ul></div><div class="col-2"><h5>Section</h5><ul class="nav flex-column"><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">Home</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">Features</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">Pricing</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">FAQs</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">About</a></li></ul></div><div class="col-2"><h5>Section</h5><ul class="nav flex-column"><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">Home</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">Features</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">Pricing</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">FAQs</a></li><li class="nav-item mb-2"><a href="#" class="nav-link p-0 text-muted">About</a></li></ul></div></div><div class="d-flex justify-content-between py-4 my-4 border-top"><p>© 2021 Company, Inc. All rights reserved.</p><ul class="list-unstyled d-flex"><li class="ms-3"><a class="link-dark" href="#"><svg class="bi" width="24" height="24"><use xlink:href="#twitter"/></svg></a></li><li class="ms-3"><a class="link-dark" href="#"><svg class="bi" width="24" height="24"><use xlink:href="#instagram"/></svg></a></li><li class="ms-3"><a class="link-dark" href="#"><svg class="bi" width="24" height="24"><use xlink:href="#facebook"/></svg></a></li></ul></div></footer></div>
</div>
</body>
</html>
右边个人信息栏-用户显示
登录成功之后,在信息栏顶部显示用户的用户名。并且显示上次的登录时间。
用户名是直接从数据库读取,存储到session
域,然后在jsp页面显示。
右边个人信息栏-上次登录时间
上次登录时间的思路是,判断session
域中是否有 “lastTime” ,如果没有就证明是第一次登录,就在session
域中设置 lastTime-当前时间 。反之,如果存有第一次登录时间,就直接取出来显示。相关的代码:
<%
if (session.getAttribute("lastTime") == null){ //首次登陆session.setAttribute("lastTime",format);
}else {out.print("第一次登录时间为:" + session.getAttribute("lastTime")); }
%>
右边信息栏-记录登录次数
我们的登陆次数是在UserProcessServlet
处理的。从sesison
域中获取 “count” ,如果没有就是第一次登录,就设置值为 1 。有的话就在原有的值上 +1 。
相关的代码:
// 记录登录次数protected void recordCount(HttpServletRequest request){HttpSession session = request.getSession();if (session.getAttribute("count") == null){int count = 1;session.setAttribute("count",count);}else {Integer count = (Integer)session.getAttribute("count");count++;session.setAttribute("count",count);}}
右边信息栏-头像的获取
看过JavaWeb购物系统(二)购物登陆、注册这一章节的可以知道,我们的用户表并没有存储用户头像,那这里的头像是从哪里来的呢?
我这里用的是QQ
的一个头像接口,即:如果用户名是QQ号的话,这里就可以获取到QQ头像
。哈哈哈哈
下面是相关代码:
<div><img style="height: 90px;width: 90px;border-radius: 50%;" src="http://q1.qlogo.cn/g?b=qq&nk=${sessionScope.userName}&s=640" class="img-circle">
</div>
接口地址是:http://q1.qlogo.cn/gb=qq&nk=自己的QQ号&s=640
右边信息栏-底部当前时间的显示
这里直接用的js代码。
// 时间显示函数
function getTime() {var date = new Date();var year = date.getFullYear(); //获取年份var month = date.getMonth() + 1; //获取月份var day = date.getDate(); //获取日期var hour = date.getHours(); //获取小时hour = hour < 10 ? '0' + hour : hour;var minute = date.getMinutes(); // 获取分minute = minute < 10 ? '0' + minute : minute;var seconds = date.getSeconds(); //获取秒seconds = seconds < 10 ? '0' + seconds : seconds;return year + '年' + month + '月' + day + '日 ' + hour + ':' + minute + ':' + seconds;}setInterval(function() {document.querySelector('#timeBox').innerHTML = getTime();}, 1000)
商品的展示
商品的展示,就是通过GoodService对象
来调用相关方法来获取商品集合。最后通过jsp的for_Each
来渲染到页面上。相关代码:
GoodsService goodsService = new GoodsService();List<Goods> goods = goodsService.showAllGoods();JdbcUtil.commit();request.setAttribute("goods",goods);
首页商品添加到购物车
在JavaWeb购物系统(五)购物车模块的实现
这一章节中说过,因为添加商品在主页,所以我们在这一节讲。
相关代码:
添加商品到购物车的前端js代码
// 添加商品到购物车
$("a[id^='purchase_']").click(function (e) {$.post("/MyProject/cartProcessServlet",{goodId: e.target.id,method: "addShopCartItem"},function (data) {if ("success" == data){alert("添加购物车成功!");location.reload(true);}// 拦截未登录用户添加购物车if ("error" == data){window.location.href="/MyProject/login.jsp";}},"json")return false;})
添加商品到购物车的后端代码
// 添加购物车
protected void addShopCartItem(HttpServletRequest request,HttpServletResponse response){// 得到商品idString goodId = request.getParameter("goodId").split("_")[1];// 得到商品信息Goods good = goodsService.getGoodById(goodId);// 将商品信息写入购物项ShopCarItem item =new ShopCarItem(Integer.parseInt(goodId),good.getImg(),good.getName(),good.getPrice(),1,good.getPrice());// 从session中获取购物车HttpSession session = request.getSession();Cart cart = (Cart)session.getAttribute("cart");if (cart == null){ // 还未创建购物车cart = new Cart();session.setAttribute("cart",cart);}cart.addShopCartItem(item);try {response.getWriter().write(new Gson().toJson("success"));} catch (IOException e) {e.printStackTrace();}
}
- 我们通过点击 添加到购物车 按钮来向后端发送
Ajax
请求,将请求发送到购物车相关的Controller
层。- 后端处理请求,,在
Controller
层首先根据添加的商品创建购物项
。之后我们会将购物项加入购物车。- 但我们并不会直接创建
Cart对象
,因为我们不知道是否存在购物车对象。- 所以我们需要先从
session
域中获取购物车对象Cart
,如果没有,即:获取到的值为NULL,就说明没有购物车,这时我们会创建一个购物车对象Cart
。- 然后将我们的
购物项
添加到购物车
中去。- 后端根据处理结果,返回
json
字符串,用于前端的后续处理。- 如果前端收到后端添加成功的信息,就显示添加购物车成功。
回显提示效果图
购物车右上角显示商品数量
我们是通过获取session
域中的Cart购物车对象
,手机用EL表达式
获取到购物车中商品的总数量。最后显示在jsp页面。
相关代码:
<li class="nav-item position-relative"><a href="/MyProject/shoppingCar.jsp" class="nav-link bi bi-cart"> 购物车</a><div class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-secondary">${sessionScope.cart.totalCount}</div>
</li>
因为我们需要的是实时的商品数量,所以我们在上边添加商品成功之后,Ajax回调函数中刷新了页面
goodsManage.jsp(商品管理页面)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page import="com.service.GoodsService" %>
<%@ page import="com.entity.Goods" %>
<%@ page import="java.util.List" %>
<%@ page import="com.myUtil.JdbcUtil" %><%--Created by IntelliJ IDEA.User: huaweiDate: 2022/10/29Time: 20:11To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>商品管理</title><!-- 新 Bootstrap5 核心 CSS 文件 --><link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/css/bootstrap.min.css"><%--icon图标--%><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css"><!-- popper.min.js 用于弹窗、提示、下拉菜单 --><script src="https://cdn.staticfile.org/popper.js/2.9.3/umd/popper.min.js"></script><!-- 最新的 Bootstrap5 核心 JavaScript 文件 --><script src="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/js/bootstrap.min.js"></script><script type="text/javascript" src="script/jquery-3.6.0.min.js"></script><script type="text/javascript">$(function () {// 删除商品$("button[id^='delete_']").click(function (e) {var del = confirm("确认删除");if (del){ // 删除$.post("/MyProject/goodsProcessServlet",{method: "deleteGoods",goodId: e.target.id},function (data) {alert(data);location.reload(true);},"json")}else { // 取消return false;}})// 修改商品$("button[id^='update_']").click(function (e) {// 获取修改列表信息var name = $("#name").val();var inventory = $("#inventory").val();var price = $("#price").val();var describe = $("#describe").val();if (name.trim()=="" ||inventory.trim()=="" ||price.trim()==""||describe.trim()==""){alert("内容不能为空")return false;}var upd = confirm("确认修改");if (upd==true){ // 修改$.post("/MyProject/goodsProcessServlet",{method: "updateGoods",goodId: e.target.id,name: name,inventory: inventory,price: price,describe: describe},function (data) {alert(data);location.reload(true);},"json")}else { // 取消return false;}})})</script>
</head>
<body>
<%int pageNum = 1;GoodsService goodsService = new GoodsService();List<Goods> goods = goodsService.showAllGoods();JdbcUtil.commit();if (goods!=null){session.setAttribute("AllGoods",goods);}// 当前页码String page1 = request.getParameter("goods_page");if (page1!=null){pageNum = Integer.parseInt(page1);}List<Goods> pagesGoods = goodsService.showPagesGoods(pageNum);JdbcUtil.commit();// 当前页码所对应的商品request.setAttribute("pagesGoods",pagesGoods);
%>
<%--头部导航栏--%>
<nav class="navbar-expand-lg navbar navbar-dark bg-primary"><div class="container-fluid "><a class="navbar-brand" href="#">商品管理</a><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarNavDropdown"><ul class="navbar-nav"><li class="nav-item"><a class="nav-link active" aria-current="page" href="/MyProject/index.jsp">Home</a></li></ul></div></div>
</nav><div class="container"><div class="card"><c:if test="${!empty sessionScope.AllGoods}"><table class="table table-striped"><tr><td>商品名称</td><td>库存</td><td>价格</td><td>简介</td><td>删除</td><td>修改</td></tr><c:forEach items="${requestScope.pagesGoods}" var="goods"><tr><td style="width: 20%">${goods.name}</td><td style="width: 20%">${goods.inventory}</td><td style="width: 20%">${goods.price}</td><td style="width: 20%"><div class="col-1 text-truncate m-auto" style="width:200px" >${goods.describe}</div></td><td style="width: 10%"><button type="submit" class="btn btn-danger" id="delete_${goods.id}">删除</button></td><td style="width: 10%"><button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#model_${goods.id}">修改</button></td></tr><%--修改模态框窗体部分--%><div class="modal" id="model_${goods.id}"><div class="modal-dialog modal-dialog-centered"><div class="modal-content"><!-- 模态框头部 --><div class="modal-header"><h4 class="modal-title">${goods.name}</h4><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div><!-- 模态框内容 --><div class="modal-body"><form><div class="mb-3"><label for="name" class="col-form-label">商品名称:</label><input type="text" class="form-control" id="name" value="${goods.name}"></div><div class="mb-3"><label for="inventory" class="col-form-label">商品库存:</label><input type="text" class="form-control" id="inventory" value="${goods.inventory}"></div><div class="mb-3"><label for="price" class="col-form-label">商品价格:</label><input type="text" class="form-control" id="price" value="${goods.price}"></div><div class="mb-3"><label for="describe" class="col-form-label">商品描述</label><textarea class="form-control overflow-hidden" id="describe" >${goods.describe}</textarea></div></form></div><!-- 模态框底部 --><div class="modal-footer"><div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">关闭</button><button type="button" class="btn btn-primary" id="update_${goods.id}">提交</button></div></div></div></div></div></c:forEach><c:set scope="request" var="goodPage_count" value="${fn:length(sessionScope.AllGoods)}"/></table><nav aria-label="..."><ul class="pagination justify-content-center" style="margin:20px 0"><%--获得商品总数--%><%-- 向上取整--%><c:forEach begin="1" end="${(goodPage_count + 5-1)/5}" var="i"><li class="page-item"><a class="page-link" href="/MyProject/goodsProcessServlet?method=showPagesGoods&goods_page=${i}">${i}</a></li></c:forEach></ul></nav></c:if></div>
</div>
</body>
</html>
商品的展示
思路和留言板的留言展示
都差不多,使用相应的方法取出商品列表,放入session
域,最后使用for-Each
将列表数据渲染到jsp页面。
商品的删除
通过Ajax
请求,携带商品的唯一ID
,删除数据库中的商品数据。
商品修改
点击修改按钮,模态框中的内容,是通过渲染jsp商品展示页面的时候,同时将相应的商品信息添加到模态框
的。
商品分页
兄弟们,可以参考留言的分页
。
商品这一部分的很多逻辑都是和
留言板
部分很多都是一样的。
JavaWeb购物系统(四)留言板的实现.
GoodsProcessServlet
package com.controller;import com.entity.Goods;
import com.google.gson.Gson;
import com.myUtil.JdbcUtil;
import com.service.GoodsService;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.List;public class GoodsProcessServlet extends BasicServlet {private GoodsService goodsService = new GoodsService();// 删除商品protected void deleteGoods(HttpServletRequest request, HttpServletResponse response){String goodId = request.getParameter("goodId").split("_")[1];Gson gson = new Gson();response.setContentType("text/html;charset=utf-8");if (goodId!=null){try {PrintWriter writer = response.getWriter();goodsService.deleteGoods(goodId);JdbcUtil.commit();writer.write(gson.toJson("删除商品成功"));} catch (Exception e) {JdbcUtil.rollback();try {response.getWriter().write(gson.toJson("删除商品失败"));} catch (IOException ioException) {ioException.printStackTrace();}e.printStackTrace();}}}// 修改商品protected void updateGoods(HttpServletRequest request, HttpServletResponse response){String goodId = request.getParameter("goodId").split("_")[1];String name = request.getParameter("name");String inventory = request.getParameter("inventory");String price = request.getParameter("price");String describe = request.getParameter("describe");Goods goods = new Goods(Integer.parseInt(goodId), null, name, describe, new BigDecimal(Integer.parseInt(price)), Integer.parseInt(inventory));Gson gson = new Gson();response.setContentType("text/html;charset=utf-8");try {goodsService.updateGood(goods);JdbcUtil.commit();PrintWriter writer = response.getWriter();writer.write(gson.toJson("修改成功"));} catch (Exception e) {JdbcUtil.rollback();PrintWriter writer = null;try {writer = response.getWriter();writer.write(gson.toJson("修改失败"));} catch (IOException ioException) {ioException.printStackTrace();}e.printStackTrace();}}// 分页显示商品protected void showPagesGoods(HttpServletRequest request, HttpServletResponse response){String page = request.getParameter("goods_page");if (page!=null){int parseInt = Integer.parseInt(page);List<Goods> goods = null;try {goods = goodsService.showPagesGoods(parseInt);JdbcUtil.commit();} catch (Exception e) {JdbcUtil.rollback();e.printStackTrace();}request.setAttribute("pagesGoods",goods);try {request.getRequestDispatcher("/goodsManage.jsp").forward(request,response);} catch (ServletException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}
GoodsService
package com.service;
import com.dao.GoodsDao;
import com.entity.Goods;import java.util.List;public class GoodsService {private GoodsDao goodsDao = new GoodsDao();// 显示所有商品public List<Goods> showAllGoods() {return goodsDao.showAllData();}// 分页显示商品public List<Goods> showPagesGoods(int page){List<Goods> goods = goodsDao.showAllData();if (goods!=null){// 超过页数,回显第一个数据if (page > (Math.ceil(goods.size()/5.0))){page = 1;}if (goods!=null && goods.size()!=0){int start = (page-1) * 5;int end = (page-1) * 5 + 5;if(start<goods.size()){if ((goods.size()-start) < 5){goods = goods.subList(start,goods.size());}else {goods = goods.subList(start,end);}}return goods;}}return null;}// 根据商品Id来查询商品public Goods getGoodById(String goodId) {return goodsDao.showDataById(goodId);}// 添加商品public Boolean addGoods(Goods goods) {return goodsDao.addData(goods);}// 删除商品public Boolean deleteGoods(String goodId){return goodsDao.deleteData(goodId);}// 更新商品public Boolean updateGood(Goods goods){return goodsDao.updateData(goods);}
}
GoodsDao
package com.dao;import com.entity.Goods;import java.util.List;public class GoodsDao extends BasicDao<Goods>{// 查询所有数据public List<Goods> showAllData(){String sql = "SELECT * FROM `goods`";return queryMulti(sql, Goods.class);}// 根据id查询数据public Goods showDataById(String goodId){String sql = "SELECT * FROM `goods` WHERE `id`=" + goodId;return querySingle(sql, Goods.class);}// 更新库存public Boolean updateStock(Goods goods){String sql = "UPDATE `goods` SET `inventory`= "+ goods.getInventory() +" WHERE `id`=" + goods.getId();return dmlData(sql);}// 更新整条数据public Boolean updateData(Goods goods){String sql = "UPDATE `goods` SET `name`= '"+ goods.getName() +"',`describe`='"+ goods.getDescribe() +"',`price`="+ goods.getPrice() +",`inventory`="+ goods.getInventory() +" WHERE `id`=" + goods.getId();return dmlData(sql);}// 添加数据public Boolean addData(Goods goods){String sql = "INSERT INTO `goods` VALUES(NULL,'"+ goods.getImg() +"','"+ goods.getName() +"','"+ goods.getDescribe() +"',"+ goods.getPrice() +","+ goods.getInventory() +")";return dmlData(sql);}// 删除数据public Boolean deleteData(String goodId){String sql = "DELETE FROM `goods` WHERE `id`=" + goodId;return dmlData(sql);}}
Goods(商品实体类)
package com.entity;import java.math.BigDecimal;public class Goods {private Integer id;private String img;private String name;private String describe;private BigDecimal price;private Integer inventory;public Goods() {}@Overridepublic String toString() {return "Goods{" +"id=" + id +", img='" + img + '\'' +", name='" + name + '\'' +", describe='" + describe + '\'' +", price=" + price +", inventory=" + inventory +'}';}public String getImg() {return img;}public void setImg(String img) {this.img = img;}public Goods(Integer id, String img, String name, String describe, BigDecimal price, Integer inventory) {this.id = id;this.img = img;this.name = name;this.describe = describe;this.price = price;this.inventory = inventory;}public String getDescribe() {return describe;}public void setDescribe(String describe) {this.describe = describe;}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 BigDecimal getPrice() {return price;}public void setPrice(BigDecimal price) {this.price = price;}public Integer getInventory() {return inventory;}public void setInventory(Integer inventory) {this.inventory = inventory;}}
Goods表的设计
列名 | 数据类型 | 长度 | 主键? | 非空? | 自增? | 解释说明 |
---|---|---|---|---|---|---|
id | int | √ | √ | √ | 商品的自增ID,唯一标识每个商品 | |
img | varchar | 500 | √ | 商品图片 | ||
name | varchar | 500 | √ | 商品名称 | ||
describe | varchar | 500 | √ | 商品描述 | ||
price | decimal | 10,0 | √ | 商品价格 | ||
inventory | int | 32 | √ | 商品库存 |
JavaWeb购物系统(七)购物系统主页,商品的管理相关推荐
- javaweb JAVA JSP购物系统购物商城系统源码(jsp电子商务系统)购物系统mvc
javaweb JAVA JSP购物系统购物商城系统源码(jsp电子商务系统)购物系统mvc protected void doGet(HttpServletRequest req, HttpServ ...
- javaweb JAVA JSP药品销售管理系统JSP医药销售管理系统JSP购物商城系统JSP电子商务系统JSP购物系统
javaweb JAVA JSP药品销售管理系统JSP医药销售管理系统JSP购物商城系统JSP电子商务系统JSP购物系统 protected void doGet(HttpServletRequest ...
- javaweb JAVA JSP化妆品销售网站系统 JSP化妆品购物系统 JSP口红销售系统 JSP电子商务系统 JSP网店商城
javaweb JAVA JSP化妆品销售网站系统 JSP化妆品购物系统 JSP口红销售系统 JSP电子商务系统 JSP网店商城 protected void doGet(HttpServletReq ...
- javaweb JAVA JSP手机销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上手机店在线销售
JSP手机销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上手机店在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线招标房,屋租 ...
- javaweb JAVA JSP水果销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上水果店在线销售
javaweb JAVA JSP水果销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上水果店在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情 ...
- javaweb JAVA JSP书店销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上书店在线销售
JSP书店销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上书店在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线招标房,屋租赁 ...
- javaweb JAVA JSP图书销售系统JSP网上书店商城JSP购物系统JSP网上书店JSP图书在线销售系统JSP图书商城jsp二手图书销售系统
javaweb JAVA JSP图书销售系统JSP网上书店商城JSP购物系统JSP网上书店JSP图书在线销售系统JSP图书商城jsp二手图书销售系统 开发语言:Java 开发工具:Myeclispe ...
- javaweb JAVA JSP购物系统jsp销售系统 (jsp电子商务系统,购物商城)甜品蛋糕在线购物系统案例
javaweb JAVA JSP购物系统jsp销售系统 (jsp电子商务系统,购物商城)甜品蛋糕在线购物系统案例 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看, ...
- javaweb JAVA JSP婴幼儿用品销售系统jsp购物系统购物商城系统源码(电子商务系统)网上在线销售
javaweb JAVA JSP婴幼儿用品销售系统jsp购物系统购物商城系统源码(电子商务系统)网上在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线 ...
- javaweb JAVA JSP汽车配件销售系统jsp配件销售网站 (jsp电子商务系统,购物商城)在线购物案例
JSP汽车配件销售系统jsp配件销售网站 (jsp电子商务系统,购物商城)在线购物案例 大家好,很高兴和大家分享Java项目和经验.不管同学们是出于什么需求.都希望各位计算机专业的同学有一个提高. 本 ...
最新文章
- GitHub万星资源:强化学习算法实现,教程代码样样全,还有详细学习规划
- java 基本类型 object_Java常用类-Object类
- 【使用递归玩通关汉诺塔游戏】算法01-递归(斐波那契数列、汉罗塔问题)-java实现
- 用 javascript 获取当页面上鼠标(光标)位置
- 分词之后的如何做特征选择_干货分享!做外贸遇到空运订舱之后走不了如何处理,你知道吗?收藏...
- volta架构 微型计算机,性能大爆炸 NVIDIA新GPU架构曝光
- 工作84:模板字面量
- android Monkey 测试技巧
- Cognitive Security的异常检测技术
- java 补丁差异_差异和补丁简介
- 与计算机专业相关的英语科普短文,英语科普文选-中英文对照(计算机.doc
- Protocol analysis methodology
- 深入浅出mysql pdf_深入浅出MySQLpdf_深入浅出MySQL下载_深入浅出MySQLmobi
- 计算机控制技术于海生第二版知识点,计算机控制技术 第2版
- CGLIB动态代理使用介绍
- 烟雾检测模块ADPD188BI介绍与应用(一)
- 【软件后门】qq足迹 - qq应用授权管理
- 在Ubuntu/Linux环境下开放3306端口
- 微信html5展示页,H5科普|微信H5页面的展示形式
- OpenCV入门 图像的边缘填充与融合