Javaweb实现分页功能

目录

一、分页的目的

二、分页功能具体实现

1.封装一个分页所需的数据的中间类Page

2.在持久化层(dao)实现获取所有用户数据和每页显示数据条数的方法

        定义一个接口

         实现接口中的方法

3.在service层实现分页方法

        定义一个接口

          实现接口中的方法

4.controller层中创建一个Servlet

5.前台网页获取数据

三、运行结果


1.分页就是让页面可以显示指定条数的数据,可以更容易查看数据。

2.使阅读结果变得更方便

3.减轻服务器查询的压力 

二、分页功能具体实现
1.封装一个分页所需的数据的中间类Page
public class Page implements Serializable{
    private int pageNum;//当前页码(前台提交)
    private int totalNum;//数据库查询
    private int pageSize = 10;//自定义
    private int totalPageNum;//=totalNum/pagesize
    private int startIndex;//(pageNum)*10+1
    private int startPage;//开始页码
    private int endPage;//结束页码
    private List<?> list = null;
    
    //计算多少页码
    public Page(int pageNum, int totalNum){
        this.pageNum = pageNum;
        this.totalNum = totalNum;
        if (totalNum%pageSize==0){
            totalPageNum = totalNum/pageSize;

        }else {
            totalPageNum = totalNum/pageSize+1;
        }
        startIndex = (pageNum-1)*pageSize;
        
        //算出控制页面切换按钮的数据
        if (totalPageNum<5){
            startPage = 1;
            endPage = totalPageNum;

        }else {
            if (pageNum<3){
                startPage = 1;
                endPage = 5;
            }else {
                if (pageNum>(totalPageNum-3)){
                    startPage = totalPageNum-4;
                    endPage = totalPageNum;
                }else {
                    startPage = pageNum - 2;
                    endPage = pageNum + 2;
                }
            }
        }
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getTotalNum() {
        return totalNum;
    }

    public void setTotalNum(int totalNum) {
        this.totalNum = totalNum;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getTotalPageNum() {
        return totalPageNum;
    }

    public void setTotalPageNum(int totalPageNum) {
        this.totalPageNum = totalPageNum;
    }

    public int getStartIndex() {
        return startIndex;
    }

    public void setStartIndex(int startIndex) {
        startIndex = startIndex;
    }

    public int getStartPage() {
        return startPage;
    }

    public void setStartPage(int startPage) {
        this.startPage = startPage;
    }

    public int getEndPage() {
        return endPage;
    }

    public void setEndPage(int endPage) {
        this.endPage = endPage;
    }

    public List<?> getList() {
        return list;
    }

    public void setList(List<?> list) {
        this.list = list;
    }
}
2.在持久化层(dao)实现获取所有用户数据和每页显示数据条数的方法
        定义一个接口
import java.util.List;

public interface TeacherDao {

    public List<Teacher> findTeacherLimit(int startIndex,int pageSize);

    public int findTotalNum();
}
         实现接口中的方法
public class TeacherDaoImpl implements TeacherDao{
    /**
     * 获得所有教师数据
     */
    @Override
    public int findTotalNum() {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int totalNum = 0;
        try {
            conn = DButils.getConnection();//连接数据库,这里是我自己封装了一个连接数据库的工具类的方法
            String sql = "select count(*) from teacher";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()){
                totalNum = rs.getInt(1);
            }
        DButils.closeDB(conn,ps,rs);
        }catch (Exception e){
            e.printStackTrace();
        }
        return totalNum;
    }

    /**
     * 每页显示数据条数
     */
    @Override
    public List<Teacher> findTeacherLimit(int startIndex,int pageSize) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        List<Teacher> list= new ArrayList<Teacher>();

        try {
            conn = DButils.getConnection();//连接数据库
            String sql ="SELECT id,name,password,gender,email,remark FROM teacher limit ?,?";//使用limit对数据库指定数据查询
            ps = conn.prepareStatement(sql);
            ps.setInt(1,startIndex);
            ps.setInt(2,pageSize);
            rs = ps.executeQuery();
            while (rs.next()){
                Teacher teacher=new Teacher();
                teacher.setId(rs.getInt(1));
                teacher.setName(rs.getString(2));
                teacher.setPassword(rs.getString(3));
                teacher.setGender(rs.getString(4));
                teacher.setEmail(rs.getString(5));
                teacher.setRemark(rs.getString(6));
                list.add(teacher);
            }
            DButils.closeDB(conn,ps,rs);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return list;

    }
}
3.在service层实现分页方法
        定义一个接口
import com.school.domain.Page;

import java.util.List;

public interface TeacherService {
    public Page showPageDate(int pageIndex);
}
          实现接口中的方法

public class TeacherServiceImpl implements TeacherService{
    /**
     * 分页
     * @param pageIndex
     * @return
     */
    @Override
    public Page showPageDate(int pageIndex) {
        TeacherDao teacherDao = new TeacherDaoImpl();
        int totalNum = teacherDao.findTotalNum();
        Page page = new Page(pageIndex,totalNum);
        List<Teacher> teachers = teacherDao.findTeacherLimit(page.getStartIndex(),page.getPageSize());
        page.setList(teachers);
        return page;
    }
}
4.controller层中创建一个Servlet
@WebServlet("/TeacherController")
public class TeacherController extends HttpServlet{
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action = req.getParameter("action");
        /**
         * 分页
         */
        if ("splitPage".equals(action)) {
            int pageNum = Integer.parseInt(req.getParameter("pageNum"));
            TeacherService teacherService = new TeacherServiceImpl();
            teacherService.showPageDate(pageNum);
            Page page = teacherService.showPageDate(pageNum);
            req.setAttribute("page",page);
            req.getRequestDispatcher("/pages/admin_teacher.jsp").forward(req,resp);
        }
    }
}
5.前台网页获取数据
<html>

<head>
    <!-- 页面meta -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">




    <title>校园信息管理系统</title>
    <meta name="description" content="校园信息管理系统">
    <meta name="keywords" content="校园信息管理系统">
</head>
<body class="hold-transition skin-purple sidebar-mini">
<i class="fa fa-pie-chart"></i> <span>教师管理</span>
                    <span class="pull-right-container">
                        <i class="fa fa-angle-left pull-right"></i>
                    </span>
                </a>
                        <ul class="treeview-menu">

                            <li id="charts-chartjs">
                                <a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=1">
                            <i class="fa fa-circle-o"></i>教师信息
                        </a>
                            </li>
                        </ul>
                                //利用forEach循环取得数据
                             <tbody>
                                <c:forEach items="${page.list}" var="teacher">
                                    <tr>
                                        <td><input name="ids" type="checkbox"></td>
                                        <td>${teacher.id}</td>
                                        <td>${teacher.name}</td>
                                        <td>${teacher.password}</td>
                                        <td>${teacher.gender}</td>
                                        <td>${teacher.email}</td>
                                        <td class="text-center">${teacher.remark}</td>
                                        <td class="text-center">
                                            <a href="#"><button type="button" class="btn bg-olive btn-xs">编辑</button></a>
                                            <a href="#"><button type="button" class="btn bg-olive btn-xs">删除</button></a>
                                            
                                        </td>
                                    </tr>
                                </c:forEach>

                             </tbody>  
                     //把取得数据和条数传给按钮
                    <div class="box-footer">
                        <div class="pull-left">
                            <div class="form-group form-inline">
                                第${page.pageNum}页,总共${page.totalPageNum} 页,共${page.totalNum} 条数据。 每页
                                <select class="form-control">
                            <option>1</option>
                            <option>2</option>
                            <option>3</option>
                            <option>4</option>
                            <option>5</option>
                        </select> 条
                            </div>
                        </div>

                        <div class="box-tools pull-right">
                            <ul class="pagination">
                                <li>
                                    <a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=1" aria-label="Previous">首页</a>
                                </li>
                                <li>
                                    <c:if test="${page.pageNum>1}">
                                    <a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=${page.pageNum-1}">上一页</a>
                                    </c:if>
                                </li>
                                <c:forEach begin="${page.startPage}" end="${page.endPage}" var="pageNum">
                                <li><a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=${pageNum}">${pageNum}</a> </li>
                                </c:forEach>
                                <li>
                                    <c:if test="${page.pageNum<page.endPage}">
                                    <a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=${page.pageNum+1}">下一页</a>
                                    </c:if>
                                </li>
                                <li>
                                    <a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=${page.totalPageNum}" aria-label="Next">尾页</a>
                                </li>
                            </ul>
                        </div>

                    </div>
三、运行结果

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值