JavaWeb实现商品列表的多条件查询和分页功能(超详细的~)

简介: JavaWeb实现商品列表的多条件查询和分页功能(超详细的~)

需求

1.在goods.txt文件夹中写入如下格式:
商品类型-商品名称-商品价格-商品数量
联想电脑-联想小新-6900-1000
写入52条数据
多条件搜索:根据商品类型和商品名称来搜索符合条件的商品
分页:一页显示5条数据,实现前一页,后一页翻页功能,实现点击跳转到指定页

先看看效果:

该项目整体代码层次:
在这里插入图片描述

Java源码采用分层来写:
bean:实体类放入该层,
util:文件工具放入该层
web:网络servlet层代码放入该层

多条件查询功能实现:

思路:获取所有商品集合,获取查询的条件,按个判断查询条件,一层层集合套,过滤出最后的结果

主要代码:

//获取查询条件
        String goodsType = req.getParameter("goods_type");
        String goodsName = req.getParameter("goods_name");
        //从文件读出商品集合
        List<Goods> goods = GoodsFileUtil.getGoodsList();
        //查询第一个条件
        List<Goods> typeGoods = new ArrayList<Goods>();
        if (null != goodsType && !"".equals(goodsType)) {
            for (Goods goods2 : goods) {
                if (goods2.getGoodsType().contains(goodsType)) {
                    typeGoods.add(goods2);
                }
            }
        } else {
            typeGoods = goods;
        }
        //查询第二个条件
        List<Goods> nameGoods = new ArrayList<Goods>();
        if (null != goodsName && !"".equals(goodsName)) {
            for (Goods goods2 : typeGoods) {
                if (goods2.getGoodsName().contains(goodsName)) {
                    nameGoods.add(goods2);
                }
            }
        } else {
            nameGoods = typeGoods;
        }

分页功能实现

分页功能实现思路:
1.输入条件,当前页,每页的数据记录条数,商品集合
2.封装分页类,属性有:pageNumb:当前页,pageSize:每页的数据数,rowCount:总共的商品数据条数,pageCount:总共有多少页,prePageNumb:上一页,nextPageNumb:下一页,currentList:当前页数展示的商品集合,提供有参构造方法,构造Pager类

Pager类

public class Pager {

    private Integer pageNumb;
    private Integer pageSize;
    
    private Integer rowCount;
    private Integer pageCount;
    private Integer prePageNumb;
    private Integer nextPageNumb;
    private List currentList;
    
    public Pager(Integer _pageNumb, Integer _pageSize, List _allList){
        //初始化每页的内容条数
        this.pageSize = _pageSize;
        
        //初始化总共的内容条数
        this.rowCount = _allList.size();
        
        //计算共有多少页
        if (this.rowCount % this.pageSize == 0) {
            this.pageCount = this.rowCount / this.pageSize;
        } else {
            this.pageCount = this.rowCount / this.pageSize + 1;
        }
        
        //修正当前页
        if (_pageNumb <= 0) {
            this.pageNumb = 1;
        } else if (_pageNumb > this.pageCount) {
            this.pageNumb = this.pageCount;
        } else {
            this.pageNumb = _pageNumb;
        }
        
        //处理前一页和后一页的页码
        this.prePageNumb = this.pageNumb - 1;
        if (this.prePageNumb <= 0) {
            this.prePageNumb = 1;
        }
        this.nextPageNumb = this.pageNumb + 1;
        if (this.nextPageNumb > this.pageCount) {
            this.nextPageNumb = this.pageCount;
        }
        
        //处理当前页的记录开始结束位置
        Integer fromIndex = (this.pageNumb - 1) * 5;
        Integer toIndex = this.pageNumb * 5;
        if (toIndex > this.rowCount) {
            toIndex = this.rowCount;
        }
        this.currentList = _allList.subList(fromIndex, toIndex);
    }

    public Integer getPageCount() {
        return pageCount;
    }

    public Integer getPageNumb() {
        return pageNumb;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public Integer getRowCount() {
        return rowCount;
    }

    public Integer getPrePageNumb() {
        return prePageNumb;
    }

    public Integer getNextPageNumb() {
        return nextPageNumb;
    }

    public List getCurrentList() {
        return currentList;
    }
    
    
}

GoodsList类对其进行构造

@WebServlet("/goodsList")
public class GoodsListServlet extends HttpServlet{

    public static final Integer PageSize = 5;
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取查询条件
        String goodsType = req.getParameter("goods_type");
        String goodsName = req.getParameter("goods_name");
        //从文件读出商品集合
        List<Goods> goods = GoodsFileUtil.getGoodsList();
        //查询第一个条件
        List<Goods> typeGoods = new ArrayList<Goods>();
        if (null != goodsType && !"".equals(goodsType)) {
            for (Goods goods2 : goods) {
                if (goods2.getGoodsType().contains(goodsType)) {
                    typeGoods.add(goods2);
                }
            }
        } else {
            typeGoods = goods;
        }
        //查询第二个条件
        List<Goods> nameGoods = new ArrayList<Goods>();
        if (null != goodsName && !"".equals(goodsName)) {
            for (Goods goods2 : typeGoods) {
                if (goods2.getGoodsName().contains(goodsName)) {
                    nameGoods.add(goods2);
                }
            }
        } else {
            nameGoods = typeGoods;
        }
        //获取当前页
        String strPageNumb = req.getParameter("pageNumb");
        Integer pageNumb = 1;
        if (null != strPageNumb && !"".equals(strPageNumb)) {
            pageNumb = Integer.valueOf(strPageNumb);
        }
        for (int i = 1; i <= goods.size(); i++) {
            Goods good = goods.get(i-1);
            good.setGoodsNum(i);
        }
        //初始化pager对象
        Pager page = new Pager(pageNumb, PageSize, nameGoods);
        req.setAttribute("page", page);
        req.setAttribute("goodsType", goodsType);
        req.setAttribute("goodsName", goodsName);
        req.getRequestDispatcher("/WEB-INF/page1.jsp")
        .forward(req, resp);
    }
}

page.jsp页面

<%@page import="com.wanshi.bean.Pager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html >
<html>
<head>
<meta charset="UTF-8">
<title>分页</title>
<style type="text/css">
    a{
        margin:15px 0;
        display: inline-block;
        width:60px;
        height:30px;
        background-color: #f6f6f6;
        text-align: center;
        line-height: 30px;
        text-decoration: none;
    }
    .goods-search{
        width:600px;
        margin:0 auto;
    }
    .goods-list{
        width:455px;
        margin:0 auto;
        text-align: center;
    }
</style>
</head>
<body>
    <div class="goods-search">
        <form method="get" action="${pageContext.request.contextPath }/goodsList">
            商品类别:<input type="text" name="goods_type" value="${goodsType }">&emsp;
            商品名称:<input type="text" name="goods_name" value="${goodsName }">&emsp;
            <input type="submit" value="查询" >
        </form>
    </div>
    <div class="goods-list">
        <h1>商品列表</h1>
        <table border="1">
            <tr><td>商品编号</td><td>商品类别</td><td>商品名称</td><td>商品单价</td><td>商品库存数量</td></tr>
            <c:forEach items="${page.currentList }" var="good">
                <tr><td>${good.goodsNum }</td><td>${good.goodsType }</td><td>${good.goodsName }</td><td>${good.goodsPrice }</td><td>${good.goodsCount }</td></tr>
            </c:forEach>
        </table>
        <a href="${pageContext.request.contextPath }/goodsList?pageNumb=${page.prePageNumb}">前一页</a>
        <%
            Object obj = request.getAttribute("page");
            Pager pager = (Pager)obj;
            for (int i = 1; i <= pager.getPageCount(); i++) {
        %>
        <a href="${pageContext.request.contextPath }/goodsList?pageNumb=<%=i%>"><%=i %></a>
        <%
            }
        %>                
        <a href="${pageContext.request.contextPath }/goodsList?pageNumb=${page.nextPageNumb}">后一页</a>
    </div>
</body>
</html>

ok,看下效果:

浏览器输入以下地址访问该网页:
在这里插入图片描述
搜索耳机
在这里插入图片描述
随意切换页面
在这里插入图片描述
OK,多条件查询和分页功能到此结束了,其中博主认为难以理解的是分页功能,读者若有问题,可随时联系我,
希望这篇博客可以帮助更多的人,到此功能告一段落,后期博主会出一个系统的完整增删改查,过滤器实现防跳墙,多条件查询,分页功能,感兴趣的小伙伴多多支持呀,我们下篇见!

相关文章
|
2天前
|
数据采集 存储 Java
Java爬虫获取微店店铺所有商品API接口设计与实现
本文介绍如何使用Java设计并实现一个爬虫程序,以获取微店店铺的所有商品信息。通过HttpClient发送HTTP请求,Jsoup解析HTML页面,提取商品名称、价格、图片链接等数据,并将其存储到本地文件或数据库中。文中详细描述了爬虫的设计思路、代码实现及注意事项,包括反爬虫机制、数据合法性和性能优化。此方法可帮助商家了解竞争对手,为消费者提供更全面的商品比较。
|
13天前
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
132 12
|
2月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
119 34
|
2月前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
118 10
|
3月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
62 2
|
3月前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
144 60
|
4月前
|
Java 程序员 调度
Java|PageHelper 怎么自作主张帮我分页?
没有调用 PageHelper.startPage,查询怎么也被自动分页了?
22 2
|
4月前
|
Java 数据安全/隐私保护
Java ffmpeg 实现视频加文字/图片水印功能
【10月更文挑战第22天】在 Java 中使用 FFmpeg 实现视频加文字或图片水印功能,需先安装 FFmpeg 并添加依赖(如 JavaCV)。通过构建 FFmpeg 命令行参数,使用 `drawtext` 滤镜添加文字水印,或使用 `overlay` 滤镜添加图片水印。示例代码展示了如何使用 JavaCV 实现文字水印。
313 1
|
4月前
|
Java 程序员
在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。
【10月更文挑战第13天】在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。本文介绍了Java关键字的基本概念及其重要性,并通过定义类和对象、控制流程、访问修饰符等示例,展示了关键字的实际应用。掌握这些关键字,是成为优秀Java程序员的基础。
59 3
|
Java 测试技术 API
Java 18 新功能介绍
Java 18 新功能介绍
340 0
Java 18 新功能介绍

热门文章

最新文章