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}&nbsp;&nbsp;&nbsp;&nbsp;
		${list.runoob_title}&nbsp;&nbsp;&nbsp;&nbsp;
		${list.runoob_author}&nbsp;&nbsp;&nbsp;&nbsp;
		${list.submission_date}<br>
	</c:forEach>
	
 	<p class="paging"> 
         <a href="TestServlet?page=${paging.indexpage-1}">&lt;&lt; 首页 </a>&nbsp;&nbsp; 
         <a href="TestServlet?page=${paging.pageNow-1}">    &lt; 上一页 </a>&nbsp;&nbsp; 
         <strong>第${paging.pageNow+1}页/共${paging.totalPageNum}页</strong>&nbsp;&nbsp; 
         <a href="TestServlet?page=${paging.pageNow+1}">下一页 &gt;</a>&nbsp;&nbsp; 
         <a href="TestServlet?page=${paging.totalPageNum-1}">末页 &gt;&gt;</a> 
     </p> 
</body>
</html>

运行效果