四、JNDI

知识概括

   1.JNDI(容器:Tomcat,Window)

              <1>.Java Naming and Directory Interface ,Java命名和目录接口
              <2>.是一组在Java应用中访问命名和目录服务的API
              <3>.通过名称将资源与服务进行关联

   2.Tomcat JNDI

              配置及使用(将对象写入到Tomcat JNDI)
              参考 Tomcat文档学习

   3.Window JNDI

             <1>.获取Window某个目录下所有的文件  context.list("");
             <2>.读取某一个文件  context.lookup("fileName");

   4.自定义JNDI

             <1>.将对象写入到自定义的JNDI中  context.bind();
             <2>.在自定义的JNDI中,删除某一个对象  context.unbind();
             <3>.从自定义的JNDI中获取某一个对象  context.lookup();
             <4>.从自定义的JNDI中获取所有对象 context.list();


下面来举几个例子

  1.首先把你的apache-tomcat的bin目录下面的startup.bat启动起来

  2.再在浏览器中运行http://localhost:8080

  3.接下来查看官方文档,如下图

4.然后就可以在MyEclipse里面写代码了

  

  以前的做法





JNDI做法如下:


a.Tomcat JNDI (注:xml最好改为UTF-8,不写中文注释,这样就不容易报错)

 


        

          再写java代码


    最后,运行


   运行结果


b.Window JNDI

     

windows中的一个工厂

运行


package com.zking.test;

import java.io.BufferedReader;
import java.io.File;
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.执行目录(细节:C:\\Windows加协议 file:///)
   		      environment.put(Context.PROVIDER_URL, "file:///C:\\Windows");
   		      //获取某个文件夹下所有的文件和文件夹
   		      try {
   			       Context context=new InitialContext(environment);//导了两个包之后Ctrl+1(即create local var....)
//	   		       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

运行

package com.zking.test;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;

import com.zking.entity.Person;

public class TestDIY {
	public static void main(String[] args) {
		   Hashtable<String,String> environment=new Hashtable<String, String>();
		   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, "admin", 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 (NamingException e) {
				e.printStackTrace();
		   }
		   
		   
		   
	}
}





欢迎大家来指出我的不足之处。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值