在 Apache 目录服务器中存储 Java 对象,第 2 部分:在 ApacheDS 中存储、搜索和检索 Java 对象(下)
2010-04-19 00:00:00 来源:WEB开发网步骤 6. 提取搜索结果:清单 6 的步骤 6 中的 NamingEnumeration 对象包含搜索结果集合。集合中的每个搜索结果都由一个 SearchResult 对象表示。要提取单个的搜索结果,只需在 NamingEnumeration 对象上进行迭代即可。
步骤 7. 处理单个搜索结果:注意,每个搜索结果都包含关于单一数据条目的信息。可以从 SearchResult 对象得到数据条目的两部分信息(即 RDN 和它的所有属性)。
步骤 8. 调用 getName():SearchResult 对象的 getName() 方法返回所搜索条目的 RDN。Alice 的 RDN 是 uid=alice。
步骤 9. 调用 getAttributes():SearchResult 对象的 getAttributes() 方法返回 Attributes 对象,它包含与所搜索条目相关的所有属性值。Attributes 对象表示的属性集合与 清单 6 的步骤 4 中创建的属性集合类似。
步骤 10. 调用 getAll():Attributes 对象的 getAll() 方法返回一个枚举,其中包含集合中的所有属性。
步骤 11. 处理属性:最后,从集合中取出一个属性,并调用其 getID() 和 getAll() 方法。getID() 方法以字符串形式返回属性的名称。getAll() 方法以枚举的形式返回所有属性值。
应用程序 5. 按名称搜索
在前面的搜索示例中,我们已查看了如何在知道用户 uid 时搜索用户。在这个示例中,将学习如何修改应用程序,用 Alice 的用户名而不是 uid 来搜索她。
回忆一下 第 1 部分的图 18,在该图中,用户名存储为用户数据条目的 cn 属性的值。所以,在这个应用程序中,您将搜索 cn 属性,如清单 7 所示:
清单 7. SearchForAliceByCN
public class SearchForAliceByCN {
public SearchForAliceByCN() {
try
{
//------------------------------------------
//Step1: Setting up JNDI properties for ApacheDS
//------------------------------------------
InputStream inputStream = new FileInputStream( "ApacheDS.properties");
Properties properties = new Properties();
properties.load(inputStream);
properties.setProperty("java.naming.security.credentials", "secret");
//------------------------------------------
// Step2: Fetching a DirContext object
//------------------------------------------
DirContext ctx = new InitialDirContext(properties);
//---------------------------------------------
//Step3: Setting search context
//---------------------------------------------
String searchContext = "ou=users";
//--------------------------------------------
//Step4: Creating search attributes for Alice
//--------------------------------------------
Attribute cn = new BasicAttribute("cn");
Attribute objclass = new BasicAttribute("objectClass");
//putting attribute values
cn.add("Alice");
objclass.add("person");
//Instantiate an Attributes object and put search attributes in it
Attributes attrs = new BasicAttributes(true);
attrs.put(cn);
attrs.put(objclass);
//------------------------------------------
//Step5: Executing search
//------------------------------------------
NamingEnumeration ne = ctx.search(searchContext, attrs);
if (ne != null)
{
//Step 6: Iterating through SearchResults
while (ne.hasMore()) {
//Step 7: Getting individual SearchResult object
SearchResult sr = (SearchResult) ne.next();
//Step 8:
String entryRDN = sr.getName();
//Step 9:
Attributes srAttrs = sr.getAttributes();
if (srAttrs != null) {
//Step 10:
for (Enumeration e = attrs.getAll() ; e.hasMoreElements() ;)
{
Attribute attr = (Attribute) e.nextElement();
//Step 11:
String attrID = attr.getID();
System.out.println("Attribute Name: "+attrID);
System.out.println("Attribute Value(s):");
NamingEnumeration e1 = attr.getAll();
while (e1.hasMore())
System.out.println("\t\t"+e1.nextElement());
}//for()
}//if (srAttrs)
}
}//if (ne != null)
} catch (Exception e) {
System.out.println("Operation failed: " + e);
}
}
public static void main(String[] args) {
SearchForAliceByCN searchAlice = new SearchForAliceByCN();
}
}
- ››apache设置域名绑定 以及绑定不起作用的排查
- ››apache rewrite将指定URL转向指定的几个服务器
- ››apache配置文件httpd.comf部分参数说明
- ››Apache+Mysql+PHP+phpMyAdmin+Mac OS X 10.7 Lion...
- ››apache+tomcat负载均衡_项目实例
- ››apache mysql php 源码编译使用
- ››Apache添加mod_aspdotnet.so支持ASP.NET配置指南
- ››Apache中改变php.ini的路径
- ››Apache2.2与Tomcat6整合及虚拟主机配置
- ››Apache+php+mysql在windows下的安装与配置图解
- ››服务器群集:Windows 2000 和 Windows Server 200...
- ››服务器维护经验谈 图解DHCP故障排除
更多精彩
赞助商链接