jsp真分页
jsp真分页
思路:根据页码确定每一页的记录数范围,然后按需查询数据库,每次只向jsp视图转发 指定页码的指定记录
-- =========MySQL分页法1=================================
-- 从第1条记录开始,返回3条记录(即1~3)
SELECT * FROM runoob_tb LIMIT 0,3;
-- 从第4条记录开始,返回3条记录(即4~6)
SELECT * FROM runoob_tb LIMIT 3,3;
-- 从第7条记录开始,返回3条记录(剩余的不够3条,就返回剩余记录)
SELECT * FROM runoob_tb LIMIT 6,3;
-- ========MySQL分页法2==================================
-- 跳过0条记录,返回3条记录(即1~3)
SELECT * FROM runoob_tb LIMIT 3 OFFSET 0;
-- 跳过3条记录,返回3条记录(即4~6)
SELECT * FROM runoob_tb LIMIT 3 OFFSET 3;
-- 跳过6条记录,返回3条记录(剩余的不够3条,就返回剩余记录)
SELECT * FROM runoob_tb LIMIT 3 OFFSET 6;
====================================================
主要代码如下:
2个po对象
package po;
import java.util.List;
public class Paging {
int totalRecord;//总记录数
int totalPageNum;//页面总数
int pagesize;//1页的记录数
int pageNow;//当前页页码
int indexpage=1;//首页页码
int endpage;//尾页页码
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getTotalPageNum() {
return totalPageNum;
}
public void setTotalPageNum() {
//三目运算符,(判断总记录数是否能整除,不能整除则取整后加1)
this.totalPageNum=(totalRecord%pagesize==0)?(totalRecord/pagesize):(totalRecord/pagesize+1);
}
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getIndexpage() {
return indexpage;
}
public void setIndexpage(int indexpage) {
this.indexpage = indexpage;
}
public int getEndpage() {
return endpage;
}
public void setEndpage() {
//最末页的页码为总页数
this.endpage = totalPageNum;
}
}
package po;
import java.sql.Date;
public class Runoob {
int runoob_id;
String runoob_title;
String runoob_author;
Date submission_date;
public int getRunoob_id() {
return runoob_id;
}
public void setRunoob_id(int runoob_id) {
this.runoob_id = runoob_id;
}
public String getRunoob_title() {
return runoob_title;
}
public void setRunoob_title(String runoob_title) {
this.runoob_title = runoob_title;
}
public String getRunoob_author() {
return runoob_author;
}
public void setRunoob_author(String runoob_author) {
this.runoob_author = runoob_author;
}
public Date getSubmission_date() {
return submission_date;
}
public void setSubmission_date(Date submission_date) {
this.submission_date = submission_date;
}
}
1 个servlet控制器
package servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import po.Paging;
import po.Runoob;
import service.TestService;
import service.TestServiceImpl;
/**
* Servlet implementation class TestServlet
*/
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
TestService service =new TestServiceImpl();
/**
* @see HttpServlet#HttpServlet()
*/
public TestServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查到总记录数
int TotalRecord=service.getTotalRecord();
//定义页面当前页码
int page =0;
//得到浏览器传过来的当前页
String str_page=request.getParameter("page");
//实例化分页对象
Paging paging =new Paging();
paging.setTotalRecord(TotalRecord);//数据总数
paging.setPagesize(3);//一个页面的数据多少条
paging.setTotalPageNum();//总的页面数
paging.setEndpage();//最后一页
paging.setIndexpage(1);//第一页
if(str_page !=null) {
//将页转换整型判断其大小
int pag=Integer.parseInt(str_page);
//当大于零,将传过来的pag值赋给当前页page
if(pag>0) {
page=pag;
//如果小于最大值时则,将其传过来的值减1在赋值给当前页,让其一直在最后一页
if(pag>(paging.getTotalPageNum()-1)) {
page=pag-1;
}
}
}
//设置当前页码
paging.setPageNow(page);
System.out.println("page="+page);
int pageStartRecord = page*3;
int pageSize=3;
//list_page存储每次该向jsp发送的数据记录(页码在变,记录也在变)
//SELECT * FROM runoob_tb LIMIT page*3,3;
List list_page =service.fenyeSelect(pageStartRecord, pageSize);
//将分页对象和数据 转发到jsp
request.setAttribute("paging", paging);
request.setAttribute("list", list_page);
request.getRequestDispatcher("fy.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
1个jsp视图
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>分页</title>
</head>
<body>
分页信息<br>
<c:forEach items="${list}" var="list">
${list.runoob_id}
${list.runoob_title}
${list.runoob_author}
${list.submission_date}<br>
</c:forEach>
<p class="paging">
<a href="TestServlet?page=${paging.indexpage-1}"><< 首页 </a>
<a href="TestServlet?page=${paging.pageNow-1}"> < 上一页 </a>
<strong>第${paging.pageNow+1}页/共${paging.totalPageNum}页</strong>
<a href="TestServlet?page=${paging.pageNow+1}">下一页 ></a>
<a href="TestServlet?page=${paging.totalPageNum-1}">末页 >></a>
</p>
</body>
</html>
运行效果