分页技术是在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>