- 浏览: 778783 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (256)
- ssh (18)
- webservice (8)
- java基础 (38)
- j2EE方方面面 (17)
- 随意涂鸭!呵呵 (2)
- 数据库 (22)
- work (10)
- XML与XML解析 (9)
- 测试 (2)
- sso (1)
- ldap (6)
- java 模板技术 (4)
- 版本管理 (1)
- 每日小点滴 (26)
- javascript (26)
- Jakarta Commons (2)
- css (6)
- 设计 (3)
- Eclipse插件开发 (3)
- BAP (3)
- web控件 (2)
- java加密解密 (4)
- 调优 (6)
- 界面技术 (3)
- java多线程 (6)
- 互联网 (2)
- 日志管理 (4)
- java调度 (3)
- rest (0)
- Python (2)
- mobile (2)
- 2016的故事 (4)
- Docker (1)
- NOSQL_Hadoop (0)
最新评论
-
promiseloney:
这个女程序员厉害了。。。
JVM调优:GC 参数 -
zxjlwt:
可以通过WebService上传一个文件吗?素人派http:/ ...
webservice传送XML大小估算 -
liaoshaoyang:
写的不错嘛 可以做参考
权限管理设计一 -
aaaaaaaaabaas:
谢谢,对我有帮助
Apache Commons Configuration使用入门 -
Jack_Wilshere:
com.smartdot.pdm.business.corp. ...
java导出txt
6.1 什么是JNDI
Java命名和目录接口(the Java naming and directory interface,JNDI)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得读者可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
命名或目录服务使读者可以集中存储共有信息,这一点在网络应用中是非常重要的,因为这使得这样的应用更协调、更容易管理。例如,可以将打印机设置存储在目录服务中,以便被与打印机有关的应用使用。
本章将在学习了解JNDI的基本特点后,用代码示例的方式详细讲解JNDI,使读者可以了解和使用JNDI。
6.1 什么是JNDI
在一个企业中,命名服务为读者的应用程序在网络上定位对象提供了一种方法。一个命名服务将对象和名称联系在了一起,并且可以通过它们指定的名称找到相应的对象。
JNDI是Java命名和目录接口,是一个为Java应用程序提供命名服务的应用程序编程接口(API)。它为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似于JDBC都是构建在抽象层上。要使用JNDI,必须要安装jdk 1.3以上版本。
JNDI包含了大量的命名和目录服务,它使用通用接口来访问不同种类的服务,可以同时连接到多个命名或目录服务上并建立起逻辑关联。
6.1.1 命名服务
命名服务是一种服务,它提供了为给定的数据集创建一个标准名字的能力。它允许把名称同Java对象或资源关联起来,而不必指出对象或资源的物理ID。这类似于字典结构(或者是Java的map结构),该结构中键映射到值。例如在Internet上的域名服务(domain naming service,DNS)就是提供将域名映射到IP地址的命名服务,在打开网站时一般都是在浏览器中输入名字,通过DNS找到相应的IP地址,然后打开。
所有的因特网通信都使用TCP、UDP或IP协议。IP地址由4个字节32位二进制数字组成,数字和名字相比,对于人来说名字比数字要容易记忆,但对于计算机来讲,它更善于处理数字。
其实所有的命名服务都提供DNS这种基本功能,即一个系统向命名服务注册,命名服务提供一个值到另一个值的映射。然后,另外一个系统访问命名服务就可以取得映射信息。这种交互关系对分布式企业级应用来讲显得非常重要。
在Java中,基本的名字操作包含在Context接口中。
6.1.2 目录服务
目录服务是一种特殊类型的数据库,与SQL Server、Access、Oracle等关系数据库管理系统相反,构造目录服务的目的是为了处理基于行为的事务,并且使用一种关系信息模型。目录服务将命名服务的概念进一步引申为提供具有层次结构的信息库,这一信息库除了包含一对一的关系外,还有信息的层次结构。对目录服务而言,这种层次结构通常用于优化搜索操作,并且也可以按实际情况进行分布或者跨网络复制。
一个目录服务通常拥有一个名字服务(但是一个名字服务不必具有一个目录服务)。如电话簿就是一个典型的目录服务,一般先在电话簿里找到相关的人名,再找到这个人的电话号码。
每一种目录服务都可以存储有关用户名、用户密码、用户组(如有关访问控制的 信息)、以太网地址、IP地址等信息。它所支持的信息和操作会因为所使用的目录服务的不同而不同。遗憾的是,访问不同目录服务的协议也会不同,所以读者需要了解多 种API。
这就是JNDI的起源,就像JDBC一样,JNDI充当不同名称和目录服务的通用API或者说是前端,然后使用不同的后端适配器来连接实际服务。如图6-1显示了JNDI和LDAP如何共同合作,为客户提供一种完美的解决方案。
在这里,使用JNDI完成与LDAP服务器之间的通信,对开发者来说他们只担心一个特殊协议(LDAP)和一个API(JNDI),而由开发商给他们自己的各个协议提供LDAP接口。事实上对这些流行的目录服务中来说,都有产品可让开发者通过LDAP与这些目录服务通信。
JNDI是J2EE技术中的一个完整的组件。它支持通过一个单一的方法访问不同的、新的和已经存在的服务的方法。这种支持允许任何服务提供商执行通过标准服务提供商接口(SPI)协定插入JNDI框架。另外,JNDI允许Weblogic服务器上的Java应用程序通过插入适当的服务提供者来访问像LDAP这样的标准化方式的外部目录服务。
基本的目录服务操作包含在DirContext接口中。
6.1.3 LDAP的介绍
轻量目录访问协议(lightweight directory access protocol,LDAP)是在20世纪90年代早期作为标准目录协议进行开发的。它是目前最流行的目录协议,与厂商跟平台无关。
LDAP可以追溯到X.500协议,而X.500协议最初是基于OSI网络协议发展起来的。LDAP的第3版协议是在RFC2251中定义的,并且已经非常成熟,它的最新补充部分包含LDAP的XML规范,称为目录服务标记语言。
Java语言通过使用LDAP API,如Netscape Directory 服务器可以直接使用LDAP,或者通过JNDI来使用LDAP。JNDI是J2SE中的标准API,是通用的API,不必绑定到LDAP。
LDAP定义客户应当如何访问服务器中的数据,它并不指定数据应当如何存储在服务器上。大多数情况下,开发者只需要和一个专为LDAP设计的目录服务,或现有目录服务的LDAP前端打交道。LDAP能够成为任何数据存储类型的前端。目前最流行的目录服务有NIS、NDS、Active Directory等都有某种类型的LDAP前端。
LDAP和关系数据库是两种不同层次的概念,后者是存储方式(同一层次如网格数据库,对象数据库),前者是存储模式和访问协议。LDAP是一个比关系数据库抽象层次更高的存储概念,与关系数据库的查询语言SQL属于同一级别。LDAP最基本的形式是一个连接数据库的标准方式,该数据库为读查询作了优化。因此它可以很快地得到查询结果,不过在其他方面,例如更新操作等就慢得多。
从另一个意义上来讲,LDAP是实现了指定的数据结构的存储,它是一种特殊的数据库。但是LDAP和一般的数据库不同,明白这一点是很重要的。LDAP对查询进行了优化,与写性能相比,LDAP的读性能要优秀很多。LDAP服务器也是用来处理查询和更新LDAP目录的。换句话说,LDAP目录也是一种类型的数据库,但不是关系型数据库。要特别注意的是,LDAP通常作为一个hierarchal数据库使用,而不是一个关系数据库。
1.LDAP数据
在LDAP中,数据被组织成一棵树的形式,叫做目录信息树(directory information tree,DIT)。DIT中的第一个“叶子”叫做一个条目(entry),第一个条目叫根条目(root entry)。
一个条目是由一个区分名称DN(distinguished name)和任意一个属性/值对组成。DN是一个条目的名字,它必须是唯一的,它类似于一个关系型数据库的唯一关键字。DN也表明了该条目与DIT树的其他部分之间的关系,它类似于这种方式:一个文件的全路径名表明硬盘上的一个特定文件与系统中的其他文件之间的关系。当从根目录读取文件时,读取系统上的文件路径是从左到右读取的,但是当从根目录读取DN时,是从右到左读DN的。如:
uid = jordan,ou = nba,o = american
表示定义了在组织american中的小组为nba的用户jordan的用户。其中一个DN名的最左边部分叫相对区分名称RDN(relative distinguished name),它由一个条目内的属性/值组成,如前面的uid = jordan是RDN,后面的可有可无。
LDAP通常使用简写形式的助记符表示其名称,常用的LDAP属性及其定义如表6-1所示。
LDAP属性及其定义
LDAP属性
|
定义
|
o
|
Organization:组织
|
ou
|
Organization unit:组织单元
|
续表
LDAP属性
|
定义
|
uid
|
Userid:用户id
|
cn
|
Common name:常见名称
|
sn
|
姓
|
givenname
|
首名
|
dn
|
Distinguished Name:区分名称
|
mail
|
E-mail Address:电子邮件地址
|
其中一个属性可以有一个或多个值,如一个用户可以有多个mail。
2.LDAP的功能
到目前为止,我们已经介绍了LDAP行程注册部分,其实LDAP中还包括很多其他的用途,总的来说LDAP的功能包括远程服务的注册、访问控制、黄页服务器和配置 数据。
(1)远程服务器注册
这是本章中使用LDAP时所涉及的内容,前面已经谈到过该项功能。LDAP允许远程服务器注册其可用性,然后允许客户机获得该注册信息,并且可使用该服务器。在某些情况下(如RMI),这可能意味着将可序列化的对象保存在LDAP中,并且在此后可以检索这些已保存的对象。这类似于rmiregistry的使用方法,但它能搜索LDAP,而rmiregistry却不能,并且当停止并重新启动rmiregistry后,原来注册的对象无效,必须重新注册所有对象。
(2)访问控制
许多企业应用程序都会对访问它们服务的用户进行控制。这可能像Web应用登录页面那样简单,也可能像使用数字签名那样复杂。不论是使用哪种方法,那些待检查的信息总需要保存到某个地方,有一种选择是将这些信息保存到LDAP内。例如,可以将用户保存在LDAP中。
(3)黄页服务器
黄页服务器的作用类似于电话目录,因此称为黄页。它提供信息搜索功能,可以使LDAP根据条目的属性内容进行信息搜索。如对于用户姓名、计算机和打印机等,均可以使用LDAP存储公司内所有员工的这些信息,然后根据名字为某个特定名字的用户以及检索他们的用户ID搜索。
(4)配置数据
LDAP可以充当配置信息的资源中心,这些配置信息在应用程序运行时使用。这类似于在Java应用程序中使用属性文件,但是这并不仅仅是每一个应用程序的属性文件,而是作为一个可用来访问并且还必须进行维护的单一的信息库中心。如一些特定应用程序使用的共享数据库名称可以保存到LDAP中。因此,如果数据库名称发生变更时,对于所有需要迁移到新数据库的应用程序来讲仅仅需要维护一个地方。
3.使用LDAP
为了使用LDAP,需要完成以下4个步骤。
(1)连接到LDAP服务器
要使用LDAP,必须首先获取一个到LDAP的连接。为了完成LDAP的连接,需要知道运行LDAP的主机和要连接的端口,这有点类似于将电话线插到墙壁的电话孔后才能够与别人打电话。
(2)绑定到LDAP服务器
对于LDAP,通常至少有两种方法来绑定(登录)到LDAP服务器,匿名(LDAP3以上版本)或者作为特定用户。绑定有些类似于使用电话公司设置的电话线拨打朋友的电话。匿名登录仅仅能够访问到一些公共数据。如果应用程序作为特定用户登录时,就可以访问公共数据和特定为该用户设置的可访问的所有数据。而为某个用户设置可访问的数据是由LDAP服务器的访问控制列表(access control list,ACL)决定。ACL控制哪个用户能够读、写或者修改该ACL所关联的任何数据。一个条目内的不同属性可以与多个不同的ACL相关联。因此,不同的用户就能够看到不同的数据项,除此之外,某些特定的属性可以与多个ACL相关联,如一个ACL可以向一个用户组提供读的权限,但是另一个ACL可以向另一个用户组提供写的权限。
(3)在LDAP服务器上执行所需的任何操作
这些操作主要包括搜索服务器、增加新条目、修改条目、删除条目等。
(4)释放LDAP服务器的连接
当应用程序连接到LDAP并完成其相关工作后,该应用程序应该关闭连接以释放系统资源。
发表评论
-
tomcat quartz 被触发两次
2013-01-05 17:45 1552tomcat服务器中自启动导致quartz定时被触发两次 ... -
c:forEach 取 map的值
2011-11-15 13:31 3649<c:forEach var=& ... -
servlce与filter的url-pattern介绍
2011-10-14 09:20 1718url-pattern格式: 1、 以”/’开头和以”/*” ... -
Ehcache学习二:Ehcache的配置文件介绍
2011-10-02 16:43 5427<ehcache xmlns:xsi="htt ... -
Ehcache学习一:JDBC caching
2011-10-02 16:20 3884Ehcache很容易加入到已经使用的JDBC代码中,一般在两种 ... -
Ant 扩展(一)
2010-10-18 13:13 6675一、为啥要用Ant-Contrib ? 因为要做一 ... -
JSP页面取当前日期 oracle导入导出 branch与tag
2009-02-19 09:33 1518<%=new java.text.SimpleDateF ... -
J2EE开源项目
2008-06-23 17:02 3971主要就我所了解的J2 ... -
EL表达式
2008-05-14 13:10 5326EL表達式2008-01-16 12:49 一、EL简介 1. ... -
EAI简单介绍
2008-02-27 10:54 1883什么是EAI(enterprise application i ... -
先判断对象是否为NULL再进行操作
2007-12-10 09:14 2421<% Boolean isErr = false ... -
给JSP页面加过滤器
2007-12-10 09:09 3696很简单的一个功能,如果用户没有登录之前访问其他页面时转到登录页 ... -
《精通J2EE网络编程》中讲的JNDI 6.3总结
2007-11-28 16:30 14116.3 小结 JNDI(命名和目录接口)是一个为Java应用 ... -
《精通J2EE网络编程》中讲的JNDI 6.2 使用JNDI
2007-11-28 16:24 15956.2 使用JNDI 6.2.1 JNDI服务提供者 不使 ... -
jndi
2007-11-28 15:43 1570JNDI是J2EE中一个很重要的标准,通常我们是在J2EE编程 ... -
j2ee 介绍
2007-11-28 10:40 1797J2EE Java2平台企业版(Jav ...
相关推荐
**J2EE开发编程规范** **1. 前言** J2EE(Java 2 Platform, Enterprise Edition)是Java平台为企业级应用提供的一种标准框架,它为开发可部署在分布式环境中的多层应用程序提供了全面的平台支持。为了保证代码的...
3.什么是J2EE集群? 4.WEB层集群实现8 4.1.WEB层负载均衡 4.2.HTTP会话的失败转移 4.2.1.数据库持久方案 4.2.2.内存复制方案 4.2.3.Tomcat的方案:多服务器复制 4.2.4.WebLogic, WebSphere, JBoss的方案:结对...
什么是J2EE集群? J2EE集群是一种技术,它通过将多个J2EE服务器实例组织在一起,共同为用户提供服务来实现高可用性和可扩展性。在一个典型的J2EE集群中,每个服务器实例都运行着相同的软件配置,并且共享数据存储...
什么是J2EE集群? J2EE集群是一组相互协作的服务器节点集合,它们共享相同的配置和状态,并且能够作为一个整体对外提供服务。在集群中,每个节点都是独立的,但又通过特定的通信协议协同工作,以实现高可用性、...
**3.1 什么是J2EE集群** - **定义**:J2EE集群是指由多台物理服务器组成的集群,它们通过特定的技术手段协同工作,对外提供统一的服务接口,以实现高可用性、可扩展性和容错性。 - **核心价值**:J2EE集群通过负载...
- **5.1.1 什么是JSP?**:JSP是Java Server Pages的缩写,是一种动态网页技术标准,用于生成动态HTML内容。 - **5.1.2 第一个JSP**:创建一个简单的JSP文件,使用`<% %>`嵌入Java代码。 - **5.1.3 JSP的优点**:...
这个版本在当时是颇受欢迎的企业级应用服务器,尤其在处理J2EE(Java 2 Platform, Enterprise Edition)应用程序方面。以下是关于WebSphere 6.1安装、配置及其相关知识点的详细说明: 1. **安装过程**: - 首先,...
介绍JNDI中常用的类和接口,如`javax.naming.Context`等。 **10.3 JNDI数据源** JNDI数据源是通过JNDI访问数据库的一种方式。 **10.4 配置Tomcat的JNDI数据源** 详细介绍如何在Tomcat服务器中配置JNDI数据源。 ...
第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...
6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...
80 5.6.9 config对象 80 5.7 JSP自定义标签 81 5.8 小结 84 第6章 XML、CSS和XSLT 85 6.1 XML 85 6.1.1 什么是XML 85 6.1.2 XML的产生 85 6.1.3 XML的用途 86 6.1.4 XML元素 87 6.1.5 XML属性 87 6.1.6 XML语法规则 ...
这是个小型的系统,从投入的人力,财力与物力来讲是非常小的,发布出去之需要注册域名就可以了,从节省人力方面,可以让管理人员从繁与复杂的工作中解脱出来,做更多的工作。 2.2.3. 管理可行性 有IP地址、用户名...
1.1 什么是JavaBeans 1.2 JSP 中如何使用JavaBeans 1.3 JavaBeans 的Scope 属性 1.4 JavaBeans 应用实例 1.5 本章小结 第2 章 Enterprise JavaBeans 2.1 EJB 技术简介 2.2 EJB 体系结构(一) 2.3 EJB 体系结构(二) ...
6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...
配置完成后,应用程序可以通过编程方式(如Spring框架中的JdbcTemplate)或JNDI查找来获取并使用这些数据源,实现与数据库的连接。 总结,配置Data Source是J2EE应用程序部署的关键步骤,尤其是在Websphere和Tomcat...
6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...
4.1 什么是JDBC 4.2 两层和三层模型 4.2.1 两层模型 4.2.2 三层模型 4.3 SQL的一致性 4.4 JDBC兼容性 4.5 JDBC如何工作 4.5.1 DriverManager 4.5.2 JDBC DataSource 4.5.3 DataSource对象和JNDI 4.5.4 ...