- 浏览: 123911 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
hanyuanbo:
多谢啦不过你这里有关于字符串的连接机制么?比如:String ...
栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴) -
only_java:
不错不错,但是好像没有关于字符流的介绍哦?
[转]Java IO 技术之基本流类 ~~~~~~~~ (图+讲解+代码) 好好看 有好处 -
lvwz2008:
比较简单,学习了也受益不少!
栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴) -
306781704:
看了你写的东西,很不错,基础的很详细
META元素使用详解 -
yihengliu:
总结的完全,有大帮助!
JSP内置对象详解1
JNDI 的DNS 服务提供程序
DNS服务提供程序使得基于JNDI的应用程序能够访问存储在DNS中的信息。DNS服务提供程序将DNS命名空间呈现为JNDI 目录上下文的一棵树,而将DNS 资源记录呈现为JNDI 属性。
示例代码 4 演示了如何使用DNS 服务提供程序检索环境和IP地址(A记录)的信息。
示例代码 4: TestDNS.java
import javax.naming.*; import com.sun.jndi.dns.*; import java.util.Hashtable; public class TestDNS { public static void main(String[] argv) { Name cn = null; String name = argv[0]; Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory"); env.put(Context.PROVIDER_URL, "dns://IP for DNS Server/"); try { // Create the initial context Context ctx = new InitialContext(env); // print the fully qualified name (.) System.out.println("Name in namespace: "+ctx.getNameInNamespace()); // retrieve the parser associated with the named context NameParser np = ctx.getNameParser(ctx.getNameInNamespace()); if (argv.length != 1) { System.out.println("Usage: java TestDNS "); System.exit(-1); } // parse the name into its components and print them cn = np.parse(name); System.out.println("Name is: "+cn.toString()); System.out.println("The parsed name has "+cn.size()+" components:"); for (int i=0; i<cn.size(); i++){ System.out.println(cn.get(i)); } System.out.print("Trying to lookup "); // get the prefix (domain) and suffix (hostname) Name domain = cn.getPrefix(cn.size()-1); Name host = cn.getSuffix(cn.size()-1); System.out.println("DNS Host: "+host+" Domain: "+domain); // retrieve the named object Object obj = ctx.lookup(domain); System.out.println(domain.toString()+" is bound to: "+obj); // retrieve and print the environment in effect System.out.println("Domain properties: "+ ((Context)obj).getEnvironment()); // retrieve and print the IP address (the DNS A records) System.out.println("IP for: "+cn+ " is: "+ ((DnsContext)obj).getAttributes(host, new String[]{"A"})); // we're done so close the context ctx.close(); } catch (NamingException e) { System.err.println("Problem looking up " + cn + ": " + e); } } } |
在您运行这个应用程序之前,确保您指定了DNS服务器的IP地址。
下面是一次示范运行:
prompt> java TestDNS prep.ai.mit.edu Name in namespace: . Name is: prep.ai.mit.edu The parsed name has 4 components: edu mit ai prep Trying to lookup DNS Host: prep Domain: ai.mit.edu ai.mit.edu is bound to: com.sun.jndi.dns.DnsContext@b89838 Domain properties: {java.naming.provider.url=dns://IP for DNS Server/, java.namin g.factory.initial=com.sun.jndi.dns.DnsContextFactory} IP for: prep.ai.mit.edu is: {a=A: 199.232.41.9} |
JNDI 和J2EE
JNDI 是J2EE平台的标准服务API之一。包含它的目的是为应用程序组件提供一个标准的API,用于引用资源和其他应用程序组件。J2EE还定义了一种标准的命名策略(逻辑和真实的名称),以和 JNDI一起使用,这样就可以采用一种与部署环境无关的方式编写应用程序。您可以引用 J2EE服务,具体方法是根据其逻辑名称在目录中查找它们。为了实现这一点,每个符合 J2EE规范的系统均提供了一个称为环境的JNDI 服务,该环境包括:
- 环境变量
- EJB 引用
- 资源工厂引用
注意:在这里,我只讨论环境变量。想要了解EJB引用和资源工厂引用方面的更多信息,请参见这篇文章 。
环境变量
应用程序组件的命名环境允许您定制应用程序组件,而不需要访问或修改组件的源代码。每个应用程序组件定义它自己的环境入口的集合。同一个容器中,一个应用程序组件的所有实例共享同一个入口。注意,不允许应用程序组件实例在运行时修改环境。
声明环境变量
应用程序组件提供程序必须声明从应用程序的组件代码访问的所有环境入口。它们是在部署描述器(例如Tomcat中的web.xml)中通过使用<env-entry> 标签来声明的. <env-entry> 标签的元素有:
- <description>:环境入口的可选描述。
- <env-entry-name>: 环境入口名。
- <env-entry-type>:期望的环境变量类型。它可以是以下 Java 类型之一: Boolean、Byte、 Double、Character、 Float、 Integer、 Long、Short、String 。
- <env-entry-value>: 必须匹配所提供类型的环境入口值。
- <env-entry-type>. 这个值可以稍后改变,但是如果它没有被设定,那么在部署期间必须为它指定一个值。
示例代码 5中的例子给出了两个环境入口的声明。要为一个新环境指定一个声明,您只要把它添加给您的web应用程序描述器 (web.xml) 即可。
示例代码 5: 声明环境变量
<env-entry> <description>welcome message</description> <env-entry-name>greetings</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>Welcome to the Inventory Control System</env-entry-value> </env-entry> <env-entry> <description>maximum number of products</descriptor> <env-entry-name>inventory/max</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>27</env-entry-value> </env-entry> |
每个<env-entry>标签描述一个环境入口。所以在这个例子中,定义了两个环境入口。第一个叫做greetings, 是 String 类型,初始的默认值为: Welcome to the Inventory Control System。第二个入口叫做 inventory/max,是 Integer类型,初始的默认值为 27。
现在,应用程序组件实例可以使用JNDI定位环境入口. 它使用不带参数的构造器创建了一个javax.naming.InitialContext 对象。接着,它通过InitialContext查找命名环境,所使用的是以java:comp/env打头的JNDI URL。示例代码 6 说明了一个应用程序组件如何访问它的环境入口。
示例代码 6: 访问环境入口
// obtain the application component's environment // naming context javax.naming.Context ctx = new javax.naming.InitialContext(); javax.naming.Context env = ctx.lookup("java:comp/env"); // obtain the greetings message //configured by the deployer String str = (String) env.lookup("greetings"); // use the greetings message System.out.println(greetings); // obtain the maximum number of products //configured by the deployer Integer maximum = (Integer) env.lookup( "inventory/max"); //use the entry to customize business logic |
注意,应用程序组件还可以使用如下的完整路径名查找环境入口:
javax.naming.Context ctx = new javax.naming.InitialContext(); String str = (String) ctx.lookup( "java:comp/env/greetings"); |
这段代码片断可以用在一个 JSP 页面中,如 示例代码 7所示:
示例代码 7: 从一个 JSP页面访问环境入口
<HTML> <HEAD> <TITLE>JSP Example</TITLE> </HEAD> <BODY BGCOLOR="#ffffcc"> <CENTER> <H2>Inventory System</H2> <% javax.naming.Context ctx = new javax.naming.InitialContext(); javax.naming.Context myenv = (javax.naming.Context) t.lookup("java:comp/env"); java.lang.String s = (java.lang.String) myenv.lookup("greetings"); out.println("The value is: "+greetings); %> </CENTER> </BODY> </HTML> |
结束语
JNDI是使用命名/目录服务增强您的网络应用程序的一组 API。本文通篇给出的例子演示了,开始使用JNDI开发基于目录的应用程序是一件多么简单的事情。这些例子还演示了 如何使用相同的API访问不同的命名/目录服务。开发人员不必学习不同的 API。在某些情况下,比如在 RMI 和 CORBA应用程序中, JNDI 允许您将命名服务的选择延至部署阶段。
对JNDI 未来的期望有: 与标准的Java SASL API (JSR-28)结合,支持国际化的域名,而且支持安全的 DNS 。
要开始学习和使用JNDI 和 LDAP,下载Sun ONE Directory Server的试用版,它可以用于各种平台和各种语言。
更多信息
LDAP v3
JNDI
The JNDI Tutorial
JNDI Service Providers
Sun ONE Directory Server
JNDI-INTEREST Mailing List (for discussing JNDI)
发表评论
-
中文乱码问题的解决方法
2007-11-05 22:46 2001tomcat下中文的彻底解决[转] http://blog ... -
候捷谈Java反射机制(6)
2007-11-05 22:44 1411Java 源码改动办法<o:p></o:p ... -
候捷谈Java反射机制(5)
2007-11-05 22:43 1051运行时生成instances<o:p></o ... -
候捷谈Java反射机制(4)
2007-11-05 22:42 1042#001 cc = c.getDeclaredClasses ... -
候捷谈Java反射机制(3)
2007-11-05 22:40 1045Java Reflection API 运用示例<o: ... -
候捷谈Java反射机制(2)
2007-11-05 22:39 976Java classes 组成分析<o:p>&l ... -
候捷谈Java反射机制(1)
2007-11-05 22:28 1571关于本文:<o:p></o:p> 读者 ... -
J2SE API读取Properties文件六种方法
2007-11-05 22:23 9841。使用java.util.Properti ... -
Java 调用存储过程
2007-11-05 22:21 847本文阐述了怎 ... -
JavaMail API细节详细解析大全
2007-11-05 22:16 1062一、JavaMail API简介 JavaMail API ... -
JAVA中正则表达式应用
2007-11-05 22:12 7861.简介: java.util.regex ... -
Java正则表达式详解
2007-11-05 22:08 753如果你曾经用过Perl或任何其他内建正则表达 ... -
JDBC 4.0 API
2007-11-05 21:55 950???? -
JDBC 3.0 API (扩展部分)
2007-11-05 21:54 1148Ø ConnectionPoo ... -
JDBC 2.0 API
2007-11-05 17:19 932JDBC 2.0 API被划 ... -
开发基于JNDI的应用程序2
2007-11-05 16:14 1291示例代码 2 Resolve2.java ... -
开发基于JNDI的应用程序1
2007-11-05 16:06 1012Java命名和目录接口(Java Naming and ... -
struts+spring+hibernate的web应用(4.6)
2007-10-25 11:35 900product_success.jsp页面代码: ... -
struts+spring+hibernate的web应用(4.5)
2007-10-25 11:32 1056addproduct.jsp页面代码: &l ... -
struts+spring+hibernate的web应用(4.4)
2007-10-25 11:11 971接着就是写资源文件了。 在com.game.resource ...
相关推荐
2022年基于JNDI的应用程序开发Java教程.docx
JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务...
基于JNDI的应用程序开发 在以TOMCAT为WEB服务器的项目中,用JNDI建立数据库连接池实例.
中文名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 原名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 作者: 李刚 资源格式: PDF 版本: 第一版 出版社: 电子...
141 9.1.2 JSF应用程序配置 142 9.2 一个简单的JSF应用 142 9.2.1 JSF应用程序开发步骤 143 9.2.2 用户登录实例 143 9.3 JSF应用程序架构 147 9.3.1 JSF请求处理生命周期 147 9.3.2 JSF事件驱动模型 148 9.3.3 JSF...
13.6.4 Web应用程序中调度器的启动和关闭问题 13.7 小结 第14章 使用OXM进行对象XML映射 14.1 认识XML解析技术 14.1.1 什么是XML 14.1.2 XML的处理技术 14.2 XML处理利器:XStream 14.2.1 XStream概述 14.2.2 快速...
13.6.4 Web应用程序中调度器的启动和关闭问题 13.7 小结 第14章 使用OXM进行对象XML映射 14.1 认识XML解析技术 14.1.1 什么是XML 14.1.2 XML的处理技术 14.2 XML处理利器:XStream 14.2.1 XStream概述 14.2.2 快速...
《深入掌握J2EE编程技术》全面深入地介绍了当今最热闹的编程技术——J2EE平台开发技术,该技术主要用于开发基于Internet的多层结构应用程序。《深入掌握J2EE编程技术》全面介绍了JSP层,EJB层和EIS层的设计思想与...
197 实例67 实现C/S多线程 198 实例68 客户端程序 200 实例69 服务器端程序 201 实例70 C/S结构聊天室 203 实例71 基于C/S的小游戏 209 实例72 应用C/S数据库 237 实例73 实现客户端程序 ...
不过,针对 Java EE 开发的服务器端应用,可以通过集成 BlazeDS,充分利用 AMF 协议并能轻易与 Flex 前端交换数据,这种方式是 Java EE 应用程序集成 Flex 的首选。 BlazeDS 是 Adobe LifeCycle Data Services 的...
不过,针对 Java EE 开发的服务器端应用,可以通过集成 BlazeDS,充分利用 AMF 协议并能轻易与 Flex 前端交换数据,这种方式是 Java EE 应用程序集成 Flex 的首选。 BlazeDS 是 Adobe LifeCycle Data Services 的...
是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置. 主要由以下几个模块组成...
J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持。在本文中将解释支撑J2EE的13种核心技术:JDBC,JNDI,EJBs,RMI,JSP,Javaservlets,XML,JMS,JavaIDL, JTS,...
J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持。 在本文中我将解释支撑J2EE的13种核心技术:JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML,...
1、 Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Servlet,JSP和custom tag library构建Web应用的一项非常有用的技术。由于Struts能充分满足应用开发...
本书全面深入地介绍了当今最热门的编程技术———J2EE平台开发技术,该技术主要用于开发基于Internet的多层结构应用程序。本书全面介绍了JSP层,EJB层和EIS层的设计思想与编程技术,涉及的内容包括:JDBC,JNDI,...
本书全面深入地介绍了当今最热门的编程技术———J2EE平台开发技术,该技术主要用于开发基于Internet的多层结构应用程序。本书全面介绍了JSP层,EJB层和EIS层的设计思想与编程技术,涉及的内容包括:JDBC,JNDI,...
3、Java RMI(Java Remote Method Invocation)用来开发分布式Java应用程序。一个Java对象的方法能被远程Java虚拟机调用。这样,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要双方的应用...