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;

====================================================

sql拼接字符串

int pageStartRecord = 0;
int pageSize =3;
String sql ="SELECT * FROM runoob_tb limit "+pageStartRecord+" ,"+pageSize+" ";
主要代码如下:

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 pageSize=3;
		//定义页面当前页码
		int page =0;
		//实例化分页对象
		Paging paging =new Paging();
		paging.setTotalRecord(TotalRecord);//数据总数
		paging.setPagesize(pageSize);//设置一个页面的数据多少条
		paging.setTotalPageNum();//总的页面数
		paging.setEndpage();//最后一页
		paging.setIndexpage(1);//第一页
		
		//得到浏览器传过来的当前页
		String str_page=request.getParameter("page");
		//判断下一页页码
		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;
				}
			}
			//因为page默认值为0,所以如果pag<0,则取page的默认值,外部已经定义,这里不用再写
		}
		System.out.println("page="+page);
		
		//将下一页页码设置为当前页码
		paging.setPageNow(page);
		//定义当前页码对应的起始记录
		int pageStartRecord = page*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>

运行效果

=========================================================================================

项目下载地址:

链接:https://pan.baidu.com/s/1PgK92TSesWxPuU6VeCyfAQ 
提取码:lq83 
复制这段内容后打开百度网盘手机App,操作更方便哦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThinkPet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值