javaWeb中的分页效果实现
分页的实现分为前端和后端
模式:从点击一个按钮"首页" 然后显示首页不过这个首页是经过分页的!
分页原理:利用数据库的limit查询 select * from t_user limit m,n;
m为startNum 开始查询的记录数 n为pageSize为一页查询的记录数
涉及到的变量:startNum 开始查询的记录数
totalNum 所有的记录数
pageNum 第几页 页数
totalPage 总的页数
pageSize 每页的记录数
计算公式:startNum=(pageNum-1)*pageSize
实现步骤:
1.首先在这个首页的按钮上添加一个链接指向一个servlet,目的是加载一些数据
同时在这个按钮给定两个参数一个是需要查询的页数pageNum和每页记录数pageSize
然后在后端接受这个两个参数,让这两个参数经过运算可以得到 startNum 和 pageSize
有了这两个数据就可以去数据库中查询出初始的数据了,不能说分页的时候用户刚开始
点进去没有数据吧,那样效果就不行了。
2.后台servlet中,接受参数,接受从按钮中传递过来的参数,然后处理以后,查询出初始
数据封装成一个list集合,放到request域对象中,同时在这个servlet中还查询出来总的
数据记录数 利用select count(*) from t_user 然后把查询出来结果,返回到servelt
中,然后判断如果这个总的记录数除以每页的记录数等于一个整数 和有余数,如果有余数
就需要多加上一页。然后把计算出来的总的页数放到request域对象中,同时把从“首页”按钮
接受的参数pageNum也放到域对象中,最后就是请求转发到jsp,list.jsp中,(展示数据的jsp)
3.在展示数据的jsp中的操作:通过总的页数这个数据来遍历按钮,就是多少页就有多少个按钮
然后将这个按钮的herf属性设置为刚刚的那个servelt路径,后面跟的请求参数和按钮一样
pageNum 和 pageSize ,因为当跳转到这个list.jsp以后,这两个参数的值就是从这个list.jsp
页面发出了,pageNum就为当前按钮的遍历的值,href="/queryByPageServlet?pageNum=${currentPage}&pageSize=5"
把pageNum放到域对象中的目的是为了做前一页和后一页的翻页效果 需要从域对象中拿到这个pageNum的值
在list.jsp中和1对比,如果是小于1,就不可以往前面翻页的,然后和最大页数对比,如果是大于最后
一页就不可以往后面一页翻页了。
代码实现
首页:index.jsp
<a
href="/queryByPageServlet?pageNum=1&pageSize=5" style="text-decoration:none;font-size:33px">查询所有用户信息
</a>
servlet中代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 设置编码
*/
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
/**
* 接受数据
*/
//接受数据是从index.jsp页面中传递过来的,使用来初始化页面的 pageSize=5 pageNum=1 同时处理数据格式
String num = request.getParameter("pageNum");
String size = request.getParameter("pageSize");
int pageNum = Integer.parseInt(num);
int pageSize = Integer.parseInt(size);
/**
* 处理数据
*/
//计算开始的记录数
int startCount=(pageNum-1)*pageSize;
//首先根据startCount和pageSize去数据库中查询数据,然后初始化页面,虽然是分页,但是不能说用户点击查询的时候页面一个数据都没有吧!
UserService userService=new UserService();
List<User> userlist=userService.queryUserBystartCountAndpageSize( pageNum, pageSize);
//定义总的页数
int totalPage;
int totalCount=userService.queryTotalCount();
//根据返回过来的totalCount判断
if(totalCount%5==0){
totalPage=totalCount/pageSize;
}else{
totalPage=totalCount/pageSize+1;
}
/**
* 处理数据
*/
//servlet请求的时候把list传递过去
request.setAttribute("userlist",userlist);
//然后这个servlet请求转发list.jsp,请求的时候,把这个pageNum带过去
request.setAttribute("totalPage",totalPage);
//把当前页的页数放到requet域对象中
request.setAttribute("pageNum",num);
//转发
request.getRequestDispatcher("/list.jsp").forward(request,response);
}
展示数据的页面 list.jsp
<form action="" method="post">
<%--前一页--%>
<c:if test="${pageNum>1}"><%--只有在pageNum大于1的时候才会向前一页,如果不是大于1的话,请求向前一页就会报错--%>
<a href="/queryByPageServlet?pageNum=${currentPage-1}&pageSize=5" class="btn btn-default btn-success" >
<%--添加一个向前一位的图标--%>
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
</c:if>
<%--遍历--%>
<c:forEach begin="1" end="${requestScope.totalPage}" var="currentPage">
<a href="/queryByPageServlet?pageNum=${currentPage}&pageSize=5" class="btn btn-default btn-success" >第${currentPage}页</a>
</c:forEach>
<%--后一页--%>
<c:if test="${pageNum<requestScope.totalPage}"><%--只有比最后一位小才是可以的--%>
<a href="/queryByPageServlet?pageNum=${currentPage+1}&pageSize=5" class="btn btn-default btn-success" >
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</c:if>
</form>
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。