java JNDI 接口介绍
参考: https://yangzb.iteye.com/blog/242560
参考:http://www.cnblogs.com/xx0405/p/5332198.html
毕竟是古老的技术了,现在搜索百度只能看到一堆文字解释看的迷迷糊糊的
找到一篇有实例介绍的,接着解析看看
-
介绍:
Java目前本身提供了接口,没有提供对应的实现,因此要想测试这个,最好在j2ee容器下实现,这些容器一般都自带了jndi 的实现. jndi 主要是通过lookup(“name”)来获得对应命名的对象,这里也主要展示bind 和 lookup 的一个简单测试正如原文作者所说,大多数的实现,都类似一个hash表,根据hash进行存储,key-value结构
-
注意:
如果使用bind方法,重复绑定会抛异常,javax.naming.NameAlreadyBoundException: Name [test] is already bound in this Context org.apache.naming.NamingContext.bind(NamingContext.java:913) org.apache.naming.NamingContext.bind(NamingContext.java:192) org.apache.naming.NamingContext.bind(NamingContext.java:209) org.apache.naming.SelectorContext.bind(SelectorContext.java:201) javax.naming.InitialContext.bind(InitialContext.java:425) com.controller.TestJNDIController.bind(TestJNDIController.java:24)
-
代码如下:
package com.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; /** * 测试java 的 jndi 服务 * 使用的是 tomcat 的实现版本,因为使用的是tomcat 作为容器 */ @Controller @RequestMapping("jndi") public class TestJNDIController { /** * 向目录接口存对象 */ @RequestMapping("bind") public String bind(@RequestParam String type) throws NamingException { Context context = new InitialContext(); String name = "type"; // context.bind(name,type); //bind 方法如果重复绑定会抛异常 context.rebind(name,type); return "../index"; } /** * 从目录服务接口 查找值,更加name 属性 */ @RequestMapping("lookup") public String lookup(Model model) throws NamingException { Context context = new InitialContext(); String test = context.lookup("type").toString(); model.addAttribute("type",test); return "../index"; } }
-
至于这个jsp 就是一个很简单的视图, 直接放在 WEBROOT 目录下,直接用el表达式获得model的属性值,由于 makedown编辑器下无法展示html元素,
" 测试值为 ${type}"