首先,在进行分页处理之前要给分页写一个bean,存储来自页面请求的数据,然后进行处理,返回到页面。一般代码如下:
import java.util.List;
public class PageBean {
private int totalData; //总记录数
private int pagesize; //一页记录数
private int totalPage; //总页数
private int currentPage; //当前页数
private int showPage; //显示多少页,默认显示10页,仿谷歌分页
private int beginPage; //起始页数
private int endPage; //结束页数
private boolean hasPreviousPage; //是否有前一页
private boolean hasNextPage; //是否有后一页
private List list;
public PageBean() {
pagesize = 5;
currentPage = 1;
showPage = 10;
}
public int getTotalData() {
return totalData;
}
public void setTotalData(int totalData) {
this.totalData = totalData;
}
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public int getTotalPage() {
return totalData % pagesize == 0 ? totalData / pagesize : totalData / pagesize + 1;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getShowPage() {
return showPage;
}
public void setShowPage(int showPage) {
this.showPage = showPage;
}
/**
* 初始化页面中起始和结束页码,注意在setTotalPage()之后调用此方法
*/
public void initbeginPageAndEndPage() {
totalPage=getTotalPage();
//总页数小于6
if (this.totalPage < (this.showPage / 2) + 1) {
this.beginPage = 1;
this.endPage = totalPage;
} else {
//总页数大于6,但是当前页数小于6
if (this.currentPage <= (showPage / 2) + 1) {
this.beginPage = 1;
if (this.totalPage >= this.showPage) {
this.endPage = this.showPage;
} else {
this.endPage = this.totalPage;
}
} else {
//总页数大于6,且当前页数大于6
this.beginPage = currentPage - 5;
this.endPage = currentPage + 4;
if (this.endPage >= this.totalPage) {
this.endPage = this.totalPage;
}
}
}
}
public int getBeginPage() {
return beginPage;
}
public void setBeginPage(int beginPage) {
this.beginPage = beginPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public boolean isHasPreviousPage() {
return currentPage!=1;
}
public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
}
public boolean isHasNextPage() {
return currentPage!=totalPage;
}
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
}
然后,通过servlet对从数据库中得到的数据进行处理;
package test.servlet;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.lucene.queryParser.ParseException;
import test.bean.PageBean;
import test.bean.ReportBean;
import test.search.IndexSearch;
public class doServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String searchWord = request.getParameter("searchWord");
/*
* 处理字符编码问题
*/
searchWord = new String(searchWord.getBytes("iso-8859-1"), "UTF-8");
searchWord = java.net.URLDecoder.decode(searchWord, "UTF-8");
String field = request.getParameter("field");
field = java.net.URLDecoder.decode(field, "UTF-8");
String pageURLparam = setPageURL(searchWord, field);
request.setAttribute("searchWord", searchWord);
request.setAttribute("field", field);
request.setAttribute("pageURLparam", pageURLparam);
String str = URLDecoder.decode(request.getParameter("currentPage"),
"UTF-8");
int currentPage = Integer.parseInt(str);
int size = 5;
String indexDir = "E://indexDir";
IndexSearch is = new IndexSearch();
List<ReportBean> totalList = new ArrayList<ReportBean>();
List<ReportBean> resultList = new ArrayList<ReportBean>();
int totalData = 0;
double startTime = System.currentTimeMillis();
try {
totalList = is.Search(indexDir, searchWord, field, 20000);
totalData = totalList.size();
} catch (ParseException e) {
e.printStackTrace();
}
PageBean pageBean = new PageBean();
pageBean.setCurrentPage(currentPage);
pageBean.setTotalData(totalData);
pageBean.initbeginPageAndEndPage();
pageBean.setList(resultList);
request.setAttribute("pageBean", pageBean);
double endTime = System.currentTimeMillis();
double searchtime = (endTime - startTime) / 1000;
request.setAttribute("searchtime", searchtime);
request.setAttribute("totalData", totalData);
for (int i = (currentPage - 1) * size; i < currentPage * size; i++) {
resultList.add(totalList.get(i));
}
request.setAttribute("resultList", resultList);
request.getRequestDispatcher("/WEB-INF/resultjsp/searchResult.jsp")
.forward(request, response);
}
private String setPageURL(String searchWord, String field) {
String pageURL = "doServlet?searchWord=" + searchWord + "&field="
+ field;
return pageURL;
}
}
最后,单独写一个分页的页面,在运用的时候,直接在别的页面通过import标签直接拿来就用:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="${pageContext.request.contextPath}/style/reset.css" type="text/css" rel="stylesheet"/>
<link href="${pageContext.request.contextPath}/style/quoteAnalysis.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript">
function goPage(){
var somePage=$("#somePage").val();
if(somePage==""){
alert("页数不能为空");
}else if(isNaN(somePage)){
alert("页数必须为数字");
}else if(parseInt(somePage)<0 || parseInt(somePage)>${pageBean.totalPage}){
alert("页数必须为在0到${pageBean.totalPage}之间");
}else{
window.location.href="${pageURLparam}¤tPage="+somePage;
}
}
</script>
</head>
<body>
<div class="pagination">
<c:if test="${pageBean.hasPreviousPage}">
<a href="${pageURLparam}¤tPage=${pageBean.currentPage-1}">上一页</a>
</c:if>
<c:forEach begin="${pageBean.beginPage}" end="${pageBean.endPage}" step="1" varStatus="v">
<a href="${pageURLparam}¤tPage=${v.index}">
<c:if test="${pageBean.currentPage==v.index}"> <b style="font-color:black"> </c:if>
[${v.index}]
<c:if test="${pageBean.currentPage==v.index}"> </b> </c:if>
</a>
</c:forEach>
<c:if test="${pageBean.hasNextPage}">
<a href="${pageURLparam}&${pageBean.currentPage+1}">下一页</a>
</c:if>
<input class="txt" type="text" id="somePage"/><input class="btn" type="button" value="Go" οnclick="goPage()"/> 共${pageBean.totalPage}页
</div>
</body>
</html>
大体的页面分页都是按照这样的方法和思路去处理。