分页查询功能一直是web编程中常用的技术,如何实现可重复使用而又简单的分页技术呢,下面的代码可以提供一些参考,实现用户列表的分页显示,当其它数据需分页显示时,可以复用其中的分页对象 (SplitPage.java),然后提供实现dao接口的类. 先列出这个例子中的接口类和页面文件清单:
1.数据库连接对象:DBConnection,获取数据连接对象getConnection();
2.分页(类)对象:SplitPage.java,提供页面参数(是否首页/尾页/   当前第n页等)
3.数据库访问接口:dao,提供业务逻辑中对数据库操作接口,   用于分页查寻的接口方法是:  
  findAll(SplitPage sp)//方法的输入参数为分页对象  
  getRows()//提供总的记录数  
  UserDao.java用于实现这个接口.
4.用户JavaBean:User.java,分页显示用户列表时的用户对象.
5.userList.jsp:分页显示用户列表jsp页面.
============================================================
 下面是详细介绍:
------------------------------------------------------------
1.关于数据库连接对象,实现下面的方法,为dao提供Connection对象
       //获得数据库连接
       public Connection getConnection(){
              Connection conn=null;
           try {
                  Class.forName(driver);
                            conn=DriverManager.getConnection(url,user,pass);
              } catch (Exception e) {
                     e.printStackTrace();
              }
              return conn;
       }
       //关闭数据库连接
       public void close(ResultSet rs,Statement st,Connection conn){
              try {
                     if(rs!=null) rs.close();
                     if(st!=null) st.close();
                     if(conn!=null){
                            if(!conn.isClosed()){
                                   conn.close();
                            }
                     }
              } catch (Exception e) {
                     e.printStackTrace();
              }
       }
------------------------------------------------------------
2.分页对象的实现:
public class SplitPage {
       //分页请求时,请求标识参数
       final public static String FIRSTPAGE="first";//请求第一页
       final public static String PREVIOUSEPAGE="previous";//请求上一页
       final public static String NEXTPAGE="next";//请求下一页
       final public static String LASTPAGE="last";//请求最后一页
      
       private int pageRows=3;//每页显示记录数,默认3条,可以在页面设置
       private int totalRows=0;//总的记录数,这个参数由数据库dao对象提供
       private int currentPage=1;//当前显示的页面编号,默认第一页
       private int firstPage=1;//首页位置,默认第一页
       private int totalPages=1;//总的页面数量,默认就一页
      
      
       public int getCurrentPage() {
              return currentPage;
       }
       public void setCurrentPage(int currentPage) {
              this.currentPage = currentPage;
       }
      
       public int getFirstPage() {
              return firstPage;
       }
       public void setFirstPage(int firstPage) {
              this.firstPage = firstPage;
       }
      
       public int getPageRows() {
              return pageRows;
       }
       public void setPageRows(int pageRows) {
              if(pageRows==0)throw new ArithmeticException();
              this.pageRows = pageRows;//如果pageRows被设置为零,应当抛出异常.
              //修改每页显示记录数,将会直接影响总页面数,所以要同时修改
              this.totalPages=(this.totalRows%this.pageRows==0)?this.totalRows/this.pageRows:this.totalRows/this.pageRows+1;
       }    
       public int getTotalRows() {
              return totalRows;
       }    
       //设置分页对象的总记录属性后,就应该根据每页面显示记录数,计算得到总的页面数
       public void setTotalRows(int totalRows) {
              this.totalRows = totalRows;
        //计算总的页面数(或最后的页面号),两个整数相除如果刚好除尽,值就是相除后的商,否则如果有余数,商应当还加1.
              this.totalPages=(this.totalRows%this.pageRows==0)?this.totalRows/this.pageRows:this.totalRows/this.pageRows+1;
       }
       //不应该提供方法设置总页面数,它是计算得到的
       //但应当提供获取总页面数的方法.
       public int getTotalPages() {
              return totalPages;
       }
      
       //根据请求页面的标识参数,重新计算当前要显示的页面
       //核心方法,实现分页显示功能.
       public int confirmPage(String flag){
              int newPage=this.currentPage;
              if(flag!=null){//flag只可能是下面值之一
                     if(flag.equals(SplitPage.FIRSTPAGE)){
                            newPage=1;
                     }else if(flag.equals(SplitPage.LASTPAGE)){
                            newPage=this.totalPages;
                     }else if(flag.equals(SplitPage.NEXTPAGE)){
                            //页面总数和当前页面编号相等吗,如果是那么页面编号不往后走,否则页面编号加一
                            newPage=(this.totalPages==this.currentPage)?this.currentPage:this.currentPage+1;
                     }else if(flag.equals(SplitPage.PREVIOUSEPAGE)){
                            //第一个页面和当前页面相等吗,如果是那么页面编号不往前走,否则页面编号减一
                            newPage=(this.firstPage==this.currentPage)?this.currentPage:this.currentPage-1;
                     }else{//否则是一个数字字符串
                            int tpage=Integer.parseInt(flag.trim());
                            newPage=tpage;
                     }
              }else{//如果请求标识参数为空,那么当前页码不变
                     newPage=this.currentPage;
              }
              //在返回前设置当前页面
              this.setCurrentPage(newPage);
              return newPage;
       }
}
------------------------------------------------------------
3.在UserDao.java中实现接口方法findAll(SplitPage sp)
  提供数据集合的分页列表.只要实现了这个方法,总是可以正确提供
  分页显示数据.
       //分页查询
       public List<User> findAll(SplitPage sp) {
              List<User> list = new ArrayList<User>();
              //获取数据库连接对象
              Connection conn = factory.getConnection();
              Statement st = null;
              ResultSet rs = null;
              //在sqlserver数据中分页查询的sql语句,分页的参数来自SplitPage对象
              //在MySQL中查询语句为"select * from user limit " + sp.getPageRows()*      
               (sp.getCurrentPage()-1) +"," + sp.getPageRows();.
              String sql = "select top "+sp.getPageRows()+" * from users2 where id " +
                                 " not in(select top ("+sp.getPageRows()*(sp.getCurrentPage()-1)+") id " +" from users2 order by id) order by id";
              try {
                     st = conn.createStatement();
                     rs = st.executeQuery(sql);
                     while (rs.next()) {
                            User user = new User();
                            user.setId(rs.getInt(1));
                            user.setUserName(rs.getString(2));
                            user.setPassWord(rs.getString(3));
                            user.setBirthday(rs.getString(4));
                            user.setSex(rs.getString(5));
                            user.setEmail(rs.getString(6));
                            user.setMarried(rs.getString(7));
                            user.setInterest(rs.getString(8));
                            list.add(user);
                     }
              } catch (SQLException e) {
                     e.printStackTrace();
              } finally {
                     factory.close(rs, st, conn);
              }
              return list;
       }
------------------------------------------------------------
4.剩下的工作就是在jsp中分页显示用户列表了,凡是需要分页浏览
  显示的数据都可以通过dao和SplitPage对象实现了.
<html>
  <head>
    <title>My JSP 'userList.jsp' starting page</title>
    //这段代码实现在分页中
    //切换到分页范围内的任何一个页面
    <script type="text/javascript">
         function go(){
                     var goPage=document.all.selectpage.value;
                     alert("我们将去页面:userList.jsp?flag="+goPage);
                     document.open("userList.jsp?flag="+goPage,"_self","");
         }
    </script>
  </head>
  <%--
  spage 是分页对象,保存分页的详细信息,此对象存放在session中
  每次查询或显示分页数据时只要设置此对象的当前页就可.
  --%>
<jsp:useBean id="spage" class="com.accp.zl.util.SplitPage" scope="session"></jsp:useBean>
<jsp:useBean id="dao" class="com.accp.zl.dao.UserDao" scope="session"></jsp:useBean>
<%
//翻页时的方向值,即SplitPage中请求标识参数
String flag=request.getParameter("flag");
//每次刷新页面时都应当重新获得表中的记录数,
//因为翻页过程中表的记录可能随时都会更新
int totalRows=dao.getRows();//总的记录数
spage.setTotalRows(totalRows);
//重新计算确定当前要显示的页面值,这是一次必要的调用,
//实现了翻页
int currentPage=spage.confirmPage(flag);
//spage.setPageRows(10);修改每页显示的记录数,默认3
%>
  <body>
    <center>
           <p><h2>查看用户列表,用户管理</h2>
           <br>
          
           <table border="1">
                  <thead>
                         <th>编号</th><th>用户名</th><th>出生日期</th><th>爱好</th><th>操作</th>
                  </thead>
                  <%
                  //翻页查询时需要传递翻页对象,翻页对象保存在session中
                  List<User> list=dao.findAll(spage);
                  for(User u:list){
                         %>
                         <tr>
                                <td><%=u.getId() %></td>
                                <td><%=u.getUserName() %></td>
                                <td><%=u.getBirthday() %></td>
                                <td><%=u.getInterest() %></td>
                                <td><a href='modify.jsp?userid=<%=u.getId() %>'>修改 </a><a href='delete.jsp?userid=<%=u.getId() %>'> 删除</a></td>
                         </tr>
                         <%}  %>
                  <tr>
                         <td colspan="5" align="right">
                         <%--下面页面分页操作,其它数据分页页面复用时拷贝这段
                                       代码就可以了.
                         --%>
                         【
                         <a href="userList.jsp?flag=<%=SplitPage.FIRSTPAGE%>">首页</a>
                         <a href="userList.jsp?flag=<%=SplitPage.PREVIOUSEPAGE %>">上一页</a>
                         <a href="userList.jsp?flag=<%=SplitPage.NEXTPAGE %>">下一页</a>
                         <a href="userList.jsp?flag=<%=SplitPage.LASTPAGE %>">最后页</a>
                         <select id="selectpage" name="goPage" οnchange="javascript:go();">
                                <%
                                for(int i=1;i<=spage.getTotalPages();i++){
                                %>
                                <option value="<%=i%>" <%=(spage.getCurrentPage()==+i)?"selected='selected'":"" %>><%=i%>/<%=spage.getTotalPages()%>
                                <%}%>
                         </select>
                         】
                         </td>
                  </tr>
           </table>
          
    </center>
  </body>
</html>

jsp分页功能的实现相关推荐

  1. jsp自定义图文新闻列表标签结合ssh2,带分页功能

    jsp自定义图文新闻列表标签结合ssh2,带分页功能(欢迎大家讨论指点,共同进步) 1.service层 (模拟返回数据) package com.mingda.service.impl;import ...

  2. Jsp中分页功能的实现

    分页查询功能一直是web编程中常用的技术,如何实现可重复使用而又简单的分页技术呢,下面的代码可以提供一些参考,实现用户列表的分页显示,当其它数据需分页显示时,可以复用其中的分页对象 (SplitPag ...

  3. hibernate和struts2实现分页功能

    1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO {public List<Person> queryBy ...

  4. 分页技巧_实现第一个分页功能(回复列表中的分页)

    分页技巧_实现第一个分页功能(回复列表中的分页) ======================================== 假设共25条数据,每页显示10条,则共3页 first  max - ...

  5. 【SSH项目实战】国税协同平台-26.分页功能编写

    可以看到,我们之前的用户管理.角色管理和信息发布管理的列表下均有这些东西: 总共1条记录,当前第 1 页,共 1 页    上一页  下一页 到 这个就是美工留给我们做分页的,我们接下来就以信息发布管 ...

  6. 使用hibernate和struts2实现分页功能

    想着每天能学个新东西,今天准备了这个hibernate+struts2实现页面的分页功能,在这里,首先要感谢 http://www.blogjava.net/rongxh7/archive/2008/ ...

  7. java jdbc标签jsp_jsp+servlet+javabean+jdbc实现增删改查和分页功能 案例源码

    [实例简介] 客户管理案例 1.目的:总结JDBC,和Servlet JSP结合到一起. 2.开发中的一些小技巧. 3.客户管理平台功能 * 添加客户 * 查询所有的客户的信息 * 修改客户信息 * ...

  8. (首页上一页下一页尾页 + 下拉框跳转)分页功能

    说在前头(本人用的是bootstrap +jQuery 和 struts2 +  MVC)不影响分页功能 制作一个分页功能: 效果如下: 由上图可知,此功能只适合页数不是特别多的情况下,页数多的时候, ...

  9. 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...

最新文章

  1. VS2010 编译 QT4.8.7 x64
  2. phpcms调用栏目描述_phpcms标签整理_当前栏目调用
  3. springboot 获取application参数_LOOK ! SpringBoot的外部化配置最全解析
  4. Cannot open the disk 'D:\win7-ie8\Windows 7 x64.vmdk' or one of the snapshot
  5. EXTJS Date 的转换格式化字符
  6. 一个能拖动,能调整大小,能更新bind值的vue指令-vuedragx
  7. Unity 根据文件路径批量修改图片格式
  8. 丁磊:那时候我们除了会写软件 什么也不会做
  9. 微软技术大会-无人机为中国电信巡航基站
  10. 小组件打不开-完美解决
  11. java字符串大小写转化
  12. Carson带你学Android:RxJava过滤操作符
  13. 中国现代书画家——张士高、崔世年、姚子华等
  14. PySide+PyDesigner出现错误:This application failed to start because no Qt platform plugin could be initia
  15. 振镜可以用计算机控制,振镜扫描式打标头
  16. 在linux系统下更新火狐浏览器
  17. 感知机2-多层感知机
  18. 浅谈冷启动问题 (推荐系统相关)
  19. 数独(Sudoku)求解程序
  20. 微信、支付宝二码合一扫码支付实现思路

热门文章

  1. VC环境下简单的贪吃蛇
  2. VQA(图像问答)数据集结构及大致内容
  3. Eclipse中建多层级包时出现的问题
  4. 安全技术(Security)
  5. CMMI:四级五级图表做法
  6. 程序员淡定的姿态和操蛋的心...
  7. Linux系统备份之tar
  8. idea新增目录文件不能提交
  9. c++rpg黑框游戏_RPG游戏 C++源码 文字RPG游戏
  10. CIDR表示IP地址规律