文档

Java™教程
隐藏目录
分页结果控制
导航:Java命名和目录接口
课程:JDK 5.0和JDK 6中的新功能

分页结果控件

BasicControl

javax.naming.ldap.BasicControl实现了javax.naming.ldap.Control,作为扩展其他控件的基本实现。

分页结果控制

分页结果控制对于希望以受控的方式接收由页面大小限制的LDAP搜索结果的LDAP客户端非常有用。页面大小可以根据客户端的资源(如带宽和处理能力)的可用性进行配置。

服务器使用一个cookie(类似于HTTP会话cookie机制)来维护搜索请求的状态,以跟踪发送给客户端的结果。分页结果控制在RFC 2696中进行了说明。下面的类提供了支持分页结果控制所需的功能。

如何使用分页结果控制?

下面的示例演示了客户端进行搜索并请求页面大小限制为5的客户端-服务器交互。服务器返回的整个结果集包含21个条目。

  1. 客户端发送一个搜索请求,请求分页结果,每页大小为5。
    // 激活分页结果
         int pageSize = 5; // 每页5条记录
         byte[] cookie = null;
         int total;
         ctx.setRequestControls(new Control[]{ 
             new PagedResultsControl(pageSize, Control.CRITICAL) });
         // 执行搜索
         NamingEnumeration results = ctx.search("", "(objectclass=*)", 
                                                new SearchControls());
    
  2. 服务器返回条目,以及搜索结果中总共有21条条目的指示,并返回一个用于客户端在检索后续页面时使用的不透明cookie。
    // 迭代服务器发送的一批搜索结果
             while (results != null && results.hasMore()) {
                 // 显示条目
                 SearchResult entry = (SearchResult)results.next();
                 System.out.println(entry.getName());
    
                 // 处理条目的响应控件(如果有的话)
                 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 {
                         // 处理其他响应控件(如果有的话)
                     }
                 }
             }   
    
  3. 客户端发送一个相同的搜索请求,返回不透明cookie,请求下一页。
    // 重新激活分页结果
             ctx.setRequestControls(new Control[]{
                 new PagedResultsControl(pageSize, cookie, Control.CRITICAL) });
    
  4. 服务器返回五个条目,并指示还有更多条目。客户端重复执行步骤4中的搜索,直到服务器返回一个空cookie,表示服务器不再发送更多条目。

完整的JNDI示例可以在这里找到。


注意:分页搜索控件受Windows Active Directory服务器支持。Oracle Directory Server版本5.2不支持。



上一页:标准 LDAP 控件
下一页:排序控件