当前课程知识点:Web后端开发技术 >  第9章 某高校毕业生信息发布系统开发 >  9.3 系统实现 >  9.3.4.1首页分页显示

返回《Web后端开发技术》慕课在线视频课程列表

9.3.4.1首页分页显示在线视频

下一节:9.3.4.2首页分页显示

返回《Web后端开发技术》慕课在线视频列表

9.3.4.1首页分页显示课程教案、知识点、字幕

同学你好

今天我们学习这个知识点

本节我们来看一下首页数据该

如何去分页展示

那么大家知道我们的数据在数据库里

实际很多

那么我们需要一次取出来一部分数据

给大家进行展示

然后我们可以点击下一页

上一页或者点击对应的页码

然后跳到对应的页面

那么这里我在第1步做的时候

我们先不考虑这个专业

这个专业我就先列在这

按理来说

如果我选中的是计算机科学与技术

那么这里的列出来的数据应该都是

计算机科学技术的

那么这时候我分两步来做

首先我就认为我查出的数据是全部的数据

然后在这个基础上

我们先把分页的功能给它完成

然后在第2步的时候

我们在考虑

当我们改变专业的时候

如何基于这个专业

然后再做我们的分页查询

那么为了完成分页查询

我首先先建立的一个类

我放在Java.util

这个包下

叫做page类

在page类当中我有这么几个属性

一个叫做每页大小

所谓的每页大小就是我每个页要展示

多少条数据

大家可以看到

这是我当前的数据库

那么假如说我每页

现在我默认我给他5条

也就是说我一次取的时候

比如说我第1页数据就应该从1到5条

给展示出来

然后第2页数据是展示

第6条数据

那么第2个属性就是我当前页到底

属于第1页还是属于第2页

那么再有一个就是我的总页数

我们等一下说总页数

我们先说总数据量

所以总数据量就是在我数据库当中

一共有多少条数据

这个是我们需要通过SQL

语句来求出来的

很显然在我们当前数据量当中

我们的总数据量是6条

那么有了我们的总数据量

有了每页大小

很显然我们的总页数就有了

比如说我们的总数据量是6条

每一页假如说每页是三条的话

那么我们现在totalpage就是两页

那么这时候6除以3是正好能整除的

但是如果是5条

像我们当前页

很显然我们也得需要两页

为什么

因为头一页有5条

第2页一共有6条数据

第2页虽然说只显示一条数据

但是也需要用两页来去取

那么我们怎么算totalpage

那么大家可以看到我这里的totalpage

get方法

我在这里做了一个重写

那么如果totalpage和totalcount

也是总数据量

和我们的总每页显示数据量

比如说6和3

它取余是0的

我们的大小直接用6除以3等于2就可以了

但是如果我们的总数量是6和5

它取余是不等于0的

不等于0

我就要整除以后6除以5

取整是1

那么再加上一个1

那么就等于2

两页

所以说这就是我们的totalpage的

计算方法

好了

那么有了帮助类

还有一项叫做list

这里我用来存储

我根据当前的这些设置

里面的数据是什么

所以说我在页面上我只需返回page对象

就可以了

那么我们来看一下我们的主要的

student dao

那么student dao

我们需要接收这么几个参数

第1个我想访问的是第几页的数据

然后每页数据

每页还有多少数据

当然了

我们这里要传进的一个majorId

看看它有没有majorId

如果有majorId

它是作为一个条件进行查询的

那么我这里有两个SQL

一个是用来查询数据的sql

一个是用来计算我总数据量的

SQL

那么查询数据的SQL

首先如果

majoridea不等于空

那么我就要构造一个什么样的SQL

select*from student

然后把major的条件给设置上

同样我查询总数据量

我就是select count*

from student

然后把 major的条件给设置上

那么如果 major Id是

等于空的

那么我们这两条语句相当于后面就

不用加 major条件了

好了

紧接着我们就要去取

offset

offset是什么意思呢

假如说我们现在想取的是

第1页的数据

大家去想我们的MySQL数据库

我们要用 limit这个关键字

他的第1个参数表是从第几条开始取

这是第0条数据 从第几条开始取

取多少条出来

那么我们假如说当前是第1页

那么很显然我是从第0条开始取

取5条出来

那么假如说当前是第2页

我肯定是从第几条开始取

从第0条

1条

2条

3条

4条

第5条过去以后

从这是

0 1 2 3 4

那么我第2页数据实际上从第5条开始取

取5条出来

以此类推

我第3页数据是从第10条开始取

取5条出来

那么问题是我现在只给的是我的

page size

我的current page

这是current page

那么我们需要计算出来

我从第几条开始起

那么第几条我叫做offset

那么offset的计算方法就是我的

当前页减1

乘以我的pagesize

比如说当前页是第1页

1减1

那就是0乘以pagesize还是0

当前页是第2页

2-1是1 我的pagesize是5

那我就从第5条开始取

同理当前也是3 3-1是2

2乘我的pagesize就是10

从这10条开始取

那么这就是我的offer set的含义

好了

所以说我现在开始拼凑一个空格

limit

从哪开始取offset

我计算出来offset

然后逗号分隔

取多少条出来

也就是取我的page size

这么多条出来

好了

我们的两个SQL都已经构造完了

我定义一个我的list用来存取我

最终的数据

prepared对象

然后我要设置参数

同样我的major ID不等于空的话

我第1个SQL

我要设置major ID进去

我这个totalSQL

也就是计算总数据量的SQL

也要设置major Id进去

那么如果这个参数等于空

那么当然了我就不用设置参数了

当然这句话其实你不写也是可以的

在这里写出来是为了大家跟上面对比

好了

我们紧接着就要定义我们的

ResultSet对象了

第1个我要通过pstmt

也就是说查询我数据真正数据的

pstmt

prepare statement

然后我这个数据进行循环

每次循环以后

我们有一个student对象

把我查出来的数据放到

我student对象里

然后把这一个对象放到我 list

集合当中

当循环完以后我集合当中

存储的就是我这根据我当前条件

查出来的所有的数据

那么底下ResultSet是我要直接

执行完以后

因为它里面就存在一条数据

就是我的总数据量

我直接给他查出来

直接查出来以后

我定义一个我的page对象

我page对象里面的totalcount就

设置成我查出来的总数据量

然后我关闭对应的数据库

然后我把我的page里面的相关的这些

属性给进行初始化了

我们page里面有pagesize

预定义就是5 currentpage

那么就是我传进来的是什么

我就设置是什么

pagesize

当然了

我们这里预定的是我

当然我这里传进来是什么

我实际上是可以改我这个pagesize

然后设置我的data

当然了

我的总数据量在这里已经设置过了

那么大家可以看到

实际上我的totalpage是不用设置的

因为有了totalcount的设置完了

有了

pageset设置完了

那么我就可以根据这两个量计算出来

我的totalpage

这就是我们的student dao

相对来说比较复杂的一个方法

我们的student service很简单

直接调用我们的student dao

把相应的参数传进去就可以了

我们来看我们的indexServlet

首先我的 majors

原先我 majors都是写死的

大家可以看我们之前课课上的代码

现在我是从数据库里我写了一个

getAllMajors这么一个方法

从数据库里给它取出来

取出来以后

我放在request请求域当中

然后我定义一个变量叫做

currentPage

还有一个叫做majorId

那么currentPage有可能是从页面上

传过来的

如果他传了

我就try catch给他转换成整型

如果没传他肯定这块就会报错

我就会给他catch住

那么默认的页面就是1

当然了

如果页面上传过来的currentpage是2

那么这句话就把currentpage

给改成2了

同样这个也是如果我页面传过来一个

majorId在这里面就会给

改掉

如果页面没有传出过来

majorId

我默认的majorId就是一个空值

然后这时候我就定义一个我的页面的

一个page对象

那么page对象

我通过student service

.getstudent

把我的

current配置当前页

每页的大小

以及我们的majorID传进去

刚才这个方法我们也讲过了

他可以获得一个page对象

然后我们把page对象设置到我们的

request请求域当中

然后我们就转向到我们的cvindex.jsp

我们来看一下我们的

cvindex.jsp

这块是我们的select下拉框

我没有做任何的更改

那么

这里原先大家还记得

我们是搁的一个student对象

现在不是了

现在这应该是我们page里面的

datas对象

因为它是一个list集合,这个集合里装的

每一个对象装的是一个

student对象

所以这里我改成page.datas

那么再看我下面的分页部分

大家可以看到我给他进行了一个改动

那么我之前代码我给他备份了一下

我们对照着来看

在这里back 之前我们的分页代码

就在这写死的

大家先就想

我把它改成了上一页

所谓的上一页

大家看是不是我当前页数减1

往上走一页

我当前页数比如说

是第2页往上走一页

就走到第1页去了

那么我给它传到哪

是不是传到我indexServlet

我给他一个参数值

current的配置就是page.current

我当前的页数减一就可以了

所以说在我的indexservlet

我就可以获得我currentPage了

同理

我的下一页是不是就是我的当前页

加一就可以了

没有问题

我这里一共要显示10个数字

也就是说从比如12345678910

我找到中间的这个位置

大家注意看

我找到中间这个位置

中间这个位置显示的就是我的当前页

比如说我的当前页是举个简单的例子

我的当前页第3页

那么这块应该就显示了3

那么我再往后台传

传url的时候

大家可以看到

我这里传的就是current page

当前页就是三 实际上url

你可以不写

因为当前处于第3页的时候

这个链接是可以不点的

所以这行代码你可以去掉

那么往后走是不是

我就要走到4

下一页就是5

再下一页6

再下一页7再下一页8

是这个意思吧

所以说我这里的页码的显示

就是在我当前页的基础上

加1加2加3加4加5

同样我往后台里传的时候

页数也要在我之前的

加1加2加3加4加5

那么同样往上走

应该第2页

第1页

有同学说你减3

这不就变成负1 负2

没错

现在是这样

待会我们看该怎么去解决

同理

这里传的也应该是2减1减2减3

一直减4

所以我运行一下这个代码

大家就可以看到我的效果

我的当前页是第1页

往前减就是0 -1 -2 -3

往后加就是2 3 4 5

那么很显然我不应该出现这样的情况

也就是我第1页

如果前面是不是没有了

就不应该再出现零这些东西了

而我最多一共有两页

大家看我这里已经给它显示出来了

在这里写着

page.current.page就是当前页

pagae.totalpage就是总共的页数

那么当我总共的页数

到达二的时候

后面的就不应该显示出来了

对吧

所以说这里大家可以麻烦一点

可以这样去写

在这里我做一个判断

每一条都做一个判断

c:if

我判断什么呢

我就判断

比如说这不是current减4吗

currentPage减4

我就判断currentPage减4

这个数值

它是不是大于等于1的

如果大于等于1我才让它显示

因为我前面最多显示到1

对吧

那么大家看我加了这一个判断以后

大家会看到负3就没了

同理

我这里再加一个判断

为了清晰可见

把这个加个缩进

注意这块不是减4了

而应该是我要判断这个减3是不是

大于等于1的

是我就让它显示出来

以此类推

你是不是可以判断

减2是不是大于等于1的

减1是不是大于等于1的

就可以了

对吧

我们把它保存一下

保存

这是第1页

第0页 负1页是吧

好像

我保存下没有保存下来

保存下来你一刷新应该就没有了

那么我们再看后面的

后面是不是我的current配置

加1以后一定要小于等于我这个

totalpage就可以了

所以说这块我怎么判断

我判断一下c:if

在这里写

test

currentPage加1

整个值

然后加括号

必须得小于等于我的totalPage

我才给他显示

如果不小于等于我就不显示了

所以说大家可以看到这个效果

我现在一共有两页

刚才我这个判断了

3应该就不显示了

它没有编译过来也好

大家可以看到刚才负2已经不显示了

如果你为了避免出现这样的情况

你就可以把这个服务器停掉

然后把它重启一下

好 刷新

解决完了

我们继续开始

我们看一下效果

现在没有变化

是因为我们当前也是1那么我们的

这块我判断的加1以后应该是第2页

而第2页我们有一共有两页

所以第2页正常显示

我们再往后写一个

把c:if判断拿过来

那么这时候我这个是判断我

currentPage加2了

加2的时候

应该是到3了

这个3应该不显示就对了

大家看3不显示

所以说后面我就不再写了

大家以此类推

把这些都分别加一个判断

都加一个判断

包括上面我没有写的

这两个也都加一个判断

那么大家还要去想上一页

因为我这个上一页没有任何的限制

是不是

当我到了第1页的时候

让上一页就不显示就可以了

所以说我说也加一个判断应该是什么

当我配置page.currentPage

就是我当前页

比如说是小于等于1的

我就不要让上一页

显示了

那么同样下一页

当我的当前页

是大于等于我的总页数

也就是说totalpage的时候

下一页也就不要再显示了

这样的话我整整个分页代码就会比较

完美了

我们将在下一个视频当中继续讲解

怎么样在选择专业的时候

带着分页功能

这个知识点就讲到这里

谢谢

Web后端开发技术课程列表:

第1章 Java Web开发准备

-1.0 导学

--1.0.1 导学

-1.1 Web应用开发概述

--1.1.1 Web应用简介

--1.1.2 Web开发技术

--1.1.3 测试

-1.2 准备Java Web应用开发环境

--1.2.1 准备Java Web应用开发环境

--1.2.2 测试

--1.2.3 谈谈JavaWeb优势和学习方法

-1.3 任务实现:Hello World Web项目

--1.3.1 Hello World Web项目

--1.3.2 测试

-1.4 小结

--1.4.1 小结

-本课程所有代码

--课程参考代码

第2章 Servlet技术基础

-2.0 导学

--2.0.1 导学

-2.1 Servlet概述

--2.1.1 Servlet简介

--2.1.2 Servlet API

--2.1.3 测试

-2.2 创建Servlet

--2.2.1 Hello Servlet

--2.2.2 Servlet配置

--2,2,3 作业

-2.3 Servlet应用

--2.3.1 处理超链接请求

--2.3.2 处理form表单请求

--2.3.3 处理结果

--2.3.4 测试

-2.4 任务实现:某高校毕业生信息发布系统-注册与登录(Servlet版)

--2.4.1 注册代码实现

--2.4.2 登录代码实现

--2.4.3 测试

--2.4.4谈一谈jQuery前端开发框架

-2.5 ServletConfig接口

--2.5.1 ServletConfig接口

-2.6 ServletContext接口

--2.6.1 ServletContext接口

-2.7 HttpServletRequest接口

--2.7.1 获取请求报文信息

--2.7.2 上传照片

--2.7.3 获取网络连接信息

--2.7.4 存取请求域属性

--2.7.5 测验

--2.7.6 在请求转发和重定向过程中传递数据

-2.8 HttpServletResponse接口

--2.8.1 HttpServletResponse接口

--2.8.2 输出服务器端图片

--2.8.3 测试

-2.9 任务实现:某高校毕业生信息发布系统-简历添加

--2.9.1 任务实现:某高校毕业生信息发布系统-简历添加

-2.10 小结

--2.10.1 小结

-动画演示:Java Web应用服务器处理客户端请求的过程

--Java Web应用服务器处理客户端请求的过程

第3章 会话跟踪

-3.0 导学

--3.0.1 导学

-3.1 Cookie技术

--3.1.1 Cookie技术概述

--3.1.2 Cookie技术应用-自动登录

--3.1.3 测试

-3.2 Session技术

--3.2.1 Session技术概述

--3.2.2 Session技术-Session技术应用购物车

--3.2.3 测试

-3.3 URL重写与隐藏表单域

--3.3.1 URL重写技术与隐藏表单域

--3.3.2 测试

-3.4 任务实现:某高校毕业生信息发布系统-简历修改

--3.4.1 任务实现:某高校毕业生信息发布系统-简历修改

--3.4.2 讨论会话跟踪技术的应用场景

-3.5 小结

--3.5.1 小结

第4章 JSP基础

-4.0 导学

--4.0.1 JSP导学

-4.1 jsp概述

--4.1.1 JSP概述

--4.1.2 测试

-4.2 脚本元素

--4.2.1 脚本元素

--4.2.2 测试

-4.3 指令元素

--4.3.1 指令元素

--4.3.2 测试

-4.4 动作元素

--4.4.1 动作元素

--4.4.3 测试

-4.5 内置对象

--4.5.1 内置对象(1)

--4.5.2 内置对象(2)

--4.5.3 测试

-4.6 JavaBean

--4.6.1 JavaBean概述

--4.6.2 分步注册

--4.6.3 测试

-4.7 任务实现:某高校毕业生信息发布系统-首页(JSP版)

--4.7.1 任务实现:某高校毕业生信息发布系统-首页(JSP版)

--4.7.2 在JSP页面显示内容的都有哪些方法

-4.8 小结

--4.8.1 小结

第5章 表达式语言

-5.0 导学

--5.0.1 表达式语言

--5.0.2 测试

-5.1 el语法

--5.1.1 EL语法

--5.1.2 测试

-5.2 el隐含对象

--5.2.1 EL隐含对象

--5.2.2 测试

-5.3 任务实现:某高校毕业生信息发布系统-学生详细信息展示

--5.3.1 任务实现:某高校毕业生信息发布系统-学生详细信息展示

--5.3.2 测试

-5.4 小结

--5.4.1 小结

--5.4.2 讨论el表达式的优势

第6章 标准标签库

-6.0 导学

--6.0.1 标准标签库

--6.0.2 测试

-6.1 核心标签库

--6.1.1 通用标签

--6.1.2 条件标签

--6.1.3 迭代标签

--6.1.4 URL标签

--6.1.5 测试

-6.2 任务实现:某高校毕业生信息发布系统-首页(JSTL版)

--6.2.1 任务实现:某高校毕业生信息发布系统-首页(JSTL版)

--6.2.2 测试

-6.3 小结

--6.3.1 小结

--6.3.2 讨论如何实现自定义标签

第7章 Filter和Listener

-7.0 导学

--7.0_导学

-7.1 过滤器

--7.1.1过滤器(1)

--7.1.2过滤器(2)

--7.1.3 测试

-7.2 监听器

--7.2.1.1与ServletContext相关的监听器

--7.2.1.2示例:访问网站计数功能

--7.2.2.1与Session相关的监听器

--7.2.2.2示例:显示在线用户名称

--7.2.3.1与Request相关的监听器

--7.2.3.2示例:实时显示访问网站用户信息示例

--7.2.4 测试

-7.3 任务实现:某高校毕业生信息发布系统-单态登录

--7.3.1 任务实现:某高校毕业生信息发布系统-单态登录

--7.3.2 测试

-7.4 小结

--7.4.1小结

--7.4.2讨论filter和listener使用场景

第8章 JDBC

-8.0 导学

--8.0_导学

-8.1 JDBC API

--8.1.1 JDBC API

--8.1.2 测试

-8.2 JDBC API访问MySQL基本步骤

--8.2.1 JDBC API

--8.2.2 测试

-8.3 任务实现:某高校毕业生信息发布系统-注册与登录

--8.3.1 任务实现:某高校毕业生信息发布系统-注册与登录(JDBC版)

--8.3.2 测试

-8.4 小结

--8.4.1小结

--8.4.2 讨论JDBC工具类

第9章 某高校毕业生信息发布系统开发

-9.0导学

--9.0导学

-9.1 技术准备

--9.1.1技术准备-MVC模式

--9.1.2技术准备-Ajax技术

--9.1.3技术准备-jQuery对Ajax的实现

--9.1.4_技术准备- JDBC工具类

--9.1.5 测试.

-9.2 系统设计

--9.2系统设计:某高校毕业生信息发布系统开发

-9.3 系统实现

--9.3.1完善登陆和注册功能

--9.3.2完善简历添加功能

--9.3.3完善简历修改功能

--9.3.4.1首页分页显示

--9.3.4.2首页分页显示

-9.4 小结

--9.4.1小结

--9.4.2讨论:分页组件

9.3.4.1首页分页显示笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。