文档

Java™ 教程
隐藏目录
范围
目录:Java命名和目录接口
课程:命名和目录操作
章节:搜索

范围

默认情况下,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")。


上一页:过滤器
下一页:结果计数