java web jndi_WEB中JNDI详解

JNDI详解

JNDI(Java Naming and Directory Interface, Java命名和目录接口),说白了,就是通过配置一些xml文件,方便用户直接调用API使用某些通用的资源。

举个简单的例子,如果在tomcat中部署了很多应用,应用都需要使用同一个数据库,如果每个应用都在代码中配置数据库的连接,肯定是很麻烦的。

所以通过JNDI就可以简单的通过 InitialContext 获取到统一配置的资源,简化代码的编写。

64fa39532cb039dffc97e8ccf373abc4.png

配置

这里说明的内容,不是每次编码必须的步骤,只是先说明一下都有哪些地方涉及到配置。

web.xml

这部分内容配置资源引用,举个例子:

48304ba5e6f9fe08f3fa1abda7d326ab.png

资源配置说明

bean/MyBeanFactory

com.mycompany.MyBean

48304ba5e6f9fe08f3fa1abda7d326ab.png

在web.xml中可以配置三种形式的资源:

用于配置一些应用程序的变量,比如参考 tomcat下部署solr。

资源引用,通常是一个对象工厂资源,比如典型的JDBC数据源。

资源环境引用,他是servlet2.4中新引入的特性,在resource-ref的基础上,可以更简单方便的配置信息而不用经过身份验证,比如简单的javabean。

context.xml

这部分定义其引用的资源工厂以及一些必要的额外信息,比如:

48304ba5e6f9fe08f3fa1abda7d326ab.png

...

...

48304ba5e6f9fe08f3fa1abda7d326ab.png

这里需要注意的是,标签有三种配置位置:

1 在conf/server.xml中;

2 在conf/context.xml中;

3 在/webapps/xxx/WEB-INF/context.xml;

这三种的区别是,server.xml与context.xml类似都是所有应用通用的,但是context.xml只是把它分离出来单独形成了一个文件而已。在WEB-INF/下的context.xml则是应用自己的,所以如果不想把某些信息公开,放在这里就可以了。

在中可以配置如下的标签:

配置一些键值对变量,类似于

配置一些资源的类型和变量信息,类似于

 指定资源链接到全局上下文中的配置,比如在server.xml中配置了全局的一个标签,这里可以直接引入该标签名字。

添加工厂资源实例

server.xml

这个文件中可以配置标签,前面说过了;还可以配置全局JNDI资源,比如默认的tomcat就配置了一个userdatabase的资源

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

它就是一个全局的配置。

使用

配置好相应的xml文件,就可以在代码中直接通过创建Context实例,例如在配置数据源中:

48304ba5e6f9fe08f3fa1abda7d326ab.png

Context initCtx = newInitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

//上面写法都是不变的,下面这行中lookup中的字符串就是配置的JNDI名称,

//比如context中的或者web.xml中的

DataSource ds = (DataSource)envCtx.lookup("jdbc/EmployeeDB");

Connection conn =ds.getConnection();

... use thisconnection to access the database ...

conn.close();

48304ba5e6f9fe08f3fa1abda7d326ab.png

最后参考几个样例,了解一下编码细节。

1 通用JavaBean资源

首先,创建自己的javabean,并配置其构造方法设置初始化值。

8f900a89c6347c561fdf2122f13be562.png View Code

然后,配置web.xml中资源引用

8f900a89c6347c561fdf2122f13be562.png View Code

接下来,在tomcat  conf/context.xml中配置工厂资源引用,并设置初始化的值

8f900a89c6347c561fdf2122f13be562.png View Code

最后在JSP中调用lookup方法,获得实例。

8f900a89c6347c561fdf2122f13be562.png View Code

由于foo没有在标签中设置值,因此读取的还是默认的值,而bar则为设置的值。

2 Userdatabase使用

userdatabase即用户数据库,主要用于配置用户信息,以供某些应用进行授权验证。

关于其他的配置比如web.xml的Realm配置这里就不多说了,看看server.xml中如何设置全局资源引用:

48304ba5e6f9fe08f3fa1abda7d326ab.png

...

...

...

48304ba5e6f9fe08f3fa1abda7d326ab.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值