JNDI
1.JNDI是什么?
JNDI是一种容器,保存对象。
(1).Java Naming and Directory Interface ,Java命名和目录接口。
(2).是一组在Java应用中访问命名和目录服务的API。
(3).通过名称将资源与服务进行关联。
2.JNDI怎么使用?
2.1--TomCatJNDI
配置学会使用将对象写入到tomcat服务器中,可以将项目发布到Tomcat服务器中,然后在找到相关文档进行学习。
2.2--WindowsJNDI
<1>获取Window某个目录下所有的文件 context.list("");
<2>读取某一个文件 context.lookup("fileName");
具体实现代码如下:
package com.zking.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
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);
// File file=(File) context.lookup("WindowsUpdate.log");
// BufferedReader br=new BufferedReader(new FileReader(file));
// String str=null;
// while((str=br.readLine())!=null){
// System.out.println(str);
// }
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();
}
}
}
2.2--自定义JNDI
package com.zking.test;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import com.zking.entity.Person;
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();
}
}
}