在浏览商品的时候我们常常看到上一页,下一页。
那么分页是怎么实现的呢?
其实我们首先看这句sql语句。
select * from book limit 0,4
这句sql语句的意思就是:从book表中取数据的前四条数据。
所以就可以使用
select * from book limit x,y
语句来实现分页。
所以要想实现分页。必须要知道的有
int pagesize;//页面的最多商品个数
int currentpage;//当前页
int count;//数据库商品的总个数
int totalpage;//总页数=Math.ceil(count*1.0/pagesize)
在jsp页面中需要用到总页数,当前页,数据库商品的总个数,要显示的商品。
所以为了接收数据库查询结果需要用个pagebean类。
成员变量为:
private int currentpage;//当前页
private int count;//数据库商品的总个数
private int totalpage;//总页数
private List<Book> books;//当前页要显示的商品集合
具体实现过程如下:
servlet:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int currentpage=1;//默认的当前页
int pagesize=4;//每页显示的商品数
String curpage=request.getParameter("curpage");
//为当前页赋值
if(!"".equals(curpage)&&curpage!=null){
currentpage=Integer.parseInt(curpage);
}
BooksServer booksServer=new BooksServer();
//根据页面信息查找商品
PageBean pageBean=booksServer.findBooksByPage(currentpage,pagesize);
//将商品保存到request
request.setAttribute("pageBean", pageBean);
//转发页面到商品浏览页面
request.getRequestDispatcher("/product_list.jsp").forward(request, response);
}
boosServer:
public PageBean findBooksByPage(int currentpage, int pagesize) {
//返回数据库中的商品总数
int count=booksDao.getCounts();
//计算总页数
int totalpage=(int) Math.ceil(count*1.0/pagesize);
//查询到的当前页面要显示的商品
List<Book> books=booksDao.findBooksByPage(currentpage,pagesize);
PageBean pageBean=new PageBean();
pageBean.setCount(count);
pageBean.setBooks(books);
pageBean.setCurrentpage(currentpage);
pageBean.settotalpage(totalpage);
return pageBean;
}
booksDao
//数据库中所有的商品数
public int getCounts() {
QueryRunner qr=new QueryRunner(C3P0Util.getDataSource());
try {
long x=(Long) qr.query("select count(*) from book ", new ScalarHandler());
return (int)x;
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
//根据页面查询商品
public List<Book> findBooksByPage(int currentpage, int pagesize) {
QueryRunner qr=new QueryRunner(C3P0Util.getDataSource());
try {
return qr.query("select * from book limit ?,?", new BeanListHandler<Book>(Book.class),(currentpage-1)*pagesize,pagesize);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
在跳转到jsp页面后,通过${pageBean}
来获取相关数据即可。
而对于上一页,下一页。也是有约束的。上一页最小为1,下一页最大为totalpage.
上一页:
<li class="disablepage"><a href="${pageContext.request.contextPath}/servlet/pageServlet?curpage=${pageBean.currentpage==1?1:pageBean.currentpage-1}"><<上一页</a></li>
下一页:
<li class="nextPage"><a href="${pageContext.request.contextPath}/servlet/pageServlet?curpage=${pageBean.currentpage==pageBean.totalpage?pageBean.totalpage:pageBean.currentpage+1}" ><<下一页</a></li>
通过这些设置即可实现分页。
运行结果: