JNDI

1.什么是JNDI?

(1)JNDI的全称是Java Naming and Directory Interface(Java命名和目录接口)。

(2)它是一组在Java应用中访问命名和目录服务的API。

(3)通过名称将资源与服务进行关联

2.JNDI的作用

JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。


有了JNDI之后,程序员在开发项目时,在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。那么程序就可以不用具体关心JDBC的参数了。

3.JNDI的优点

(1)包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务

(2)可以同时连接到多个命名或目录服务上

(3)建立起逻辑关联,允许把名称同Java对象或资源关联起来,而不必指导对象或资源的物理ID


Tomcat JNDI:可以参考Tomcat的文档学习

Windows JNDI:要先导两个jar包(Windows文件目录服务包)到项目的lib里面

<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();
}
}
}


自定义JNDI

<1>将对象写入到自定义的JNDI中  context.bind();

<2>在自定义的JNDI中,删除某一个对象 context.unbind();

<3>在自定义的JNDI中获取某一个对象 context.lookup();

<4>从自定义的JNDI中获取所有对象  context.list();

发布了41 篇原创文章 · 获赞 1 · 访问量 6765
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章