• Jsp分页的简单制作


    Jsp分页的简单制作

    运行环境:jsp+tomcat+eclipse

    技术:servlet+jsp+mysql

    分页技术还区分两个:假分页和真分页

      假分页:一次性从数据库读出表的所有数据一次性的返回给客户端,由js来控制每一页的显示。

      真分页:由程序控制,每一次只返回一页大小的数据,显示到客户端。

      由此可以很清楚的分辨出真假分页各自的优缺点:

      假分页:由于一次性读出所有数据并返回给客户端,如果数据量庞大,所以这一次的动作可能是非常消耗服务器资源和带宽的,

    但是返回给客户端以后就非常轻松了,客户在一段时间内不会再像服务器端请求资源。但不代表可能出现一些意外情况,

    比如说客户将浏览器关闭,重新访问网站等。

      真分页:假分页每次只取需要的数据返回给客户端,比起真分页没有那么大的数据库压力。但也因为这个工作特性,所以假分页

    的方法需要频繁和服务器端进行交互。既然频繁交互,自然也会给服务器带来负担。

      综上:如果数据量较小,使用假分页的效果会更优,如果数据量庞大,使用真分页的效果更优。

      在制作分页的时候你需要了解,分页的数据,分页的一些属性有哪些

    1. 分页的数据:这些数据可以从数据库中提取出来的,也可以网上搜索得到的
    2. 分页的属性:
        • 数据总数
        • 页面的数据多少条
        • 总的页面数
        • 最后一页
        • 第一页
        • 当前页

      我们可以将这些属性变成一个实体类中的属性来调用,会感觉更加的清晰

      先创建一个实体类:

    public class Paging {
        private int page;//当前页
        private int pagesize;//页面数据条数
        private int indexpage=1;//首页
        private int endpage;//尾页
        private int count;//总数据条数
        private int pagenumber;//总页面数
        private List<Object> list;//得到的数据放入list集合中
        public int getPage() {
            return page;
        }
        public void setPage(int page) {
            this.page = page;
        }
        public int getPagesize() {
            return pagesize;
        }
        public void setPagesize(int pagesize) {
            this.pagesize = pagesize;
        }
        public int getIndexpage() {
            return indexpage;
        }
        public void setIndexpage(int indexpage) {
            this.indexpage = indexpage;
        }
        public int getEndpage() {
            
            return endpage;
        }
        public void setEndpage() {
            this.endpage=pagenumber;
        }
        public int getCount() {
            this.count=list.size();
            return count;
        }
        public void setCount() {
            this.count=list.size();
        }
        
        public int getPagenumber() {
            return pagenumber;
        }
        public void setPagenumber() {
            this.pagenumber=(count%pagesize==0)?count/pagesize:count/pagesize+1;
        }
        public List<Object> getList() {
            return list;
        }
        public void setList(List<Object> list) {
            this.list = list;
        }
    
    }

    需要创建一个servlet

    public class Staff_ListServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            Stuff stuff=new Stuff();
            stuff.setStaff("1");
            List<Object> list=    DAO.query(stuff);
            //页面当前页
            int page=0;
            //得到传过来的当前页
            String str_page=    request.getParameter("page");
            /**
             * 创建分页的关于一些内容的工具bean
             * 
             * */
            Paging paging=new Paging();
            paging.setList(list);//从数据库得到数据存入的list集合
            paging.setCount();//数据总数
            paging.setPagesize(5);//一个页面的数据多少条
            paging.setPagenumber();//总的页面数
            paging.setEndpage();//最后一页
            paging.setIndexpage(1);//第一页
            if (str_page!=null) {
                //将页转换整型判断其大小
                int pag=Integer.parseInt(str_page);
                //当大于零,将传过来的pag值赋给当前页page
                if (pag>=0) {
                    page=pag;
                    //如果小于最大值时则,将其传过来的值减1在赋值给当前页,让其一直在最后一页
                    if (pag>(paging.getPagenumber()-1)) {
                        page=pag-1;
                    }
                }
            }
            paging.setPage(page);//最终确认当前页
            List<Object> list_page =new ArrayList<>();
            //将当前页的值传给新的list_page集合中,list集合是全部数据综合,用i调用其中的几条数据给list_page
            for (int i = paging.getPage()*paging.getPagesize(); i <(paging.getPage()+1)*paging.getPagesize()&&i<list.size(); i++) {
                list_page.add(list.get(i));
            }
            //将paging对象其设置在作用域中,以便后面页面调用
            request.setAttribute("paging", paging);
            request.setAttribute("list", list_page);
            request.getRequestDispatcher("staff_list.jsp").forward(request, response);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

    在页面中用EL表达式调用这些request请求设置的可让数据在页面显示,这是个jsp页面,EL表达式只能在jsp页面使用

      关键点在下面的可以问号传参,返回servlet中将当前操作传过去,这个可以结合js中的ajax,实现页面的刷新了
    <div id="content_right">
                            <br />
                            <br />
    
                            <div class="btwz">
                                人员列表
                            </div>
                            <br>
                            <form name="form1" action="Staff_InfoServlet" method="post">
                                <table cellspacing="1" class="table">
                                    <tr class="table_header">
                                        <td valign="middle" align="left">
                                            姓名
                                        </td>
                                        <td valign="middle" align="left">
                                            性别
                                        </td>
                                        <td valign="middle" align="left">
                                            入职时间
                                        </td>
                                        <td valign="middle" align="left">
                                            职位
                                        </td>
                                        <td valign="middle" align="left">
                                            详细信息
                                        </td>
                                        <td valign="middle" align="left">
                                        </td>
                                    </tr>
                                    <c:forEach items="${list}" var="list">
                                    <tr class="row2" onMouseOver="this.className='row1'"
                                        onMouseOut="this.className='row2'">
                                        <td valign="middle" align="left">
                                            ${list.name}
                                        </td>
                                        <td valign="middle" align="left">
                                            ${list.sex}
                                        </td>
                                        <td valign="middle" align="left">
                                            ${list.hiredate}
                                        </td>
                                        <td valign="middle" align="left">
                                            ${list.position}
                                        </td>
                                        <td valign="middle" align="left">
                                            <input type="radio" name="choose"  value="${list.id}"/>
                                        </td>
                                        <td valign="middle" align="left">
                                            <input type="checkbox" name="empId" value="${list.id}">
                                        </td>
                                    </tr>
                                    </c:forEach>
                                </table>
                            </form>
                            <p align="right">
                                <input type="button" class="button" value="添加人员"
                                    onclick="location='createStaff.jsp'" />
                                <input type="button" class="button" value="详细信息"
                                    onClick="    document.forms[0].submit();" />
                                <input type="button" Class="button" value=" 删  除 "
                                    onClick="go()" />
                            </p>
                            ${Nochoose}
    <p class="paging"> <a href="Staff_ListServlet?page=${paging.indexpage-1}">&lt;&lt; 首页 </a> <a href="Staff_ListServlet?page=${paging.page-1 }"> &lt; 上一页 </a> <strong>第${paging.page+1}页/共${paging.pagenumber}页</strong> <a href="Staff_ListServlet?page=${paging.page+1}">下一页 &gt;</a> <a href="Staff_ListServlet?page=${paging.pagenumber-1}">末页 &gt;&gt;</a> </p> <br /> <br /> </div> </div> </div>

    就这样一个分页解决了,很有复用性,可能有点麻烦,给大家参考一下

    其实也可以不用建一个页面的属性实体类制作,大家可以尝试一下

  • 相关阅读:
    BZOJ_2460_[BeiJing2011]元素_线性基
    BZOJ_4448_[Scoi2015]情报传递_主席树
    BZOJ_4004_[JLOI2015]装备购买_线性基
    BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组
    BZOJ_4128_Matrix_矩阵乘法+哈希+BSGS
    BZOJ_4378_[POI2015]Logistyka_树状数组
    BZOJ_2527_[Poi2011]Meteors_整体二分
    BZOJ_2738_矩阵乘法_整体二分
    BZOJ_3687_简单题_bitset
    HDU 4501
  • 原文地址:https://www.cnblogs.com/zhouguanglin/p/7364927.html
Copyright © 2020-2023  润新知