JavaWeb(分页)

为什么要分页?

1. 加快页面加载速度     2. 利于页面排版     3. 利于用户操作

分页的方式

前台分布:一次性加载所有的数据,再在前台把数据分成多页显示,加载速度还是比较慢

后台分页:从数据库开始进行分页查询,发送给前台

分页的思路

1.查询出所有的行数

2. 计算出总页数(页数/行数)

3. 通过总页数绘制了同超链接

4. 点击链接,发送页数参数,在后台进行分页查询,将结果发送给页面

5. 页面进行数据显示

6. 页面中所需要的数据:对象的集合,页面的总数,当前页面的数量

具体实现

注:这里主要讲思路,及部分代码的实现

分页的实体类包装,并获得get,set方法

/**
* 分页实体类,包装分页需要的数据
* <T>是声明范型类型,目的是可以用于包装任何类型的集合 
*/
public class Page<T> {
    //每页的行数
    public static final int PAGE_SIZE = 10;
    //数据集合
    private List<T> data;
    //页面总数
    private int pageCount;
    //当前的页数
    private int pageNo;
    ……

}

dao实现层所实现方法:(这里使用的是c3p0连接池与数据库的连接)

1. 计算出所有行数(select count(*) from 表)

@Override
public int selectCount() {
    return JDBCUtils.queryCount("select count(*) from tb_book");
}

2. 使用limit分页查询(select * from tb_book limit 起始位置,最后位置)

@Override
public List<Book> selectBookLimit(int start, int lenth) {
    // TODO Auto-generated method stub
    return JDBCUtils.queryAll(Book.class, "select * from tb_book limit ?,?", start ,lenth);
}

service实现层实现方法

@Override
public Page<Book> selectBookLimit(int pageNo) {
    //查询行数
    int total=bookDao.selectCount();
    //计算分页的数量
    int pageNum= total%Page.PAGE_SIZE==0 ?total/Page.PAGE_SIZE:total/Page.PAGE_SIZE+1;
    //通过当前页数计算出数据的集合
    List<Book> book = bookDao.selectBookLimit((pageNo-1)*Page.PAGE_SIZE, (pageNo-1)*Page.PAGE_SIZE+Page.PAGE_SIZE);
    Page<Book> page=new Page<Book>();
    page.setData(book);
    page.setPageCount(total);
    page.setPageNo(pageNum);
    return  page;
}

servlet层方法

public void bookPageSelect(HttpServletRequest req,HttpServletResponse resp) throws IOException, ServletException{
    String pageNo=req.getParameter("pageNo");
    int no=1;
    //这里判断的从页面上传来的页数,默认为1
    if(pageNo!=null){
        no=Integer.parseInt(pageNo);
    }
    Page<Book> page = bookService.selectBookLimit(no);
    //向页面传page对象
    req.getSession().setAttribute("page",  page);
    req.getRequestDispatcher("book.jsp").forward(req, resp);
}

book.jsp页面设计

<table border="1">
		<tr>
			<td>序号</td>
			<td>书名</td>
			<td>价格</td>
			<td>作者</td>
			<td>日期</td>
			<td>封面</td>
			<td>删除</td>
			<td>修改</td>
		</tr>
		<c:forEach var="book" items="${page.getData()}">
		<tr>
			<td>${book.book_id}</td>
			<td>${book.book_name}</td>
			<td>${book.book_price}</td>
			<td>${book.book_author}</td>
			<td>${book.book_publish_date}</td>
			<td><img src="http://localhost:8080/image/${book.book_image}" width="100" height="80"/></td>
			<td><a href="book.do?m=bookDel&book_id=${book.book_id}">删除</a></td>
			<td><a href="book.do?m=bookOne&book_id=${book.book_id}">修改</a></td>
		</tr>
		</c:forEach>
	</table>
	<div>
		<c:if test="${page.pageNo>1}">
			<a href="book.do?m=bookPageSelect&pageNo=${page.pageNo-1}">上一页</a>
		</c:if>
		<!-- 循环绘制分页的超链接 -->
		<c:forEach var="i" begin="1" end="${page.pageCount}" step="1">
			<a href="book.do?m=bookPageSelect&pageNo=${i}">${i}</a>
		</c:forEach>
		<c:if test="${page.pageNo<page.pageCount}">
			<a href="book.do?m=bookPageSelect&pageNo=${page.pageNo+1}">下一页</a>
		</c:if>
	</div>
发布了59 篇原创文章 · 获赞 3 · 访问量 4754

猜你喜欢

转载自blog.csdn.net/CDZAllier/article/details/103041803
今日推荐