关于JSP页面的分页技术简单实现和原理

load00 2015-09-01

分页是对于大数据一个简单有效的显示优化,既可以快速的显示用户想要的结果,又能够大幅调高查询速度,进而提高体验和操作效果,下面先对基本原理进行简单的阐述,希望大家能够从个人的叙述中有所了解(因为习惯使用Mysql数据库进行各种验证和小功能的模拟实现,以下分页sql只在mysql中试用)。

(以下所有查询在本人自定义的数据库Text下的account表中实现)

一、定义的常量

      首先根据需求,既然分页就要用到以下几个属性:首先要定义四个变量:

int pageSize:每页显示多少条记录
      int pageNow:希望显示第几页
      int pageCount:一共有多少页
      int rowCount:一共有多少条记录
接下来,我们就要根据上述的几个属性实现简单的分页:首先看下得到以上的几个属性值得sql语句。
1、select count(*) from account;》》》rowCount   select * from account limit begin,end;
2、pageCount = rowCount/pageSize;(需要判断是否整除,如果没有整除则需要加1)
3、每页需要显示的行数根据个人需要自定义,因此pageSize应为一个常数。
4、希望显示的页数也同样是定值
二、代码的简单实现(在显示查询结果的页面底加上如下的简单代码,实现定页)
<div align="center">
每页显示
<table>
	<select name="end" multiple="multiple" size="1" id="end">
	<option value="5"  selected="selected">5</option>
	<option value="10">10</option>
	<option value="15">15</option>
</select>
数据&nbsp;
第
<%
 	int count = (Integer)(request.getAttribute("count")) ;
	int pages = (Integer)request.getAttribute("pages");
	
	for(int i=1;i<=pages;i++){
		int begin=(i-1)*5;
		int end = begin+5;
	 		out.print("&nbsp;<a href='./servlet/List1Servlet?begin="+begin+"'>"+i+"</a>&nbsp;");
	 	}
 %>

 页
</div>
 
 <div align="right">共<%=request.getAttribute("pages") %>页<%=request.getAttribute("count") %>条数据</div>
 显示界面的下方会出现如下图的分页提示页面

关于JSP页面的分页技术简单实现和原理

 例如,当第一次查询时我们可以先定义第一次插出的数据为前5条,则后台必有一个查询方法,接收前面传过来的begin参数(本人自定义end参数为5,意思是每页显示5条数据)
public List<Regesiters> count(int start, int end) {
		List<Regesiters> list = new ArrayList<Regesiters>();
		if (conn != null) {
			try {
				stmt = conn.createStatement();
				String sql = "select * from account limit "+start+","+end;
				System.out.println(sql);
				
				ResultSet rs = stmt.executeQuery(sql);
				while (rs.next()) {
					list.add(new Regesiters(rs.getInt(1),rs.getString(2), rs.getString(3), rs
							.getInt(4),rs.getInt(5)));
				}
				System.out.println("======分页查询成功======="+list);
				return list;
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				DbConUtils.close(null, stmt, conn);
			}
	}
		return list;
	}
 即第一次打开默认为第一页,两个参数分别为begin=0,end=5;当点开第二页时,传递参数给后台继续调用count(int start, int end)方法,此时begin=5,end=5;显示第6到10一共5条数据。以此类推。而后台实现如下所示:
//分页开始,count数据总数,pages分页数,每页5条数据
		int count = dao.count();
		int pages1 = count/5;
   	 	int l = (count+4)%5;
   	 	
   	 	if(l==0){
   	 		pages = pages1;
   	 	}else{
   	 		pages = pages1+1;
   	 	}
   	 req.setAttribute("count", count);
   	 req.setAttribute("pages", pages);
   	 
   	 //判断是否为初始查询界面
   	
   	 //如果为初始页面0-5用户
   	 if(begin==null){
   		 
			
				List<Regesiters> list = dao.count(0, 5);
				req.setAttribute("list", list);
				req.getRequestDispatcher("/list1.jsp").forward(req, resp);
   	 }else{
   		 int start = Integer.parseInt(req.getParameter("begin"));
   		 //int end = Integer.parseInt(req.getParameter("end"));
   		List<Regesiters> list = dao.count(start,5);
   		req.setAttribute("list", list);
   		req.getRequestDispatcher("/list1.jsp").forward(req, resp);
   	 }
 以上内容仅为简单实现分页功能,希望对毫无头绪的朋友有所帮助而已。

相关推荐

zhangchaoming / 0评论 2020-01-11
林大夏 / 0评论 2019-12-21