【JavaWeb】网上蛋糕项目商城-热销和新品

devtools/2024/9/24 23:25:31/

概念

本文将完成实现项目的热销和新品两个分类的商品列表进行分页展示。

热销和新品功能实现步骤

在head.jsp头部页面中点击这两个超链接向服务器发送请求。

servlet包中创建GoodRecommendListServlet类,用于接收浏览器的请求。

java">package servlet;import model.Page;
import service.GoodsService;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;@WebServlet(name = "goodrecommendList",urlPatterns = "/goodsrecommend_list")
public class GoodRecommendListServlet extends HttpServlet {private GoodsService gService = new GoodsService();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int type = Integer.parseInt(request.getParameter("type") ) ;int pageNumber = 1;if(request.getParameter("pageNumber") != null) {try {pageNumber=Integer.parseInt(request.getParameter("pageNumber") ) ;}catch (Exception e){}}if(pageNumber<=0)pageNumber=1;Page p = gService.getGoodsRecommendPage(type, pageNumber);if(p.getTotalPage()==0){p.setTotalPage(1);p.setPageNumber(1);}else {if(pageNumber>=p.getTotalPage()+1){p = gService.getGoodsRecommendPage(type, p.getTotalPage());}}request.setAttribute("p", p);request.setAttribute("t", type);request.getRequestDispatcher("goodsrecommend_list.jsp").forward(request, response);}
}

以上代码中,通过接收浏览器发送的type参数的值来判断是需要获得热销商品还是需要获得新品分类的商品,同时也判断是否有页码参数,如果浏览器没有传递页码参数,则默认为第一页。并通过分类参数和页码参数作为条件查询该分类的商品总页数,以及分页信息。

因此在service包中的GoodsService类中定义热销和新品两个分类的获取商品信息的方法

java">//根据当前分类和页码获得当前分页信息
public Page getGoodsRecommendPage(int type,int pageNumber) {Page p = new Page();p.setPageNumber(pageNumber);int totalCount = 0;try {totalCount = gDao.getRecommendCountOfGoodsByTypeID(type);} catch (SQLException e) {e.printStackTrace();}p.SetPageSizeAndTotalCount(8, totalCount);List list=null;try {list = gDao.selectGoodsbyRecommend(type, pageNumber, 8);for(Goods g : (List<Goods>)list) {g.setScroll(gDao.isScroll(g));g.setHot(gDao.isHot(g));g.setNew(gDao.isNew(g));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}p.setList(list);return p;
}

接着需要调用dao层执行sql语句获取数据分类商品总数

java">public int getRecommendCountOfGoodsByTypeID(int type) throws SQLException {if(type==0)return getCountOfGoodsByTypeID(0);QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());String sql = "select count(*) from recommend where type=?";return r.query(sql, new ScalarHandler<Long>(),type).intValue();
}

根据分类,页码以及每页的商品数量作为条件获得分类商品列表信息

java">//根据标识id分页查询商品信息
public List<Goods> selectGoodsbyRecommend(int type,int pageNumber,int pageSize) throws SQLException {QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());if(type==0) {//当不添加推荐类型限制的时候String sql = " select g.id,g.name,g.cover,g.image1,g.image2,g.intro,g.price,g.stock,t.name typename from goods g,type t where g.type_id=t.id order by g.id limit ?,?";return r.query(sql, new BeanListHandler<Goods>(Goods.class),(pageNumber-1)*pageSize,pageSize);}String sql = " select g.id,g.name,g.cover,g.image1,g.image2,g.intro,g.price,g.stock,t.name typename from goods g,recommend r,type t where g.id=r.goods_id and g.type_id=t.id and r.type=? order by g.id limit ?,?";return r.query(sql, new BeanListHandler<Goods>(Goods.class),type,(pageNumber-1)*pageSize,pageSize);
}

并且判断查询出来的商品是轮播图商品,还是热销商品或者是新品商品,进行标识和区分,并且进行验证当前商品是否属于该分类的商品

java">public boolean isScroll(Goods g) throws SQLException {return isRecommend(g, 1);
}
public boolean isHot(Goods g) throws SQLException {return isRecommend(g, 2);
}
public boolean isNew(Goods g) throws SQLException {return isRecommend(g, 3);
}
private boolean isRecommend(Goods g,int type) throws SQLException {QueryRunner r = new QueryRunner(DataSourceUtils.getDataSource());String sql = "select * from recommend where type=? and goods_id=?";Recommend recommend = r.query(sql, new BeanHandler<Recommend>(Recommend.class),type,g.getId());if(recommend==null) {return false;}else {return true;}
}

将查询和验证的数据保存在Recommend实体类中,因此需要在model包中创建给实体类

java">package model;public class Recommend {private int id;private int type;//1条幅 2热销 3新品private Goods goods;public int getId() {return id;}public void setId(int id) {this.id = id;} public int getType() {return type;}public void setType(int type) {this.type = type;}public Goods getGoods() {return goods;}public void setGoods(Goods goods) {this.goods = goods;}public Recommend(int id, int type, Goods goods) {super();this.id = id;this.type = type;this.goods = goods;}public Recommend() {super();}}

最后,所获得的商品分页信息通过请求转发的方法是发送到goodsrecommend_list.jsp页面中显示

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!DOCTYPE html>
<html>
<head><title>首页</title><meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type="text/css" rel="stylesheet" href="css/bootstrap.css"><link type="text/css" rel="stylesheet" href="css/style.css"><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/bootstrap.min.js"></script><script type="text/javascript" src="js/simpleCart.min.js"></script><script type="text/javascript" src="layer/layer.js"></script><script type="text/javascript" src="js/cart.js"></script>
</head>
<body><jsp:include page="header.jsp"><jsp:param name="flag" value="3"></jsp:param>
</jsp:include>
<div class="products"><div class="container"><h2><c:choose><c:when test="${t==2}">热销商品</c:when><c:otherwise>新品商品</c:otherwise></c:choose></h2><div class="col-md-12 product-model-sec"><c:forEach items="${p.list}" var="g"><div class="product-grid"><a href="/goods_detail?id=${g.id}"><div class="more-product"><span> </span></div><div class="product-img b-link-stripe b-animate-go  thickbox"><img src="${g.cover}" class="img-responsive" alt="${g.name}" width="240" height="240"><div class="b-wrapper"><h4 class="b-animate b-from-left  b-delay03"><button href="/goods_detail?id=${g.id}">查看详情</button></h4></div></div></a><div class="product-info simpleCart_shelfItem"><div class="product-info-cust prt_name"><h4>${g.name}</h4><span class="item_price">¥ ${g.price}</span><input type="button" class="item_add items" value="加入购物车" onclick="buy(${g.id})"><div class="clearfix"> </div></div></div></div></c:forEach></div><jsp:include page="page.jsp"><jsp:param name="url" value="/goodsrecommend_list"></jsp:param><jsp:param name="param" value="&type=${t}"></jsp:param></jsp:include></div></div>
</div>
<jsp:include page="footer.jsp"></jsp:include>
</body>
</html>

 


http://www.ppmy.cn/devtools/40704.html

相关文章

【C++】CentOS环境搭建-编译安装Boost库(附CMAKE编译文件)

【C】环境搭建-编译安装Boost库 Boost库简介Boost库安装通过YUM安装&#xff08;版本较低 V1.53.0&#xff09;通过编译安装&#xff08;官网最新版本1.85.0&#xff09;1.安装相关依赖2.查询官网下载最新安装包并解压3.编译Boost4.安装Boost库到系统路径 Boost库验证 Boost库简…

如何防止WordPress网站内容被抓取

最近在检查网站服务器的访问日志的时候&#xff0c;发现了大量来自同一个IP地址的的请求&#xff0c;用站长工具分析确认了我的网站内容确实是被他人的网站抓取了&#xff0c;我第一时间联系了对方网站的服务器提供商投诉了该网站&#xff0c;要求对方停止侵权行为&#xff0c;…

vivado 低级别 SVF JTAG 命令

低级别 SVF JTAG 命令 注释 &#xff1a; 在 Versal ™ 器件上不支持 SVF 。 低级别 JTAG 命令允许您扫描多个 FPGA JTAG 链。针对链操作所生成的 SVF 命令使用这些低级别命令来访问链中的 FPGA 。 报头数据寄存器 (HDR) 和报头指令寄存器 (HIR) 语法 HDR length […

学习FPGA应该从什么地方入手呢?

FPGA学习路线&#xff1a; 大致分成四个部分&#xff1a;编程语言、基础知识、开发工具、项目实战。 编程语言&#xff1a; 推荐先学习Verilog&#xff0c;如果有一定的C语言基础&#xff0c;那么应该会比较好上手。 等积累一定开发经验之后&#xff0c;考虑看VHDL&#xf…

搭建nacos集群

1.修改nacos/conf/application.properties 2.在数据库中执行nacos/conf/nacos-mysql.sql脚本 3.修改nacos/conf/cluster.conf文件 4.修改startup.sh文件模式为集群 5.启动服务 附&#xff1a;安装nginx 修改/usr/local/openresty/nginx/conf/nginx.confi文件 http{}中增加如下…

Python从0到POC编写-魔法方法

name __name__ 是系统定义的内部函数&#xff0c; 它的作用是识别模块。 通常我们看到这样一句话&#xff1a; if __name__ __main____name__ 的值有两种情况&#xff0c;那么挨个来说下。 如果模块是被直接执行的 &#xff0c;那么 __name__ 的值 为 __main__ 例如&…

MySQL利用变量进行查询操作

在MySQL中&#xff0c;可以使用变量来存储查询结果&#xff0c;以便在随后的查询中使用。以下是一个示例&#xff0c;展示了如何使用变量进行查询操作&#xff1a; 创建一个示例表&#xff1a; CREATE TABLE example_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(…

20_Scala集合_不可变数组Array

文章目录 Array1.创建不可变数组Array1.1直接new1.2apply方法 2.Array改查3.mkString()4.不可变数组Array遍历for循环遍历foreach遍历foreach匿名写法 Appendix Array –Array不可变数组&#xff0c;增删数据不会使源数组发生变化&#xff0c;而是会产生新数据 –scala中数组…