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不支持。