servlet+jsp实现分页

1.PageBean

/**
 * 这是一个用于封装了分页的数据
 * 包含:
 *         该页的学生集合数据
 *         总的记录数
 *         总的页数
 *         当前页
 *         每页显示的记录数
 * @author acer
 *
 */
public class PageBean<T> {
    private int currentPage;//当前页
    private int totalPage;//总页数
    private int pageSize;//每页的记录数
    private int totalSize;//总的记录数
    private List<T> list;//当前页的学生集合
    
    public int getCurrentPage() {
        return currentPage;
    }

注意给出setter getter方法

2.Dao接口

List<Student> findStudentByPage(int currentPage) throws SQLException;

/**
     * 查询总的学生记录数
 */
int findCount() throws SQLException;

3.Dao实现

@Override
    public List<Student> findStudentByPage(int currentPage) throws SQLException {
        String sql = "select * from stus limit ? offset ?";

        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSouece());
        return runner.query(sql, new BeanListHandler<Student>(Student.class),PAGE_SIZE,(currentPage-1)*PAGE_SIZE);
    }

    @Override
    public int findCount() throws SQLException {
        String sql = "select count(*) from stus";
        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSouece());

        Long result =  (Long)runner.query(sql, new ScalarHandler());
        return result.intValue();
    }

4.service接口

/**
     * 查询当页数据
     * @param currentPage
     * @return
     * @throws SQLException
     */
    PageBean findStudentByPage(int currentPage) throws SQLException;

5.service实现

public PageBean findStudentByPage(int currentPage) throws SQLException {
        // 封装分页的该页数据
        PageBean<Student> pageBean = new PageBean<Student>();
        
        int pageSize = StudentDao.PAGE_SIZE;
        pageBean.setCurrentPage(currentPage);//设置当前页
        pageBean.setPageSize(pageSize);//设置每页显示多少记录
        
        StudentDao dao = new StudentDaoImpl();
        List<Student> list = new StudentDaoImpl().findStudentByPage(currentPage);
        pageBean.setList(list);//设置这一页的学生数据
        
        //总的记录数,总的页数
        int count = dao.findCount();
        pageBean.setTotalSize(count);//设置总的记录数
        pageBean.setTotalPage(count % pageSize==0 ? count / pageSize : (count / pageSize) + 1);//总页数
        return pageBean;
    }

6.servlet控制层

/**
 * 分页显示学生列表的servlet
 */
public class StuListPageServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        try {
            
            //1.获取需要显示的页码数
            int currentPage = Integer.parseInt(request.getParameter("currentPage"));
            
            //2.根据指定的页面,去获取该页面的数据
            StudentService service = new StudentServiceImpl();
            PageBean pageBean = service.findStudentByPage(currentPage);
            request.setAttribute("pageBean", pageBean);
        
            //3.跳转页面
            request.getRequestDispatcher("list_page.jsp").forward(request, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

7.前台显示:

        <c:forEach items="${pageBean.list }" var="stu">
                <tr align="center">
                    <td>${stu.sid }</td>
                    <td>${stu.sname }</td>
                    <td>${stu.gender }</td>
                    <td>${stu.phone }</td>
                    <td>${stu.birthday }</td>
                    <td>${stu.hobby }</td>
                    <td>${stu.info }</td>
                    <td><a href="EditStuServlet?sid=${stu.sid }">更新</a> <a
                        href="#" onclick="doDelete(${stu.sid })">删除</a></td>
                </tr>
            </c:forEach>
            <tr>
                <td colspan="8">第${pageBean.currentPage } /
                    ${pageBean.totalPage } &nbsp;&nbsp; 每页显示${pageBean.pageSize }条
                    &nbsp;&nbsp;&nbsp; 总记录数${pageBean.totalSize }
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <c:if test="${pageBean.currentPage !=1 }">
                        <a href="StuListPageServlet?currentPage=1">首页</a> |
                        <a href="StuListPageServlet?currentPage=${pageBean.currentPage-1 }">上一页</a>

                    </c:if> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <c:forEach begin="1"
                        end="${pageBean.totalPage }" var="i">
                        <c:if test="${pageBean.currentPage == i }">
                            ${i }
                        </c:if>
                        <c:if test="${pageBean.currentPage != i }">
                            <a href="StuListPageServlet?currentPage=${i }">${i }</a>
                        </c:if>
                    </c:forEach> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <c:if
                        test="${pageBean.currentPage !=pageBean.totalPage }">
                        <a
                            href="StuListPageServlet?currentPage=${pageBean.currentPage+1 }">下一页</a> |
                        <a href="StuListPageServlet?currentPage=${pageBean.totalPage }">尾页</a>
                    </c:if>
                </td>
            </tr>

猜你喜欢

转载自blog.csdn.net/Sir_He/article/details/82597761