Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改了解Java SE 9及后续版本中更新的语言功能的概述。
请参阅JDK发行说明了解有关所有JDK版本的新功能、增强功能和已删除或不建议使用的选项的信息。
默认情况下,SearchControls指定在命名的上下文中执行搜索(SearchControls.ONELEVEL_SCOPE)。这个默认值在搜索过滤器部分的示例中使用。
除了这个默认值,您还可以指定在整个子树中或仅在命名对象中执行搜索。
搜索整个子树会搜索命名对象及其所有子对象。要使搜索以此方式工作,请将SearchControls.SUBTREE_SCOPE传递给SearchControls.setSearchScope(),如下所示。
// 指定要返回的属性的ID String[] attrIDs = {"sn", "telephonenumber", "golfhandicap", "mail"}; SearchControls ctls = new SearchControls(); ctls.setReturningAttributes(attrIDs); ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); // 指定要匹配的搜索过滤器 // 要求具有属性"sn" == "Geisel"和"mail"属性的对象 String filter = "(&(sn=Geisel)(mail=*))"; // 通过使用过滤器在子树中搜索对象 NamingEnumeration answer = ctx.search("", filter, ctls);
此示例
在上下文ctx的子树中搜索满足指定过滤器的条目。它在此子树中找到满足过滤器的条目"cn= Ted Geisel, ou=People"。
# java SearchSubtree >>>cn=Ted Geisel, ou=People attribute: sn value: Geisel attribute: mail value: Ted.Geisel@JNDITutorial.example.com attribute: telephonenumber value: +1 408 555 5252
您还可以搜索命名对象。这对于测试命名对象是否满足搜索过滤器很有用。要搜索命名对象,请将SearchControls.OBJECT_SCOPE传递给setSearchScope()。
// 指定要返回的属性的ID String[] attrIDs = {"sn", "telephonenumber", "golfhandicap", "mail"}; SearchControls ctls = new SearchControls(); ctls.setReturningAttributes(attrIDs); ctls.setSearchScope(SearchControls.OBJECT_SCOPE); // 指定要匹配的搜索过滤器 // 要求具有属性"sn" == "Geisel"和"mail"属性的对象 String filter = "(&(sn=Geisel)(mail=*))"; // 通过使用过滤器在子树中搜索对象 NamingEnumeration answer = ctx.search("cn=Ted Geisel, ou=People", filter, ctls);
这个例子
测试了对象"cn=Ted Geisel, ou=People"是否满足给定的过滤器。
# java SearchObject >>> 属性:sn 值:Geisel 属性:mail 值:Ted.Geisel@JNDITutorial.example.com 属性:telephonenumber 值:+1 408 555 5252
这个例子找到了一个答案并打印出来。注意结果的名称是空字符串。这是因为对象的名称总是相对于搜索的上下文命名的(在这种情况下为"cn=Ted Geisel, ou=People")。