在浏览商品的时候我们常常看到上一页,下一页。

分页功能的实现(servlet+javabean)_select


那么分页是怎么实现的呢?

其实我们首先看这句sql语句。

select * from book limit 0,4

这句sql语句的意思就是:从book表中取数据的前四条数据。
所以就可以使用

select * from

语句来实现分页。

分页功能的实现(servlet+javabean)_select_02


所以要想实现分页。必须要知道的有

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

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>

通过这些设置即可实现分页。

运行结果:

分页功能的实现(servlet+javabean)_javabean_03