百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

JavaWeb16-案例分页实现(Java真正的全栈开发)

suiw9 2024-11-06 20:23 36 浏览 0 评论

案例 & 分页

一.案例

1. 删除选中分析

商品列表页面如下:



要求:

1.在表头上添加一个复选框.(列表全选或者全不选)

2.在list.jsp中添加一个删除选中的按钮,点击删除选中商品

2. 删除选中实现

全选或者全不选的实现

在表头上添加一个复选框



遍历商品的时候给每一个商品添加一个复选框,为了便于获取,给他们使用了name属性



编写js函数实现全选或者全不选



删除选中记录的实现

获取选中的记录,将选中的ids传递给DeleteProductByIdsServlet

为了方便获取选中记录的id,在复选框上添加value属性,值为当前记录的id



在点击删除选中按钮的时候,获取所有选中记录的id,传递到后台

实现方式两种:

方式1:手动拼url,在后台获取id参数



方式2:通过form表单,在后天获取name=’ck’的参数

将图书列表的tr放到一个form表单中,当点击’删除选中’,触发当前表单提交



DeleteProductByIdsServlet调用service,service调用dao,在到里执行批量操作

dao里的写法



3. 多条件查询商品分析

4. 多条件查询商品实现

dao条件查询写法



二.分页

1. 分页原理介绍

分页介绍

分页就是将数据以多页展示出来

分页作用

为了提高用户的感受

分页技术分类

物理分页

只从数据库中查询出要显示的数据

优点:不占用很多内存

缺点:速度比较低,每一次都要从数据库中获取

逻辑分页

从数据库中将所有记录查找到,存储到内存中,需要什么数据

直接从内存中获取.

优点:速度比较快

缺点:占用比较多的内存,如果数据比较多,可以出现内在溢出。

数据实时更新需要单独处理.

mysql中limit介绍

利用mysql的limit,进行物理分页。

格式1:

select * from 表名 limit m,n;

m是从0开始,代表是第几条记录

n代表显示多少条记录

可以理解从第m+1条记录到m+n条记录 闭合区间[m+1,m+n]

格式2:

select * from 表名 limit n;

可以理解为前n条记录

等价于:select * from 表名 limit 0,n;

例如

select * from person limit 4,10;

从第5条记录开始,显示10条.也就是[5,14]

分页实现原理分析

a.明确一共多少条记录

select coun(*) from 表;

b.明确每一页显示多少条记录

自己定义或者从前台传过来

c.计算一共多少页

计算方式1:总条数%每页条数==0?总条数/每页条数:总条数/每页条数+1

计算方式2:Math.ceil(总条数*1.0/每页条数)

d.查看第几页

默认第一页,从前台页面传过来

点击上一页下一页的时候,就是对当前页加或者减1操作

e.当前页码的数据

通过limit查询出数据

例如:每页显示5条,查询第3页数据

select * from 表 limit (3-1)*5,5;

用(当前页码-1)*每页条数,就求出了开始的记录位置,在向下查找每页数个记录。就得到了这页的数据.

2. 分页功能分析

执行流程:

a从index.jsp链接进入商品列表页面,默认访问第一页的数据,

b.发送至findProductsByPageServlet查询第一页数据,每页的条数默认为4条,

需要两个参数:当前页页码和每页显示的条数

c.调用productService的findProductsByPage(int 当前页,int 每页条数),返回值为bean对象.将当前页码,每页条数,总条数,总页数以及当前页的图书列表封装成pageBean,

d.将pagebean放到request域中,返回给product_list.jsp

e.在jsp页面将数据遍历

3. 分页功能实现

编写PageBean

private Integer currentPage;//当前页码

private Integer pageSize;//每页条数

private Integer totalPage;//总页数

private Integer totalCount;//总条数

private List<Product> list;//每页数据

编写servlet(分页查找)

编写productService中的分页查找方法,将查找出数据进行封装成pagebean

public PageBean findProductsByPage(int currentPage, int pageSize) throws SQLException {

//查找总条数

int totalCount=dao.getTotalCount();

//计算总页数

int totalPage=(int) Math.ceil(totalCount*1.0/pageSize);

//查询当前页数据

List<Product> list=dao.findProductsByPage(currentPage,pageSize);

//封装数据

PageBean bean=new PageBean(currentPage, pageSize, totalPage, totalCount, list);

return bean;

}

编写productDao中的方法

查看总条数

public int getTotalCount() throws SQLException {

QueryRunner runner = new QueryRunner(DataSourceUtils.getDateSource());

String sql="select count(*) from products";

return ((Long) runner.query(sql, new ScalarHandler())).intValue();

}

查看当前页数据

public List<Product> findProductsByPage(int currentPage, int pageSize) throws SQLException {

QueryRunner runner = new QueryRunner(DataSourceUtils.getDateSource());

String sql="select * from products limit ?,?";

return runner.query(sql, new BeanListHandler<Product>(Product.class), (currentPage-1)*pageSize,pageSize);

}

4. 设置分页条码

<c:if test="${pb.currentPage==1 }">

<li><<上一页</li>

</c:if>

<c:if test="${pb.currentPage!=1 }">

<li><a href="${pageContext.request.contextPath }/findProductsByPage?page=${pb.currentPage-1}"><<上一页</a></li>

</c:if>

<c:forEach begin="1" end="${pb.totalPage }" step="1" var="n">

<c:if test="${n == pb.currentPage}">

<li>${n }</li>

</c:if>

<c:if test="${n != pb.currentPage}">

<li><a href="${pageContext.request.contextPath }/findProductsByPage?page=${n}">${n }</a></li>

</c:if>

</c:forEach>

<c:if test="${pb.currentPage==pb.totalPage }">

<li>下一页>></li>

</c:if>

<c:if test="${pb.currentPage!=pb.totalPage }">

<li><a href="${pageContext.request.contextPath }/findProductsByPage?page=${pb.currentPage+1}">下一页>></a></li>

</c:if>


请点击此处输入图片描述

三.案例

1. 显示商品详情分析

2. 显示商品详情实现

页面:product_info.jsp

3. 将商品添加到购物车分析

在商品详情页面点击购买,将该商品添加到购物车.

购物车存放在哪儿?

session

购物车的数据结构是什么?

Map<Product,Integer>

如何保证购物车里物品的唯一性?

重写key的equals和hashcode方法

也就是说重写product的两个方法.(只需要判断id即可)

4. 将商品添加到购物车实现

修改product_info.jsp的”购买”链接

在add2cartServlet中将商品添加到购物车即可

5. 显示购物车中的商品信息分析

直接点击页面右上部的购物车即可,购物车的页面如下:

6. 显示购物车中的商品信息实现

只需要在页面中将购物车中的数据展示出来即可

遍历map

7. 修改购物车中商品数量分析

页面删有三个按钮,分别是添加一个,减少一个以及从购物车移除该商品



请点击此处输入图片描述请点击此处输入图片描述

添加的时候:

1.需要知道对那个商品就行操作的,并且个数是多少,因此在触发按钮的时候需要将id和个数传过去

2.修改的个数大于库存了或者小于0如何做?

思路:

需要在点击按钮的时候,将商品的库存数量一并传过去

当购买数量<=0时从购物车移走

当透明数量>=库存时,设成最大值

8. 修改购物车中商品数量实现

jsp页面的修改

a.在按钮上添加单击事件,将当前商品的id,count以及库存传过去



b.在js中判断数量>库存或者<=0时的操作

c.在点击删除按钮的时候,将数量置为0即可

修改项目名称



更多精彩资源与分享,欢迎关注【Java帮帮】微信公众号与【Java帮帮】QQ空间

相关推荐

5款Syslog集中系统日志常用工具对比推荐

一、为何要集中管理Syslog?Syslog由Linux/Unix系统及其他网络设备生成,广泛分布于整个网络。因其包含关键信息,可用于识别网络中的恶意活动,所以必须对其进行持续监控。将Sys...

跨平台、多数据库支持的开源数据库管理工具——DBeaver

简介今天给大家推荐一个开源的数据库管理工具——DBeaver。它支持多种数据库系统,包括Mysql、Oracle、PostgreSQL、SLQLite、SQLServer等。DBeaver的界面友好...

强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)

NavicatPremium,一款集数据迁移、数据库管理、SQL/查询编辑、智能设计、高效协作于一体的全能数据库开发工具。无论你是MySQL、MariaDB、MongoDB、SQLServer、O...

3 年 Java 程序员还玩不转 MongoDB,网友:失望

一、什么场景使用MongoDB?...

拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南

作为一名在NoSQL丛林中披荆斩棘的数据猎人,没有比GUI工具更称手的瑞士军刀了。本文将带你围观五款主流MongoDB管理神器的特性与暗坑,附赠精准到扎心的吐槽指南一、MongoDBCompass:...

mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?

前言最近在做neo4j相关的同步处理,因为产线的可视化工具短暂不可用,发现写起来各种脚本非常麻烦。...

solidworks使用心得,纯干货!建议大家收藏

SolidWorks常见问题...

统一规约-关乎数字化的真正实现(规范统一性)

尽管数字化转型的浪潮如此深入人心,但是,对于OPCUA和TSN的了解却又甚少,这难免让人质疑其可实现性,因为,如果缺乏统一的语义互操作规范,以及更为具有广泛适用的网络与通信,则数字化实际上几乎难以具...

Elasticsearch节点角色配置详解(Node)

本篇文章将介绍如下内容:节点角色简介...

产前母婴用品分享 篇一:我的母婴购物清单及单品推荐

作者:DaisyH8746在张大妈上已经混迹很久了,有事没事看看“什么值得买”已渐渐成了一种生活习惯,然而却从来没有想过自己要写篇文章发布上来,直到由于我产前功课做得“太过认真”(认真到都有点过了,...

比任何人都光彩照人的假期!水润、紧致的肌肤护理程序

图片来源:谜尚愉快的假期临近了。身心振奋的休假季节。但是不能因为这种心情而失去珍贵的东西,那就是皮肤健康。炙热的阳光和强烈的紫外线是使我们皮肤老化的主犯。因此,如果怀着快乐的心情对皮肤置之不理,就会使...

Arm发布Armv9边缘AI计算平台,支持运行超10亿参数端侧AI模型

中关村在线2月27日消息,Arm正式发布Armv9边缘人工智能(AI)计算平台。据悉,该平台以全新的ArmCortex-A320CPU和领先的边缘AI加速器ArmEthos-U85NPU为核心...

柔性——面向大规模定制生产的数字化实现的基本特征

大规模定制生产模式的核心是柔性,尤其是体现在其对定制的要求方面。既然是定制,并且是大规模的定制,对于制造系统的柔性以及借助于数字化手段实现的柔性,就提出了更高的要求。面向大规模定制生产的数字化业务管控...

创建PLC内部标准——企业前进的道路

作者:FrankBurger...

标准化编程之 ----------- 西门子LPMLV30测试总结

PackML乃是由OMAC开发且被ISA所采用的自动化标准TR88.00.02,能够更为便捷地传输与检索一致的机器数据。PackML的主要宗旨在于于整个工厂车间倡导通用的“外观和感觉”,...

取消回复欢迎 发表评论: