封装分页功能的准备工作
1、首先需要一个对数据库增、删、改、查的工具类DBUtils(已有)
2、一个页面的实体类Page
3、实现分页功能的一个类PageService
Page实体类
/**
* 这是一个通用分页功能
* @author Administrator
*
*/
public class Page {
/**当前页*/
private int pageNow;
/**每页记录数*/
private int pageSize;
/**首页*/
private int first = 1;
/**上一页*/
private int prev;
/**下一页*/
private int next;
/**最后一页*/
private int last;
/**总记录数*/
private int totalNum;
/**总页数*/
private int totalPage;
/**开始显示的位置*/
private int begin;
/**结束显示的位置*/
private int end;
/**当前数据*/
private List data;
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getFirst() {
return first;
}
public void setFirst(int first) {
this.first = first;
}
public int getPrev() {
return prev;
}
public void setPrev(int prev) {
this.prev = prev;
}
public int getNext() {
return next;
}
public void setNext(int next) {
this.next = next;
}
public int getLast() {
return last;
}
public void setLast(int last) {
this.last = last;
}
public int getTotalNum() {
return totalNum;
}
public void setTotalNum(int totalNum) {
this.totalNum = totalNum;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getBegin() {
return begin;
}
public void setBegin(int begin) {
this.begin = begin;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
@Override
public String toString() {
return "Page [pageNow=" + pageNow + ", pageSize=" + pageSize + ", first=" + first + ", prev=" + prev + ", next="
+ next + ", last=" + last + ", totalNum=" + totalNum + ", totalPage=" + totalPage + ", begin=" + begin
+ ", end=" + end + ", data=" + data + "]";
}
}
PageService的实现
public class PageService {
public static Page paging(String pageNowValue,int pageSize){
Page p = new Page();
int pageNow=Integer.parseInt(pageNowValue);
//拿到当前页数并设置page
p.setPageNow(pageNow);
//设置每页记录数
p.setPageSize(pageSize);
//设置上一页
p.setPrev(pageNow-1);
//设置下一页
p.setNext(pageNow+1);
int totalNum = getTotalNum();
//设置总记录数
p.setTotalNum(totalNum);
int totalPage=0;
if(totalNum % pageSize == 0){
//设置总页数
totalPage = totalNum / pageSize;
}else{
//设置总页数
totalPage = totalNum / pageSize + 1;
}
//设置最后一页
p.setLast( totalPage);
p.setTotalPage(totalPage);
//防止页数越界
if(pageNow < 1){
pageNow = 1;
p.setPrev(1);
}
if(pageNow > totalPage){
pageNow = totalPage;
p.setNext(totalPage);
}
//重新设置pageNow
p.setPageNow(pageNow);
if(pageNow < 3){
//开始的位置
p.setBegin(p.getFirst());
//结束的位置
p.setEnd(pageNow+2);
}else if(pageNow > 3 && pageNow < p.getLast()-3){
p.setBegin(pageNow-2);
p.setEnd(pageNow+2);
}else{
//开始的位置
p.setBegin(pageNow-2);
//结束的位置
p.setEnd(p.getLast());
}
//查询当前页的数据并设置
List data = findByPage( pageNow, pageSize);
p.setData(data);
//放回结果
return p;
}
/**获取总记录数*/
private static int getTotalNum() {
String sql = "select count(1) from files";
return DButils.getTotalNum(sql);
}
/**
* 查询的数据
* @param sql
* @param pageNow
* @param pageSize
* @return
*/
private static List findByPage(int pageNow,int pageSize){
String sql = "select * from files limit ?,?";
return DButils.selectList(Files.class, sql, (pageNow-1)*pageSize,pageSize);
}
}
调用PageService
@WebServlet("/files")
//自己写的一个BaseServlet继承HttpServlet,是对请求的转发或重定向的封装
public class FilesServlet extends BaseServlet{
public String queryAll(HttpServletRequest request,HttpServletResponse response){
//获取当前页面值
String s = request.getParameter("pageNow");
//调用分页功能服务
Page paging = PageService.paging( s, 5);
//把数据传向页面
request.setAttribute("page", paging);
//请求转发到list.jsp页面
return "list.jsp";
}
}