Java使用实现分页的

分页技术是在web开发中十分重要,也是十分基础的技术。

直接上代码,代码上的注释可以说明问题。

主要关注这几个变量,当前页数, 总页数,每页的记录数,


上Servlet代码

package org.oa.servlet;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.oa.dao.ScoreDao;
import org.oa.daoimpl.ScoreDaoImpl;
import org.oa.domain.Score;

@WebServlet("/multiPageServlet")
public class MultiPageServlet extends HttpServlet
{
	private static final long serialVersionUID = 1L;
	
	private static Log log = LogFactory.getLog(MultiPageServlet.class);


	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{	
		
		
		ScoreDao scoreDao = new ScoreDaoImpl();
		
		/*
		 * 从Dao查询得到的结果集
		 */
		ResultSet rs = null ;
		
		/*
		 * 总页数
		 */
		int totalPageNum ;
		
		try
		{
			rs = scoreDao.queryAllScores();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		/*
		 * 得到当前所在页码,如果没有传递参数,则设置为第1页
		 */
		String currentPageNumberInString = request.getParameter("currentPageNum");
		
		int currentPageNumber = 1 ;
		
		if(null != currentPageNumberInString)
		{
			currentPageNumber = Integer.parseInt(currentPageNumberInString);
		}
		
		/*
		 * 总记录数
		 */
		int totalRecordNum = 0;
		
		/*
		 * 将ResultSet的结果集移动到最后最后一行,再通过ResultSet的getRow()方法得到当前行数,即总记录数
		 */
		try
		{
			rs.last();
			
			 totalRecordNum = rs.getRow();
			 
//			 log.info("totalRecordNum is :" + totalRecordNum);
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		
		//得到总页数,每页三行记录
		totalPageNum = (totalRecordNum%3 == 0 )? totalRecordNum /3 : totalRecordNum / 3 + 1 ;
		
		
		/**
		 * 如果当前的页数大于总页数,将当前页数设置为第一页
		 */
		if(currentPageNumber > totalPageNum)
		{
			currentPageNumber =1 ;
		}
		
		
		/*
		 * 如果当前页数小于等于0设置将当前的页数设置成最大的页数
		 */
		if(currentPageNumber <= 0)
		{
			currentPageNumber = totalPageNum ;
		}
		
		/*
		 * 将ResultSet定向到开始的行数
		 */
		int start = (currentPageNumber - 1 ) * 3 + 1 ;
		
		try
		{
			rs.absolute(start);
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}

		/*
		 * 结果放入List中
		 */
		List<Score> list = new ArrayList<Score>();
		
		int count = 0 ;
		
		try
		{
			do
			{
				/*
				 * 读的记录数不超过3条,即每页3条,
				 * 当rs.next()为false的时候,也就是count超不过3条,此时应该是在最后一页。
				 */
				if(count >= 3)
				{
					break ;
				}
				
				list.add(new Score(rs.getInt(1),rs.getInt(2)));

				count++;
			}
			while(rs.next());
			
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		
		
		
		request.getSession().setAttribute("list",list);
		
		request.getSession().setAttribute("currentPageNum",currentPageNumber);
		
		request.getRequestDispatcher("slicePage.jsp").forward(request,response);
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		this.doGet(request, response);
	}

}
紧接着是jsp的代码,来展示数据

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.List"%>

<%@ page import="org.oa.domain.Score"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		int currentPageNum = ((Integer) session.getAttribute("currentPageNum")).intValue();

		List<Score> list = (List<Score>) session.getAttribute("list");

		for (Score temp : list)
		{
	%>
	<br>
	<%=temp.getScore()%>
	<br />
	<%
		}
	%>

	<%-- 
	<a href= "multiPageServlet?currentPageNumber=<%=currentPageNum-1%>" >上一页</a>
	
	
	
	<a href="mutiPageServlet?currentPageNumber=">下一页</a>
	--%>
	<a href="multiPageServlet?currentPageNum=<%=currentPageNum + 1%>">下一页</a>

<a href="multiPageServlet?currentPageNum=<%=currentPageNum - 1%>">上一页</a>

<a href="multiPageServlet?currentPageNum=1">返回首页</a>

<!--  

<select id="mySelect" name="mySelect" οnchange="f();">
	<option selected="selected" value="2">2</option>
	<option value="4" value="4">4</option>
	<option value="6" value="6">6</option>

</select>

<script type="text/javascript">

	
	function f()
	{
		var obj  = document.getElementById("mySelect");
		
		value = obj.value;
		
		
	}
	
	
	
	
</script>
 -->
</body>
</html>



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值