java EE开发之Servlet第七课:JNDI
来源:互联网 发布:乔任梁网络暴力图片 编辑:程序博客网 时间:2024/05/24 06:15
1 , 什么是JNDI?
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口。
官方的定义似乎很让人费解,本人的jndi的理解是:jndi相当于一个目录,可以通过目录可以找到相应的资源,那么通俗的讲就是一份菜单,通过报菜名能够得到要点的菜
2,JNDI怎么玩
1) 自作一份jndi目录
//放目录的那张菜单纸Properties ps= new Properties();//建一个生成菜单的工厂类ps.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");//生成一份菜单Context context = new InitialContext(ps);//添加菜名context.bind("一号菜", "红烧鱼");//遍历所有的菜名NamingEnumeration ne = context.list("");while(ne.hasMore()){ System.out.println(ne.next());}//点菜Object o1 = context.lookup("一号菜");//移除context.unbind("一号菜");
2) 得到window目录
Properties ps=new Properties();//专门针对于微软的目录生产工厂而言的ps.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.FSContextFactory");Context context = new InitialContext(ps);//列出当前这个类的根目录下的目录和文件名NamingEnumeration ne = context.list("");while(ne.hasMore()){ Object o = ne.next(); System.out.println(o);}//根据目录名得到文件File f = (File)context.lookup("teas.xml");FileReader fr = new FileReader(f);BufferedReader br = new BufferedReader(fr); String str = br.readLine();while(str!=null){ System.out.println(str); str = br.readLine();} br.close();fr.close();
3) 绑定一个javaBean:
(1)写一个类,将这个类打包,放入到Tomcat 5.5\common\lib下。
(2)配置conf目录下的context.xml文件
<Resource name="bean/man" auth="Container" type="com.accp.Man" factory="org.apache.naming.factory.BeanFactory" uname="abc" age="15"/>
(3)配置web应用目录WEB-INF/web.xml文件。
<resource-env-ref> <resource-env-ref-name>bean/man</resource-env-ref-name> <resource-env-ref-type>com.kz.Man</resource-env-ref-type></resource-env-ref>
(4)开始使用这个共享的资源
Context initCtx = new InitialContext();Context envCtx = (Context) initCtx.lookup("java:comp/env");Object bean = envCtx.lookup("bean/man");out.println(bean);
5)绑定一个数据源:
(1)把驱动包放入到Tomcat 5.5\common\lib下。
(2)配置conf目录下的context.xml文件
<Resource name="sql2005" auth="Container" type="javax.sql.DataSource" username="sa" password="123" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;databasename=test" maxActive="8" maxIdle="4"/>
说明:
|- name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,为了不与其他的名称混淆,所以使用jdbc/oracle,现在配置的是一个jdbc的关于oracle的命名服务。
|- auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
|- type:此名称所代表的类型,现在为javax.sql.DataSource
|- maxActive:表示一个数据库在此服务器上所能打开的最大连接数
|- maxIdle:表示一个数据库在此服务器上维持的最小连接数
|- maxWait:最大等待时间。10000毫秒
|- username:数据库连接的用户名
|- password:数据库连接的密码
|- driverClassName:数据库连接的驱动程序
|- url:数据库连接的地址
(3)配置web应用目录WEB-INF/web.xml文件。
<resource-ref> <res-ref-name>sql2005</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth></resource-ref>
(4)开始使用这个共享的资源
Context initCtx = new InitialContext();Context envCtx = (Context) initCtx.lookup("java:comp/env");DataSource ds = (DataSource)envCtx.lookup("sql2005");Connection conn = ds.getConnection();out.println(conn);conn.close();//关键 这个关闭不是真的关闭 是放回连接池
原理图
补充:测试100次使用普通方式和连接池方式得到Connection对像
1.普通方式(略)
2.连接池方式(导入commons-collections-2.1.1.jar , commons-dbcp.jar , commons-pool.jar)
BasicDataSource bds = new BasicDataSource(); bds.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); bds.setUrl("jdbc:sqlserver://localhost:1433;databasename=data"); bds.setUsername("sa"); bds.setPassword("123456"); bds.setMaxActive(200); bds.setInitialSize(2); Connection conn = bds.getConnection(); Conn.close()//不是真正的关闭,只是重新放回连接池
- java EE开发之Servlet第七课:JNDI
- java EE开发之Servlet第一课
- java EE开发之Servlet第三课:过滤器(Filter)
- java EE开发之Servlet第四课:监听器(Listener)
- java EE开发之Servlet第五课:xml解析
- java EE开发之Servlet第六课:神奇的Ajax
- java EE开发之Servlet第十一课:反射基础三
- java EE开发之Servlet第十四课:自定义注解Annotation
- java ee 之 servlet
- java EE开发之Servlet第二课:Servlet的三个hashMap
- Java EE之Servlet技术
- Java EE之Servlet技术
- java EE开发之Servlet第十二课:简单自定标签
- java EE开发之Servlet第十三课:复杂自定标签
- Java EE开发第七章:JDBC开发之C3P0连接池的使用(常用)
- Java EE之Servlet、JSP学习
- Java EE — Servlet 01 Servlet 开发流程
- JAVA EE Servlet监听器
- 数据结构相关概念
- 列表分页查询的实现jquery 和Ajax的联合使用 HTML页面
- RecycleView自定义ItemDecoration,实现时间轴效果
- mysql数据库分表及实现
- 2017-09-21 14:45:00.022 ERROR [http-nio-8091-exec-8](ErrorPageFilter.java:209)
- java EE开发之Servlet第七课:JNDI
- MaxCompute 2.0—从ODPS到MaxCompute
- jq中事件重复问题
- 学习进度
- iOS 【自适应长度标题栏-类似于滴滴打车】
- Spring事务管理
- mac安装go环境
- 中断线程化的意义和如何注册一个有中断线程化的irq
- C++ / Opencv 学习笔记 (Vector用法 )