- 创建一个分页类
- 从数据库中获取数据
- servlet层获取数据
- jsp页面展示
1、创建一个分页类
public class Pages { private int pageIndex;//当前页码(页面传递) private int pageSize;//页容量(后台设置) private int totalCount;//总记录数 (数据库查询) private int totalPages;//总页数(逻辑判断, //如果totalPages%pageSize=0输出totalPages/pageSize或者totalPages/pageSize) //查询Client表中的所有数据,返回一个list对象集合 private List<Client> datas; 在getTotalPages的get方法中设置默认总行数属性,不能更改 //总页数 = 总记录数 % 页容量 == 0 ? 总记录数 / 页容量 : 总记录数 / 页容量 + 1 return totalCount%pageSize == 0?totalCount/pageSize :totalCount/pageSize+1; 提供get/set方法 有参/无参构造方法
2、从数据中获取数据
Service实现类中的方法
/** * 分页查询 * pageSize 初始化页容量 * pageIndex 当前页码 * 返回分页集合类 */ @Override public Pages pageFindAll(int pageSize, int pageIndex) { Pages pages = new Pages(); pages.setPageSize(pageSize); pages.setPageIndex(pageIndex); pages.setTotalCount(dao.count()); pages.setDatas(dao.findPage(pageSize,pageIndex)); return pages; }
dao实现类中的方法(获取client对象集合、总数据行数)
返回client结果集
public List<Customer> queryByPage(int pageIndex, int pageSize) { String sql = "select * from ( " + " select rownum rn, t1.* from ( " + " select * from tb_customer " + " ) t1 where rownum <= ? " + " ) t2 " + " where t2.rn >= ?"; /* * -- 开始序号 = (pageIndex -1) *pageSize + 1 -- 结束序号 = pageIndex * pageSize */ ResultSet rs = JdbcUtils.executeQuery(sql, pageIndex * pageSize, (pageIndex - 1) * pageSize + 1); List<Customer> customers = new ArrayList<>(); // 3.解析 try { while (rs.next()) { Customer c = new Customer(); c.setCid(rs.getInt("cid")); c.setCname(rs.getString("cname")); c.setBirthday(rs.getString("birthday")); c.setCellphone(rs.getString("cellphone")); c.setEmail(rs.getString("email")); c.setDescription(rs.getString("description")); c.setGender(rs.getString("gender")); // 添加到List集合 customers.add(c); } } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtils.close(rs); } return customers; }
返回总行数
public int count() { String sql = "select count(1) from tb_customer"; ResultSet rs = JdbcUtils.executeQuery(sql); try { rs.next(); return rs.getInt(1); } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtils.close(rs); } return 0; }
3、servlet层获取数据
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //编码的处理 request.setCharacterEncoding("UTF-8"); //设置响应编码 response.setContentType("text/html;charset=UTF-8"); //获取请求参数 //初始化页容量为5 int pageSize = 3; //获取当前页码 String pageIndexStr = request.getParameter("pageIndex"); //如果没有页码,默认为1 int pageIndex = 1; if(pageIndexStr != null ){ //如果有强转为int类型 pageIndex = Integer.parseInt(pageIndexStr); } //调用service中的方法 ClientService cs = new ClientServiceImpl(); Pages pages =cs.pageFindAll(pageSize, pageIndex); request.setAttribute("pages",pages); //转发 request.getRequestDispatcher("/list_page.jsp").forward(request, response); }
4、jsp页面显示数据(实现显示10条数据)
<td colspan="8" align="center"> <c:choose> <%--如果数据超过10页 --%> <c:when test="${ pages.totalPages > 10}"> <%-- 前一页(当前页不为第一页显示,当前页-1!=0) --%> <c:if test="${ pages.pageIndex-1 !=0 }"> <a href=" <c:url value="/PageServlet?pageIndex=${pages.pageIndex-1}"></c:url> ">前一页</a> </c:if> <%--开始页码,到了第7页,第一页为2(7-5) --%> <c:set var = "start" value = "${pages.pageIndex -5}"></c:set> <%--结束页码,到了第7页,最后一页为11(7+4) --%> <c:set var = "end" value = "${pages.pageIndex +4}"></c:set> <%-- 头溢出,相减小于1,初始化1~10 --%> <c:if test="${start < 1}"> <c:set var = "start" value = "1"></c:set> <c:set var = "end" value = "10"></c:set> </c:if> <%-- 尾溢出 ,总页数-9,(最后一位-9~最后一位)--%> <c:if test="${end > pages.totalPages}"> <c:set var = "start" value = "${pages.totalPages -9 }"></c:set> <c:set var = "end" value = "${pages.totalPages }"></c:set> </c:if> <%-- 输出响应 ,start~end,已初始化--%> <c:forEach var = "i" begin = "${start}" end = "${end}"> <%-- 点击到了当前页面超链接失效 --%> <c:choose> <c:when test="${pages.pageIndex == i}"> 第${i }页 </c:when> <c:otherwise> <a href=" <c:url value="/PageServlet?pageIndex=${i }"></c:url> ">第${i }页</a> </c:otherwise> </c:choose> </c:forEach> <%-- 后一页(当前页不为最后一页显示,当前页=最后一页-1) --%> <c:if test="${ pages.pageIndex != pages.totalPages }"> <a href=" <c:url value="/PageServlet?pageIndex=${pages.pageIndex+1}"></c:url> ">后一页</a> </c:if> </c:when> <%-- 小于10页的数据 --%> <c:otherwise> <c:forEach var = "i" begin = "1" end = "${pages.totalPages}"> <c:choose> <c:when test="${pages.pageIndex == i}"> 第${i }页 </c:when> <c:otherwise> <a href=" <c:url value="/PageServlet?pageIndex=${i }"></c:url> ">第${i }页</a> </c:otherwise> </c:choose> </c:forEach> </c:otherwise> </c:choose> </td>