[1]为什么使用分页?
A、查询数据量的增多,一页的内容放不下的,所以使用分页
B、分页查询的是部分数据,这样查询的速度就比较快
[2]分页必须知道的参数
A、分页的SQL语句 select * from student limit startIndex,size
B、获得当前的页数 index ;
每一页显示的条数 size;
下一页 index++ 上一页 index--
尾页: index =最大页数?
最大页数如何计算?
假设:count=15; size =5
if(count%size==0){
maxpage =count/size
}else{
maxpage =count/size+1
}
举例:学生信息分页实现
@WebServlet("/StudentServlet2")
public class StudentServlet2 extends HttpServlet {
StudentService studentService = new StudentServiceImpl();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//req.setCharacterEncoding("utf-8");
//获取前台数据
//获得查询的条件
String name = req.getParameter("name");
String score = req.getParameter("score");
if(name!=null){
byte[] bytes = name.getBytes("iso8859-1");
name = new String(bytes, 0, bytes.length, "utf-8");
}
//接收当前的页数
String index = req.getParameter("index");
System.out.println(index);
int i=1;
if(index!=null && !"".equals(index)){
i = Integer.parseInt(index);
System.out.println("index:"+i);
//pg.setIndex(i);
}
PageBean pg = new PageBean();
pg.setIndex(i);
//获得当前的size
String size1 = req.getParameter("size");
int si=5;
if(size1!=null &&!"".equals(size1)){
si=Integer.parseInt(size1);
//pg.setSize(si);
}
pg.setSize(si);
//获得总条数
int count = studentService.getCount(name,score);
pg.setTotalCount(count);
//int start=pg.getStartRow();
//System.out.println("start:"+start);
//数据处理
//int size = pg.getSize();
//获得开始下标
int start = pg.getStartRow();
//获得每页显示的条数
int size = pg.getSize();
List<Student> list = studentService.findMore(start,size,name,score);
//做出响应
req.setAttribute("list",list);
req.setAttribute("pb",pg);
req.setAttribute("name",name);
req.setAttribute("score",score);
req.getRequestDispatcher("/show.jsp").forward(req,resp);
}
前端实现
<center>
<form action="StudentServlet2" method="get">
用户名:<input type="text" id="name" name="name" value="${name}"/>
分数><input type="text" id="score" name="score" value="${score}"/>
<input type="submit" value="查询">
<hr/>
</form>
</center>
<table border="1px" align="center">
<tr>
<td>用户ID</td>
<td>用户名</td>
<td>用户分数</td>
<td>用户年龄</td>
<td>用户图片</td>
<td>操作</td>
</tr>
<c:forEach items="${list}" var="stu">
<tr>
<td>${stu.sid}</td>
<td>${stu.sname}</td>
<td>${stu.score}</td>
<td>${stu.age}</td>
<td><img src="/student/upload/${stu.filename}" width="80px"></td>
<td><a href="/student/DownLoadServlet?filename=${stu.filename}&filetype=${stu.filetype}">下载</a></td>
</tr>
</c:forEach>
<tr>
<th colspan="10">
<a href="StudentServlet?sign=first">首页</a>
<a href="StudentServlet?sign=up">上一页</a>
<a href="StudentServlet?sign=next">下一页</a>
<a href="StudentServlet?sign=last">尾页</a>
</th>
</tr>
<tr>
<th colspan="10">
<a href="javascript:change2(1,${pb.size})">首页</a>
<c:if test="${pb.index>1}">
<a href="javascript:change2(${pb.index-1},${pb.size})">上一页</a>
</c:if>
<c:forEach items="${pb.numbers}" var="num" >
<c:if test="${pb.index==num}">
[<a href="javascript:change2(${num},${pb.size})">${num}</a>]
</c:if>
<c:if test="${pb.index!=num}">
<a href="javascript:change2(${num},${pb.size})">${num}</a>
</c:if>
</c:forEach>
<c:if test="${pb.index<pb.totalPageCount}">
<a href="javascript:change2(${pb.index+1},${pb.size})">下一页</a>
</c:if>
<a href="javascript:change2(${pb.totalPageCount},${pb.size})">尾页</a>
每页显示
<select onchange="change2(1,this.value)">
<c:forEach begin="5" end="15" step="5" var="num">
<option value="${num}" <c:if test="${pb.size==num}">selected</c:if> >${num}</option>
</c:forEach>
</select>
条记录
总共${pb.totalCount}条记录
</th>
</tr>
</table>
<script type="text/javascript">
/*function change(size) {
alert(size);
window.location.href="StudentServlet2?size="+size;
}*/
function change2(index,size) {
var name = document.getElementById("name").value;
var score = document.getElementById("score").value;
window.location.href="StudentServlet2?index="+index+"&size="+size+"&name="+name+"&score="+score;
}
</script>