什么是JNDI?

本文介绍了Java命名和目录接口(JNDI)的基本概念及其在Tomcat和Windows环境下的配置与使用方法。包括如何在Tomcat中配置资源,并通过JNDI访问这些资源,以及如何在Windows环境下使用JNDI进行文件操作。

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

### JNDI 是什么? JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一种用于访问命名和目录服务的Java API。通过JNDI,应用程序可以使用统一的方式访问不同的命名和目录服务,例如DNS(域名系统)、LDAP(轻量目录访问协议)、RMI(远程方法调用)注册表等。JNDI的核心作用是将资源的逻辑名称与物理实现解耦,使得应用程序无需关心具体的实现细节,只需通过名称即可获取所需的资源。 简单来说,JNDI类似于一个电话簿,它将资源的名称与对应的实现进行映射。例如,数据库连接池、消息队列等资源可以通过JNDI配置在服务器中,并通过一个逻辑名称进行访问,而无需在代码中硬编码具体的连接信息[^1]。 ### JNDI 的作用 JNDI的主要作用是提高应用程序的灵活性和可维护性。通过将资源的配置从代码中剥离出来,JNDI允许开发人员将资源的管理集中化。例如,数据库连接信息(如用户名、密码、URL等)可以配置在服务器的配置文件中,而不是直接写在代码中。当需要修改这些信息时,只需更新配置文件,而无需重新编译和部署应用程序。 这种方式的优点在于: - **解耦性**:应用程序与具体的资源实现解耦,便于后期维护和扩展。 - **灵活性**:资源的配置可以动态调整,而无需修改代码。 - **集中管理**:资源的配置集中在服务器的配置文件中,便于统一管理和监控。 例如,在Tomcat中配置JNDI数据源时,数据库的连接信息被定义在`context.xml`文件中,应用程序通过JNDI名称(如`jdbc/MyDB`)来获取数据源,而无需直接处理数据库连接的具体细节[^1]。 ### 示例:JNDI 数据源配置 以下是一个在Tomcat中配置JNDI数据源的示例: ```xml <Resource name="jdbc/MyDB" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="root" password="password" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb"/> ``` 通过上述配置,应用程序可以通过JNDI名称`jdbc/MyDB`来获取数据库连接池资源,而不需要直接处理数据库连接的细节。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值