JavaWeb 分页查询

由于html不能直接从域当中直接拿数据 所以我们引入了jsp文件

数据存在了requets域当中

如果数据量很大,不可能把所有数据全部在页面展示:

数据全部在页面展示缺点:

  • SQL执行时间过长

  • 用户查看数据,滚动滚动条,用户体验不高

在实际开发中,分页查询, 实现:

sql语句: mysql分页实现: limit x,y x:开始序号(o开始)y:限制条数

前端:有页码  传递的请求参数有页码,当前页码, 上一页 下一页

一页最多展示的行数 -> 页容量(可以固定,也可以让用户进行选择)

java后台:Servlet接受请求 处理请求 响应结果  service去数据库中进行查询

后台提供的响应结果:

  • list行数据  list<对象> 行数据 select from 表明 limit x,y (x开始序号=(当前页码-1)*页容量y:页容量)
  • 页码  pageIndex
  • 总页数(用来判断是否可以进行/到下一页面)总页数不是由前端决定 -> 由后台数据决定 ->对应的是看由多少条记录,比如我现在数据库表中只有10条记录,因为我每一页只显示5条,5就是页容量 ->总页数就是10/5    但是多了1条呢? 11/5 = 5 最好一条数据不能显示  -> 需要对其进行取余    11 / 5 = 0 ? 
  • 总记录数
  • 页容量
  • 所以我们需要求出总页数:总记录数%页容量==0?总记录数/页容量:总记录数/页容量+1   总记录数:select count(1) from 表名  而页容量是由前端传递
  • JavaWeb 分页查询_第1张图片
  • 封装的思维:把响应给前端的5个数据封装到一个类中:分页实体类(Page)

JavaWeb 分页查询_第2张图片

JavaWeb 分页查询_第3张图片

JavaWeb 分页查询_第4张图片

JavaWeb 分页查询_第5张图片

跨列 8列

JavaWeb 分页查询_第6张图片

有个问题:怎么知道有没有下一页?

next不能点的问题,

web层写servlet

超链接链接到servlet里面去查数据  那么就是一个get请求

1.编码处理 2.获取请求参数 得到页码 3.调用业务层内的方法 4.根据4的结果响应不同的结果(跳转页面)

JavaWeb 分页查询_第7张图片

JavaWeb 分页查询_第8张图片

null && “”  -> null && isEmpty()->双引号替代

但是向service层传的数据是int类型的,此时的pageIndex是String类型

进行数据类型转换 int pageIndex = 1;

传递页码

JavaWeb 分页查询_第9张图片

传递页容量

JavaWeb 分页查询_第10张图片

调方法

JavaWeb 分页查询_第11张图片

JavaWeb 分页查询_第12张图片

问题:

JavaWeb 分页查询_第13张图片

JavaWeb 分页查询_第14张图片

JavaWeb 分页查询_第15张图片

JavaWeb 分页查询_第16张图片

JavaWeb 分页查询_第17张图片

JavaWeb 分页查询_第18张图片

JavaWeb 分页查询_第19张图片

调用业务层方法结束 但是最终数据要给到页面

怎么给呢? list.html -> list.jsp 数据放到request域中

JavaWeb 分页查询_第20张图片

开始实现页面的跳转

request域有数据  -> 只能请求转发

JavaWeb 分页查询_第21张图片

servlet结束

写:useservice里的方法  page实体类 list.jsp

写实体类:如果项目当中多出需要使用分页  这个User就不就写死了吗?

使用泛型

JavaWeb 分页查询_第22张图片

JavaWeb 分页查询_第23张图片

JavaWeb 分页查询_第24张图片

JavaWeb 分页查询_第25张图片

当我们的项目当中很多地方都需要用到分页的时候,我们就需要用到泛型T

JavaWeb 分页查询_第26张图片

private List records = new ArrayList<>();

private int pageIndex;

private int pageSize;

private int TotalPage

JavaWeb 分页查询_第27张图片

总页数不能时我们设置好的 应该是由我们计算好的

那么setTotalPages(int TotalPages)方法不能这么写

getTotalPages(){
return @
}

写一下User实例

JavaWeb 分页查询_第28张图片

一个Dao的方法一般只执行一条sql语句

JavaWeb 分页查询_第29张图片

而者两个合成一个service

Page.setPageIndex

JavaWeb 分页查询_第30张图片

创dao接口

JavaWeb 分页查询_第31张图片

创实现类

JavaWeb 分页查询_第32张图片

JavaWeb 分页查询_第33张图片

JavaWeb 分页查询_第34张图片

JavaWeb 分页查询_第35张图片

service写完

等到dao一写完 后台就写完了

JavaWeb 分页查询_第36张图片

有点不懂!!!!

JavaWeb 分页查询_第37张图片

或者再改改:

JavaWeb 分页查询_第38张图片

分页查询之JSP

JSP
JSP (Java Server Pages)是JavaWeb服务器端的动态资源。它与html页面的作用是相同的,显示数据和获取数据。
html转换为jsp
jsp: html + java脚本,使用html展示数据,又可以编写java代码,获取数据

html转换为jsp

jsp:html+jaav脚本 既可以有html展示数据的本事 又可以编写java代码来获取数据 

jstl标签

JavaWeb 分页查询_第39张图片

jsp本身是一个servlet  

编写java逻辑代码 方法体内写的是java代码

<%

        写的代码 都是放在service()方法  -> 联想到servlet里面的service方法

%>

把表达式结果显示在页面
<%=表达式%>

等同于servlet的reponse.getWriter( ).print(表达式)

定义属性,方法作为Servlet的属性和方法,一般很少在servlet定义属性,方法,很少使用

<%

        private int a;

        public int a(){}

%>

JavaWeb 分页查询_第40张图片

生成一个list.jsp

page指令  也是一个标签  是对于jsp页面的设置 声明写的是java脚本

jsp是一个类,你写一个java脚本在里面  也可以导包(比如你在脚本里面用到List

集合)list.html -> list.jsp那么这个转换就很简单了

使用java脚本呢获取域当中的数据

留一个:

JavaWeb 分页查询_第41张图片

步骤:

从域中获取数据 request.getAttribute("page") -> 返回的是Object  需要转换

page在jsp里面是一个特殊的关键字

拿到数据之后开始循环遍历

遍历List集合拿到的是一个User对象

JavaWeb 分页查询_第42张图片

JavaWeb 分页查询_第43张图片

站在用户角度上:用户就是看到首页和点击跳转后的页面,但是

从后方人员来看  -> 用户带年纪查询  -> 发起请求到ListServlet  ListServlet调用service,service调用dao里面的方法->dao1操作数据库 -> 最后ListServlet请求转发到list.jsp,这才是后方人员干的事  没有ListServlet就没有数据,这是我们需要了解的web流程

JavaWeb 分页查询_第44张图片

改一改下面的功能

JavaWeb 分页查询_第45张图片

从users得到总页数

JavaWeb 分页查询_第46张图片

如果i是当前页码  加上一个active选择器

if(i == userPage.getPageindex())

JavaWeb 分页查询_第47张图片

注意当前页不可以再点击发起请求了->超链接设置一下跳转

作业:请你完成上一页和下一页

如果是第一页不能点 同理下一页  如果不是最后一页和第一页那么都可以点

你可能感兴趣的:(JacaEE,java,后端)