当页面中要显示的内容过多需要分多页显示、或是数据量过大内存吃不消时,需要分页处理。
原理:每次从数据库中取出一定量的数据,通过jsp页面显示
实现:
①写一个类封装分页的页面
②从数据库中取出一个页面的数据,将信息封装到分页页面对象中
③根据情况,将分页的页面对象设置到request对象、session对象或servletContext对象属性中,供jsp页面调用
④在jsp页面中显示分页数据、分页页码、上一页下一页、跳转页面等
下面看具体代码:
分页页面Page类:
1 package cn.wzbrilliant.domain;
2
3 import java.util.List;
4
5 //界面上所有与分页有关的都找此类要
6 public class Page {
7 private List records;
8 private int pagesize = 10;//每页显示的记录条数
9 private int pagenum;//用户要看的页码即当前页码
10 private int totalpage;//总页数
11 private int startIndex;//每页开始记录的索引
12 private int totalrecords;//总记录条数
13
14 //显示的页码
15 private int startPage;
16 private int endPage;
17
18 public Page(int pagenum,int totalrecords){
19 this.pagenum = pagenum;
20 this.totalrecords = totalrecords;
21
22 //计算每页开始记录的索引
23 startIndex = (pagenum-1)*pagesize;
24 //计算总页数
25 totalpage = totalrecords%pagesize==0?totalrecords/pagesize:(totalrecords/pagesize+1);
26
27 //显示的页码
28 if(totalpage<=9){
29 startPage = 1;
30 endPage = totalpage;
31 }else{
32 startPage = pagenum-4;
33 endPage = pagenum+4;
34 if(startPage<1){
35 startPage = 1;
36 endPage = 9;
37 }
38 if(endPage>totalpage){
39 endPage = totalpage;
40 startPage = totalpage-8;
41 }
42 }
43 }
44
45 public List getRecords() {
46 return records;
47 }
48
49 public void setRecords(List records) {
50 this.records = records;
51 }
52
53 public int getPagesize() {
54 return pagesize;
55 }
56
57 public void setPagesize(int pagesize) {
58 this.pagesize = pagesize;
59 }
60 public int getPagenum() {
61 return pagenum;
62 }
63
64 public void setPagenum(int pagenum) {
65 this.pagenum = pagenum;
66 }
67
68 public int getTotalpage() {
69 return totalpage;
70 }
71
72 public void setTotalpage(int totalpage) {
73 this.totalpage = totalpage;
74 }
75
76 public int getStartIndex() {
77 return startIndex;
78 }
79 public void setStartIndex(int startIndex) {
80 this.startIndex = startIndex;
81 }
82
83 public int getTotalrecords() {
84 return totalrecords;
85 }
86
87 public void setTotalrecords(int totalrecords) {
88 this.totalrecords = totalrecords;
89 }
90
91 public int getStartPage() {
92 return startPage;
93 }
94
95 public void setStartPage(int startPage) {
96 this.startPage = startPage;
97 }
98
99 public int getEndPage() {
100 return endPage;
101 }
102
103 public void setEndPage(int endPage) {
104 this.endPage = endPage;
105 }
106
107 }
从数据库中取出一定条数的记录,此处以mysql为例,sql语句为select * from 表名 limit ?,? 两个问号分别为起始位置和结束位置
在jsp页面中显示分页页码、上一页下一页、跳转页面等的实现代码:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <!-- 分页的部分 -->
3 第${page.pagenum}页/共${page.totalpage}页
4 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet">首页</a>
5 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${page.pagenum-1==0?1:page.pagenum-1}">上一页</a>
6 <c:forEach begin="${page.startPage}" end="${page.endPage}" var="num">
7 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${num}">${num }</a>
8 </c:forEach>
9
10 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${page.pagenum+1>page.totalpage?page.totalpage:page.pagenum+1}">下一页</a>
11 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${page.totalpage}">尾页</a>
12 <select id="s1">
13 <c:forEach begin="1" end="${page.totalpage}" var="num">
14 <option value="${num}" ${page.pagenum==num?'selected="selected"':''}>${num}</option>
15 </c:forEach>
16 </select>
17 <a href="javascript:jump()">跳转</a>
18
19 <script type="text/javascript">
20 function jump(){
21 var num = document.getElementById("s1").value;
22 window.location.href="${pageContext.request.contextPath}/servlet/ShowAllCustomersServlet?pagenum="+num;
23 }
24 </script>