1.什么是JNDI?
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JBDI服务和目录之间进行接口(SPI)的实现,有管理者将JNDI API映射为特定的命名入伍和目录系统,是的Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是命名服务的一种自然扩展。两者之间的关键差别是目录服务中对象不但可以有名称还可以有属性(例如:用户有email地址),而服务中对象没有属性。
简而言之:JNDI就是一个容器,是一组在Java应用中访问命名和目录服务的API,通过名称将资源与服务进行服务进行关联。
2.Tocat JDNI
配置及使用(将对象写入到Tomcat JNDI)
参考Tomcat文档学习
3.Window JDNI
<1>获取Window某一个文件 context.list();
<2>读取某一个文件 context.looup("fileName");
代码实现:
public class TestWindowsJNDI {
public static void main(String[] args) {
Hashtable<String,String> environment=new Hashtable<String, String>();
//1.windows 中有一个工厂
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
//2.执行目录(细节:加协议 file:///)
environment.put(Context.PROVIDER_URL, "file:///C:\\Windows");
//获取某个文件夹下所有的文件和文件夹
try {
Context context=new InitialContext(environment);
NamingEnumeration<NameClassPair> namingEnumeration=context.list("");
int i=0;
while(namingEnumeration.hasMore()){
i++;
NameClassPair nameClassPair=namingEnumeration.next();
System.out.println(nameClassPair.getName()+":"+nameClassPair.getClassName());
}
System.out.println(i);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.自定义JNDI
<1>将对象写入到自定义的JNDI中 context.bind();
<2>在自定义的JNDI中,删除某一个对象 context.unbind();
<3>从自定义的JNDI中获取某一个对象 context.lookup();
<4>从自定义的JNDI中获取所有对象 context.list();
代码实现:
public class TestDIY {
public static void main(String[] args) {
Hashtable<String,String> environment=new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
try {
Context context=new InitialContext(environment);
//绑定值
context.bind("a", "aa");
context.bind("b", "bb");
context.bind("person", new Person(1, "亮亮", 16));
//移除
context.unbind("b");
//遍历
NamingEnumeration<NameClassPair> namingEnumeration=context.list("");
while(namingEnumeration.hasMore()){
NameClassPair nameClassPair=namingEnumeration.next();
Object o=context.lookup(nameClassPair.getName());
System.out.println(nameClassPair.getName()+" "+o);
}
} catch (NamingException e) {
e.printStackTrace();
}
}
}