JNDI--只是一种获取文件的另一种方式

本文详细介绍了如何利用JNDI(Java Naming and Directory Interface)简化在Java环境中获取资源的过程,包括配置数据源和实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jndi 简单的说就是 把一种功能服务,用另一种方式表现出来,这种方式就是jndi。

举个例子。

我想要获取 磁盘上的 一个文件,假如说是“C:/aaa.txt”

正常的情况下我就要

File file =new File("C:/aaa.txt");

这样我就得到了文件对象,然后对干对象进行操作。

然而还可以使用 jndi来实现这种功能,

Hashtable env = new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");


Context ctx = new InitialContext(env);

(以上3句可以这样写,其实这个部分就是启动jndi服务)

System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");

Context ctx = new InitialContext();

---------------------------------------------------------------------------------------------------------------------------------------

接下来

Object obj = ctx.lookup(“C:/aaa.txt”);

File file = (File)obj;

这样也获取了这个文件对像。


jndi配置数据源:
在applicationContext.xml(spring配置文件)文件中:
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/wydb" />

在web.xml文件中:

<resource-ref >
<description></description>
<res-ref-name>jdbc/wydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

在(tomcat)sever.xml中:

<Context docBase="eWeb" path="/neweb" reloadable="true" source="org.eclipse.jst.j2ee.server:eWeb">
<Resource name="jdbc/wydb" auth="Container" type="javax.sql.DataSource" username="EUSER" password="EUSER" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.1.130:1521:devdb" maxActive="8" maxIdle="4" factory="org.apache.commons.dbcp.BasicDataSourceFactory" />
</Context>

个人总结

优点:例如在websphere(类似tomcat)加上数据库连接的配置就更安全
缺点:在开发时不易用此配置方法,在用cvs将程序下载到本地时任然需要配置,繁琐了些;但是在发布的时候可以用。


在java中也可以通过它来获取想要的资源:

public DBConnection() {
try {
Context ctx = new InitialContext();
if (ctx == null) throw new Exception("No Context");
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
if (ds == null) throw new Exception("jdbc/oracle is an unknown DataSource");
conn = ds.getConnection();
stmt = conn.createStatement();
} catch (Exception e) {
System.out.println("naming:" + e.getMessage());
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值