分页的实现分为前端和后端
模式:从点击一个按钮"首页" 然后显示首页不过这个首页是经过分页的!
分页原理:利用数据库的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>