Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言变化。
有关所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息,请参阅JDK发布说明。
javax.naming.ldap.BasicControl实现了javax.naming.ldap.Control,作为扩展其他控件的基本实现。
分页结果控制对于希望以受控的方式接收由页面大小限制的LDAP搜索结果的LDAP客户端非常有用。页面大小可以根据客户端的资源(如带宽和处理能力)的可用性进行配置。
服务器使用一个cookie(类似于HTTP会话cookie机制)来维护搜索请求的状态,以跟踪发送给客户端的结果。分页结果控制在RFC 2696中进行了说明。下面的类提供了支持分页结果控制所需的功能。
下面的示例演示了客户端进行搜索并请求页面大小限制为5的客户端-服务器交互。服务器返回的整个结果集包含21个条目。
// 激活分页结果 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());
// 迭代服务器发送的一批搜索结果 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 { // 处理其他响应控件(如果有的话) } } }
// 重新激活分页结果 ctx.setRequestControls(new Control[]{ new PagedResultsControl(pageSize, cookie, Control.CRITICAL) });
完整的JNDI示例可以在这里
找到。
注意:分页搜索控件受Windows Active Directory服务器支持。Oracle Directory Server版本5.2不支持。