Module java.naming

Class PagedResultsControl

java.lang.Object
javax.naming.ldap.BasicControl
javax.naming.ldap.PagedResultsControl
所有已实现的接口:
Serializable, Control

public final class PagedResultsControl extends BasicControl
请求将搜索操作的结果以指定大小的批次由LDAP服务器返回。请求者通过调用搜索操作的速率来控制批次返回的速率。

以下代码示例显示了如何使用该类:



     // 打开LDAP连接
     LdapContext ctx = new InitialLdapContext();

     // 激活分页结果
     int pageSize = 20; // 每页20个条目
     byte[] cookie = null;
     int total;
     ctx.setRequestControls(new Control[]{
         new PagedResultsControl(pageSize, Control.CRITICAL) });

     do {
         // 执行搜索
         NamingEnumeration results =
             ctx.search("", "(objectclass=*)", new SearchControls());

         // 迭代搜索结果的批次
         while (results != null && results.hasMore()) {
             // 显示条目
             SearchResult entry = (SearchResult)results.next();
             System.out.println(entry.getName());
             System.out.println(entry.getAttributes());

             // 处理条目的响应控件(如果有)
             if (entry instanceof HasControls) {
                 // ((HasControls)entry).getControls();
             }
         }
         // 检查分页结果控件响应
         Control[] controls = ctx.getResponseControls();
         if (controls != null) {
             for (int i = 0; i < controls.length; i++) {
                 if (controls[i] instanceof PagedResultsResponseControl) {
                     PagedResultsResponseControl prrc =
                         (PagedResultsResponseControl)controls[i];
                     total = prrc.getResultSize();
                     cookie = prrc.getCookie();
                 } else {
                     // 处理其他响应控件(如果有)
                 }
             }
         }

         // 重新激活分页结果
         ctx.setRequestControls(new Control[]{
             new PagedResultsControl(pageSize, cookie, Control.CRITICAL) });
     } while (cookie != null);

     // 关闭LDAP连接
     ctx.close();
     ...

  

该类实现了在RFC 2696中定义的LDAPv3分页结果控件。控件的值具有以下ASN.1定义:



     realSearchControlValue ::= SEQUENCE {
         size      INTEGER (0..maxInt),
                           -- 客户端请求的每页大小
                           -- 服务器估计的结果集大小
         cookie    OCTET STRING
     }

 
自 JDK 版本:
1.5
参见:
  • Field Details

    • OID

      public static final String OID
      分页结果控件的分配对象标识符为1.2.840.113556.1.4.319。
      参见:
  • Constructor Details

    • PagedResultsControl

      public PagedResultsControl(int pageSize, boolean criticality) throws IOException
      构造一个控件,以设置每页返回的条目数。
      参数:
      pageSize - 每页返回的条目数。
      criticality - 如果为true,则服务器必须遵守控件并根据pageSize返回搜索结果,或拒绝执行搜索。如果为false,则服务器不必遵守控件。
      抛出:
      IOException - 如果在将提供的参数编码为控件时遇到错误。
    • PagedResultsControl

      public PagedResultsControl(int pageSize, byte[] cookie, boolean criticality) throws IOException
      构造一个控件,以设置每页返回的条目数。服务器提供cookie,并可以从分页结果响应控件中获取。

      通过将pageSize设置为零并将cookie设置为从服务器接收的最后一个cookie,可以放弃一系列分页结果。

      参数:
      pageSize - 每页返回的条目数。
      cookie - 可能为null的服务器生成的cookie。
      criticality - 如果为true,则服务器必须遵守控件并根据pageSize返回搜索结果,或拒绝执行搜索。如果为false,则服务器不必遵守控件。
      抛出:
      IOException - 如果在将提供的参数编码为控件时遇到错误。