1.JNDI(容器:Tomcat,Window)
<1>Java Naming and Directory Interface,Java命名和目录接口
<2>是一组在Java应用中访问命名和目录服务的API
<3>通过名称将资源与服务进行关联
2.Tomcat JNDI
配置及使用(将对象写入到Tomcat JNDI)
apache-tomcat-9.0.0.M17\conf\context.xml
<Resource name="bean/person"
auth="Container"
type="com.zking.entity.Person"
factory="org.apache.naming.factory.BeanFactory"
pid="1" pname="张三" psex="男" page="21"/>
apache-tomcat-9.0.0.M17\conf\web.xml
<resource-env-ref>
<description>myperson</description>
<resource-env-ref-name>bean/person</resource-env-ref-name>
<resource-env-ref-type>com.zking.entity.Person</resource-env-ref-type>
</resource-env-ref>
3.Window JNDI
<1>获取Window某个目录下所有的文件 context.list("");
<2>读取某一个文件 context.lookup("fileName");
public static void main(String[] args) {
//获取某个文件夹下所有的文件和文件夹(Ctrl+1创建)
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();
}
}
4.自定义JNDI
<1>将对象写入到自定义的JNDI中 context.bind();
<2>在自定义的JNDI中,删除某一个对象 context.unbind();
<3>从自定义的JNDI中获取某一个对象 context.lookup();
<4>从自定义的JNDI中获取所有对象 context.list();
public static void main(String[] args) {
Hashtable<String, Object> environment=new Hashtable<String, Object>();
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, "李四", "男", 21));
//删除
//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 (Exception e) {
e.printStackTrace();
}
}