由于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 表名 而页容量是由前端传递
- 封装的思维:把响应给前端的5个数据封装到一个类中:分页实体类(Page)
<nav aria-label="Page navigation example"> <ul class="pagination"> <li class="page-item"> <a class="page-link" href="#" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> <li class="page-item"><a class="page-link" href="#">1</a></li> <li class="page-item"><a class="page-link" href="#">2</a></li> <li class="page-item"><a class="page-link" href="#">3</a></li> <li class="page-item"> <a class="page-link" href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav>
跨列 8列
有个问题:怎么知道有没有下一页?
next不能点的问题,
web层写servlet
超链接链接到servlet里面去查数据 那么就是一个get请求
1.编码处理 2.获取请求参数 得到页码 3.调用业务层内的方法 4.根据4的结果响应不同的结果(跳转页面)
null && “” -> null && isEmpty()->双引号替代
但是向service层传的数据是int类型的,此时的pageIndex是String类型
进行数据类型转换 int pageIndex = 1;
传递页码
传递页容量
调方法
问题:
调用业务层方法结束 但是最终数据要给到页面
怎么给呢? list.html -> list.jsp 数据放到request域中
开始实现页面的跳转
request域有数据 -> 只能请求转发
servlet结束
写:useservice里的方法 page实体类 list.jsp
写实体类:如果项目当中多出需要使用分页 这个User就不就写死了吗?
使用泛型
当我们的项目当中很多地方都需要用到分页的时候,我们就需要用到泛型T
private List<T> records = new ArrayList<>();
private int pageIndex;
private int pageSize;
private int TotalPage
总页数不能时我们设置好的 应该是由我们计算好的
那么setTotalPages(int TotalPages)方法不能这么写
getTotalPages(){
return @
}
写一下User实例
一个Dao的方法一般只执行一条sql语句
而者两个合成一个service
Page.setPageIndex
创dao接口
创实现类
service写完
等到dao一写完 后台就写完了
有点不懂!!!!
或者再改改:
分页查询之JSP
JSP
JSP (Java Server Pages)是JavaWeb服务器端的动态资源。它与html页面的作用是相同的,显示数据和获取数据。
html转换为jsp
jsp: html + java脚本,使用html展示数据,又可以编写java代码,获取数据
html转换为jsp
jsp:html+jaav脚本 既可以有html展示数据的本事 又可以编写java代码来获取数据
jstl标签
jsp本身是一个servlet
编写java逻辑代码 方法体内写的是java代码
<%
写的代码 都是放在service()方法 -> 联想到servlet里面的service方法
%>
把表达式结果显示在页面
<%=表达式%>等同于servlet的reponse.getWriter( ).print(表达式)
定义属性,方法作为Servlet的属性和方法,一般很少在servlet定义属性,方法,很少使用
<%
private int a;
public int a(){}
%>
生成一个list.jsp
page指令 也是一个标签 是对于jsp页面的设置 声明写的是java脚本
jsp是一个类,你写一个java脚本在里面 也可以导包(比如你在脚本里面用到List
集合)list.html -> list.jsp那么这个转换就很简单了
使用java脚本呢获取域当中的数据
留一个:
步骤:
从域中获取数据 request.getAttribute("page") -> 返回的是Object 需要转换
page在jsp里面是一个特殊的关键字
。
拿到数据之后开始循环遍历
遍历List集合拿到的是一个User对象
站在用户角度上:用户就是看到首页和点击跳转后的页面,但是
从后方人员来看 -> 用户带年纪查询 -> 发起请求到ListServlet ListServlet调用service,service调用dao里面的方法->dao1操作数据库 -> 最后ListServlet请求转发到list.jsp,这才是后方人员干的事 没有ListServlet就没有数据,这是我们需要了解的web流程
改一改下面的功能
从users得到总页数
如果i是当前页码 加上一个active选择器
if(i == userPage.getPageindex())
注意当前页不可以再点击发起请求了->超链接设置一下跳转
作业:请你完成上一页和下一页
如果是第一页不能点 同理下一页 如果不是最后一页和第一页那么都可以点