本示例思路是这样的:从servlet到数据库取分页信息,然后响应到jsp页面,当点击jsp页面的页码(1,2,3,4.......)时,再请求servlet(如何加包去百度,我不说)
这是servlet代码
<pre name="code" class="java">package com.leo.servlet;
import java.io.IOException;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.leo.dao.PlateDao;
import com.leo.dao.UserDao;
import com.leo.entity.Page_Plate;
import com.leo.entity.User;
/**
* Servlet implementation class PagerPlateServlet
*/
@WebServlet("/PagerPlateServlet")
public class PagerPlateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pager_offset = request.getParameter("pager.offset");//我用的是mysql的limit分页需要两个参数
String maxPageItems = request.getParameter("maxPageItems");
int start;//limit语句的起始参数
int dataNumber;//每页显示数据条数
if(pager_offset==null||maxPageItems==null){//当没有jsp页面时无法点击页码。所以要有个初始值
start=0;
dataNumber=3;
}else{
start = Integer.parseInt(pager_offset);
dataNumber = Integer.parseInt(maxPageItems);
}
PlateDao plateDao = new PlateDao();
Page_Plate page = plateDao.getPage(start,dataNumber);//这是查询的分页结果,,,,,,Page_Plate是自己定义的分页实体类,
request.setAttribute("page", page);
request.getRequestDispatcher("/views/main.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
jsp页面代码
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg" %><!-- 加包-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>
<table>
<tr>
<td>板块id</td>
<td>板块名称</td>
</tr>
<c:forEach var="plate" items="${page.plates }">
<tr>
<td>${plate.id}</td>
<td>${plate.plate_title}</td>
</tr>
</c:forEach>
</table>
// pg:pager的url属性是要提交的位置,这里就是我们上面所说的Servlet
<div align="center">//下面的分页代码,只需要你传2个值就是items属性值,(也就是所查表的总记录数,以便显示分出多少页)和url。其他的分页框架自己写好的
<pg:pager items="${page.total}" url="" maxPageItems="${3 }" maxIndexPages="${3}" export="currentPageNumber=pageNumber">
<pg:param name="maxPageItems" value="${3 }"></pg:param>//这个是为了传limit ?,?分页语句的第二个参数给servlet,
<!-- 首页 --> // 还有第一个参数是当你点击页码时会在url里自动传
<pg:first>
<!-- 生成链接 -->
<a href="${pageUrl }">首页</a> //就这么写不用管
</pg:first>
<pg:prev>
<a href="${pageUrl }">上一页</a>//就这么写不用管
</pg:prev>
<pg:pages>
<c:choose>
<c:when test="${currentPageNumber eq pageNumber }"> //(当点击的页码是当前页码时为红色数字,不显示为链接)就这么写不用管,
<a style="color:red;">${pageNumber }</a>
</c:when>
<c:otherwise>
<a href="${pageUrl }">${pageNumber }</a>//就这么写不用管
</c:otherwise>
</c:choose>
</pg:pages>
<pg:next>
<a href="${pageUrl }">下一页</a>//就这么写不用管
</pg:next>
<pg:last>
<a href="${pageUrl }">尾页</a> //就这么写不用管
</pg:last>
</pg:pager>
</div>
</body>
</html>
这两个属性:
maxPageItems="${3 }" maxIndexPages="${3}"
maxPageItems表示每页显示数据的条数,我写的是3;
maxIndexPages表示每次显示的页码个数,比如是 1 2 3 4 5 6 六个还是1 2 3 4 5 6 7 8 八个,我写的是3个
这两个属性如果不加也可以,默认值是10