知识概括
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();
}
}
}
欢迎大家来指出我的不足之处。