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>
运行效果