这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改以了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK版本说明以获取有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息。
当客户端希望服务器发送排序后的搜索结果时,使用排序控制。在客户端需要根据某些标准对结果进行排序,但无法自行执行排序过程的情况下,服务器端排序是很有用的。排序控制在RFC 2891中指定。下面的类提供了支持排序控制所需的功能。
SortKey是基于它服务器对结果进行排序的键的有序列表。
下面的示例说明了客户端和服务器之间的交互,客户端执行搜索请求并要求基于属性"cn"进行服务器端排序。
// 激活排序
String sortKey = "cn";
ctx.setRequestControls(new Control[] {
new SortControl(sortKey, 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 SortResponseControl) {
SortResponseControl src = (SortResponseControl)controls[i];
if (! src.isSorted()) {
throw src.getException();
}
} else {
// 处理其他响应控制(如果有的话)
}
}
}
完整的JNDI示例可以在这里找到。
注意:排序控制受Oracle Directory Server和Windows Active Directory服务器的支持。