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

110 篇文章 6 订阅
36 篇文章 1 订阅

在浏览商品的时候我们常常看到上一页,下一页。
这里写图片描述
那么分页是怎么实现的呢?
其实我们首先看这句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}">&lt;&lt;上一页</a></li>

下一页:

    <li class="nextPage"><a href="${pageContext.request.contextPath}/servlet/pageServlet?curpage=${pageBean.currentpage==pageBean.totalpage?pageBean.totalpage:pageBean.currentpage+1}" >&lt;&lt;下一页</a></li>

通过这些设置即可实现分页。
运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值