- 浏览: 778776 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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.2.1 JNDI服务提供者
不使用服务提供者就不能用JNDI。一个服务提供者就是一组Java类的集合,它支持开发者同目录服务进行通信,其方式类似于JDBC驱动程序与数据库之间的通信方式。能够用于JNDI的服务提供者必须实现Context接口或Context的扩展接口Directory- Context。
在使用JNDI时,读者只需要了解JNDI,而服务提供者才关注实际的网络协议、编码/解码值等细节。
当下载SDK软件开发包时,同时就下载了Sun公司的一些现有的服务提供者。这些服务提供者包括LDAP、NIS、COS(CORBA对象服务)、RMI注册及文件系统的提供者。如:hashtableObj.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.ldapCtx- Fatory")就是表示使用Sun LDAP服务提供者。当然如果要使用IBM服务提供者时就可以用com.ibm.jndi.LDAPCtxFatory来代替com.sun.jndi.ldap.ldapCtxFatory。
6.2.2 JNDI的包
JNDI中包括5个包。
· javax.naming:主要用于命名操作,它包含了命名服务的类和接口,该包定义了Context接口和InitialContext类;
· javax.naming.directory:主要用于目录操作,它定义了DirContext接口和InitialDir- Context类;
· javax.naming.event:在命名目录服务器中请求事件通知;
· javax.naming.ldap:提供LDAP支持;
· javax.naming.spi:允许动态插入不同实现,为不同命名目录服务供应商的开发人员提供开发和实现的途径,以便应用程序通过JNDI可以访问相关服务。
6.2.3 常用的JNDI操作
常用的JNDI操作如下:
· void bind(String sName,Object object),绑定:把名称同对象关联的过程。
· void rebind(String sName,Object object),重新绑定:用来把对象同一个已经存在的名称重新绑定。一般使用rebind()而不使用bind(),因为当有重名的时候rebind()不会出现异常,而bind()会报异常。
· void unbind(String sName),释放:用来把对象从目录中释放出来。
· void lookup(String sName,Object object),查找:返回目录总的一个对象。
· void rename(String sOldName,String sNewName),重命名:用来修改对象名称绑定的名称。
· NamingEnumeration listBindings(String sName),清单:返回绑定在特定上下文中指定属性名对象的清单列表,它返回名字、类和对象本身,它用于那些需要对对象进行实际操作的应用。具体使用如下:
- //得到初始目录环境的一个引用
- Context cntxt = new InitialContext();
- //返回绑定在特定上下文中指定属性名对象的清单列表
- NamingEnumeration namEnumList = ctxt.listBinding("cntxtName");
- //循环列出所有名字、类和对象
- while ( namEnumList.hasMore() ) {
- Binding bnd = (Binding) namEnumList.next();
- String sObjName = bnd.getName();
- String sClassName = bnd.getClassName();
- //得到对象
- SomeObject objLocal = (SomeObject) bnd.getObject();
- }
· NamingEnumeration list(String sName)与listBindings(String sName)相似,只是它只返回一系列名字/类映射,它主要是用于上下文浏览应用。
6.2.4 JNDI操作步骤
使用JNDI来访问命名服务或者目录服务,操作步骤如下:
(1)建立一个散列表(hashtable),它包含定义所希望使用的JNDI服务的属性,所希望连接的LDAP服务器IP地址以及工作的端口。
(2)将与认证成为用户登录有关的任何信息添加到散列表中。
(3)创建初始context对象。如果访问命名服务,则使用InitialContext类,如果访问目录服务,则要使用InitialDirContext类。
(4)使用刚才得到的context对象执行所需的操作(如添加新的条目或者搜索条目)。
(5)完成操作后关闭context对象。
6.2.5 JNDI允许存储的对象类型
JNDI最大的功能是能使用LDAP来存储需要在不同应用之间共享或者留做备用的对象。JNDI允许将下面几种与Java相关的对象类型存储到LDAP服务器内。
(1)串行化的Java对象。这是存储和取回已经串行化的Java对象的能力。也就是 说要存储的Java对象必须要实现Referenceable或Serializable接口类,否则该对象不能存储。
(2)标准的LDAP目录条目。它提供了操作标准目录数据的能力。标准目录数据的数据量比较小,可以在不同的语言之间共享它们。保持目录数据与编程语言的无关性对于要使用几种不同语言进行开发的大企业里是非常重要的。
(3)指向RMI Java对象的指针。RMI是用于分布式计算的,通过RMI,一个Java应用可以像本地一样调用一个远程类的方法。我们可以把一个可用的RMI类的引用存储在开发者的LDAP服务器中,而不必在每个装有RMI客户应用的计算机上都保持可用方法的注册。
6.2.6 JNDI存储查询串行化的Java对象
JNDI的主要目标是在网络上读/写Java对象。下面用具体实例来了解怎么使用JNDI。首先通过一个例子来讲解怎么样在LDAP中保存串行化的Java对象数据,再用一个例子来说明怎么对保存的对象数据进行查询、调用。
1.保存数据
在LDAP中保存数据就是在LDAP服务器中添加使用条目,也就是把条目绑定在服务器中。下面先建立一个基本类,再在另一个类中利用JNDI把这个基本类绑定在服务器中。
4 例6-1 在LDAP中保存数据。
(1)待绑定的基本类
- package jndi;
- import java.io.serializable;
- public class persons implements Serializable {
- String Name = "";
- String Age ="" ;
- public persons () {
- }
- //构造函数,用于给变量赋值
- public persons (String namePara,String age) {
- Name = namePara;
- Age = age;
- }
- //用于返回变量Name的值
- public String getName() {
- return Name;
- }
- //用于返回变量Age的值
- public String getAge () {
- return Age;
- }
- }
JNDI定义了一个Serializable接口类来为应用信息的表达提供一种统一的方式。Serializable接口类包含了诸如地址、类型信息等用于访问具体对象的信息。为了能将对象的引用绑定到目录树中,该对象的类必须实现Referenceable接口,其中包含了方法 getReference()。开发者可以在该对象上调用getReference()方法来获得Reference以用于绑定。Serializable接口与Referenceable接口有颇多相似之处,不同在于Referenceable可引用的对象只包含一些用于创建实际对象的信息,而Serializable会包含更多的甚至不适合存储在目录结构中的信息。
(2)绑定保存对象程序
- package jndi;
- import java.util.Hashtable;
- import javax.naming.Context;
- import javax.naming.NamingException;
- import javax.naming.directory.*;
- public class ldapDataBind {
- public static void main(String[]args){
- //创建Hashtable以存储JNDI将用于连接目录服务的环境变量
- Hashtable hs = new Hashtable();
- //设置连接LDAP的实现工厂
- hs.put(Context.INITIAL_CONTEXT_FACTORY,
- "com.sun.jndi.ldap.LdapCtxFactory");
- // 指定LDAP服务器的主机名和端口号
- hs.put(Context.PROVIDER_URL, "ldap://localhost:389 ");
- //给环境提供认证方法,有SIMPLE、SSL/TLS和SASL
- hs.put(Context.SECURITY_AUTHENTICATION, "simple");
- //指定进入的目录识别名DN
- hs.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
- //进入的目录密码
- hs.put(Context.SECURITY_CREDENTIALS, "password");
- try {
- // 得到初始目录环境的一个引用
- DirContext ctx = new InitialDirContext(hs);
- // 新建一个对象
- persons perObj = new persons("jordan","40");
- //绑定对象
- ctx.rebind ("uid = Jordan,ou = Bull,o = NBA ",perObj);
- System.out.println("bind object object success " );
- /*实例化一个属性集合*/
- Attributes attrs = new BasicAttributes(true);
- /*建立一个属性,其属性名为"mail"*/
- Attribute personMail = new BasicAttribute("mail");
- //设置属性"mail"的值为"xie@163.com"、"liu@sina.com.cn"、
- "xyh@powerise.com.cn"
- personMail.add("xie@163.com");
- personMail.add("liu@sina.com.cn");
- personMail.add("xyh@powerise.com.cn");
- attrs.put(personMail);
- /*建立一个属性,其属性名为"uid",值为001*/
- attrs.put("uid","001");
- /*建立一个属性,其属性名为"cn",值为jordan1*/
- attrs.put("cn","jordan1");
- /*建立一个属性,其属性名为"sn",值为NBA */
- attrs.put("sn","NBA");
- /*建立一个属性,其属性名为"ou",值为bull */
- attrs.put("ou","bull");
- System.out.println("bind object object success " );
- /* 在识别名为DN的目录中增加一个条目*/
- ctx.createSubcontext("uid = Jordan, ou = Wizzard,o=NBA",attrs);
- //关闭初始目录环境
- ctx.close();
- } catch (NamingException ex) {
- System.err.println("bind object fail: " + ex.toString());
- }
- }
- }
2.使用JNDI查找数据
前面已经介绍了怎么样将对象数据绑定到服务器,现在开始介绍如何取得调用绑定在服务器上的对象数据。
5 例6-2 使用JNDI查找数据。
要调用对象数据,首先就必须用JNDI查找绑定的对象和数据,查找出来后,再调用该对象。程序如下所示。
- package jndi;
- import java.nutil.Hashtable;
- import javax.naming.Context;
- import javax.naming.NamingException;
- import javax.naming.NamingEnumeration;
- import javax.naming.directory.*;
- public class findUseBindObj {
- public static void main(String[]args){
- //创建Hashtable以存储JNDI将用于连接目录服务的环境变量
- Hashtable hs = new Hashtable();
- //设置连接Ldap的实现工厂
- hs.put(Context.INITIAL_CONTEXT_FACTORY,
- "com.sun.jndi.ldap.LdapCtxFactory");
- // 指定LDAP服务器IP地址为本机及端口号为389
- hs.put(Context.PROVIDER_URL, "ldap://localhost:389");
- try {
- // 得到初始目录环境的一个引用
- DirContext ctx = new InitialDirContext(hs);
- //利用lookup查找返回指定DN的条目对象
- persons pers =(persons)ctx.lookup("uid=Jordan,ou=Bull,o=NBA");
- // 利用远程对象调用远程方法,返回Age变量的值
- String age = pers.getAge();
- // 利用远程对象调用远程方法,返回Name变量的值
- String name = pers.getName();
- //输出Name的值
- System.out.println("name is :" + name );
- /*根据结点的DN来查找它的所有属性, 然后再从属性中得到所有的值,注意一个属性可
- 以有多个值*/
- Attributes attrs=ctx.getAttributes("uid=Jordan,ou=Wizzard,o=NBA");
- //循环获取并输出这个属性的所有属性值
- for(NamingEnumeration ae = attrs.getAll();ae.hasMore();){
- //获取一个属性
- Attribute attr = (Attribute)ae.next();
- System.out.println("Attribute : " + attr.getID());
- //循环取得输出这个属性的所有属性值
- for(NamingEnumeration ve = attr.getAll();ve.hasMore();){
- System.out.println(" Value : " + ve.next());
- }
- }
- //成功打印提示信息
- System.out.println("find object success " );
- //调用该对象的函数
- pers.toString();
- //关闭初始目录环境
- ctx.close();
- } catch (NamingException ex) {
- System.err.println(ex.toString());
- }
- }
- }
对于作为引用绑定在目录树中的对象,JNDI SPI 指定针对引用创建实际的对象。因此,在程序中只需要认为用lookup()方法返回的对象就是实际对象,而不用在调用什么方法来将引用转换为实际对象了,因为所有的工作都由JNDI内部完成了。
6.2.7 JNDI查询修改LDAP目录条目
前面已经介绍了如何在LDAP服务器里存储一个对象:主要是利用一个DN将对象绑定到LDAP服务器中,然后用lookup(DN)查找定位到绑定的对象,再对该对象进行操作。但是往往使用DN查找非常难,用户很难记住DN,因此我们可以使用其他属性(比如CN=Cherry)来检索包含那个属性的条目。下面来介绍JNDI中相关属性检索的具体使用。
1.修改条目
很多时候可能要对LDAP服务器上的条目进行修改,如修改用户密码,更新应用的配置等。但修改必须由一个已认证过的用户来执行,而且通常只能修改自己的密码而不能修改其他信息,管理助手能够修改电话号码和邮件地址,而修改用户标识这种工作由数据库管理员完成。
6 例6-3 用JNDI修改LDAP条目。
- package jndi;
- import java.nutil.Hashtable;
- import javax.naming.Context;
- import javax.naming.directory.Attribute;
- import javax.naming.directory.Attributes;
- import javax.naming.directory.BasicAttribute;
- import javax.naming.directory.DirContext;
- import javax.naming.directory.InitialDirContext;
- import javax.naming.directory.ModificationItem;
- public class jndiPropertyModify {
- public static void main(String[] args){
- Hashtable hs = new Hashtable();
- //设置连接LDAP的实现工厂为com.sun.jndi.ldap.LdapCtxFactory
- hs.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.
- LdapCtxFactory");
- //指定提供服务的服务器IP地址和端口号
- hs.put(Context.PROVIDER_URL,"ldap://localhost:389");
- //使用简单认证来认证用户
- hs.put(Context.SECURITY_AUTHENTICATION,"simple");
- hs.put(Context.SECURITY_PRINCIPAL,"uid=Jordan,ou=Bull,o=NBA");
- hs.put(Context.SECURITY_CREDENTIALS,"good");
- try {
- /*指定了JNDI服务提供者中工厂类(factory class)的名称。Factory负
- 责为其服务创建适当的InitialContext对象。在上面的代码片断中,为文件
- 系统服务提供者指定了工厂类*/
- DirContext ctx = new InitialDirContext(hs);
- System.out.println("成功创建初始化context对象!");
- //新建生成一个修改条目类对象,用于存放条目属性
- ModificationItem[] mdi = new ModificationItem[2];
- // 把属性mail的值置为jordan@163.com
- Attribute att0 = new BasicAttribute("mail",
- "jordan@163.com");
- // 把属性call的值置为12745827
- Attribute att1 = new BasicAttribute("call","12745827");
- //修改指定属性mail
- mdi[0]=new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
- att0);
- //增加新属性call到条目
- mdi[1]=new ModificationItem(DirContext.ADD_ATTRIBUTE,att1);
- // 修改指定DN条目的属性
- ctx.modifyAttributes("uid=Jordan,ou=Bull,o=NBA",mdi);
- }catch(Exception ex ){
- ex.printStackTrace();
- System.exit(1);
- }
- }
- }
上面程序的作用是修改前面例子中增加的DN为uid = Jordan,ou = Bull,o = NBA条目的属性。
在程序中用DirContext.REPLACE_ATTRIBUTE来修改条目的mail属性,在这里如果原来的mail属性有多个值时,都会被删掉,取而代之的是新赋的值。用DirContext. REPLACE_ATTRIBUTE时,如果原来的属性(mail)不存在时,就增加一个属性,有则修改。
用DirContext.ADD_ATTRIBUTE来将一个新属性增加到条目。真正起到修改作用的是ctx.modifyAttributes("uid = Jordan,ou = Bull,o = NBA",mdi)这条语句。
2.删除条目
有时,当开发者不需要某个条目时,就可以把它从LDAP服务器上删除。这只要通过调用参数为指定DN条目的DirContext接口的destorySubContext()方法来完成。
7 例6-4 用JNDI删除LDAP条目。
- package jndi;
- import java.nutil.Hashtable;
- import javax.naming.Context;
- import javax.naming.directory.Attribute;
- import javax.naming.directory.Attributes;
- import javax.naming.directory.BasicAttribute;
- import javax.naming.directory.DirContext;
- import javax.naming.directory.InitialDirContext;
- import javax.naming.directory.ModificationItem;
- public class jndiPropertyModify {
- public static void main(String[] args){
- Hashtable hs = new Hashtable();
- //设置连接LDAP的实现工厂为com.sun.jndi.ldap.LdapCtxFactory
- hs.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.
- LdapCtxFactory");
- //指定提供服务的服务器IP地址和端口号
- hs.put(Context.PROVIDER_URL,"ldap://localhost:389");
- //使用简单认证来认证用户
- hs.put(Context.SECURITY_AUTHENTICATION,"simple");
- // 指定DN
- hs.put(Context.SECURITY_PRINCIPAL,"uid=Jordan,ou=Bull,o=NBA");
- // 指定认证密码
- hs.put(Context.SECURITY_CREDENTIALS,"good");
- try {
- /*指定了JNDI服务提供者中工厂类(factory class)的名称。Factory负
- 责为其服务创建适当的InitialContext对象。在上面的代码片断中,为文件
- 系统服务提供者指定了工厂类*/
- DirContext ctx = new InitialDirContext(hs);
- //删除指定DN条目
- ctx.destroySubcontext("uid=Jordan,ou=Bull,o=NBA");
- }catch(Exception ex ){
- ex.printStackTrace();
- System.exit(1);
- }
- }
- }
发表评论
-
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 6674一、为啥要用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.1 什么是JNDI
2007-11-28 16:22 14966.1 什么是JNDI Java命名和目录接口(the J ... -
jndi
2007-11-28 15:43 1570JNDI是J2EE中一个很重要的标准,通常我们是在J2EE编程 ... -
j2ee 介绍
2007-11-28 10:40 1797J2EE Java2平台企业版(Jav ...
相关推荐
目录 1.前言 2.基本术语 2.1.可扩展性 2.2.高可用性 2.3.负载均衡 2.4.容错 2.5.失败转移 2.6.幂等方法 ...3.什么是J2EE集群?...4.2.4.WebLogic, WebSphere, JBoss的方案:结对服务器(Paired ...11.附录A:中英文对照表
### J2EE扫盲之-揭开J2EE集群的神秘面纱 #### 1. 前言 随着互联网业务的迅速发展与企业信息化水平的不断提升,越来越多的关键性应用程序选择基于J2EE(Java 2 Platform, Enterprise Edition)平台进行构建。例如,...
- **静态变量**:在集群环境中使用静态变量可能会导致数据不一致的问题。 - **外部资源**:应用程序依赖的外部资源(如文件系统)可能需要调整以适应集群环境。 - **特殊的服务**:如果应用中包含了依赖特定服务器的...
- **6.3.1 通过脚本段代码访问JavaBean**:直接在JSP页面中使用`<% %>`嵌入Java代码访问JavaBean。 - **6.3.2 使用脚本段代码将页面提交的数据放入JavaBean的属性中**:获取表单数据,并设置到JavaBean的属性中。 - ...
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能完成的...
介绍JNDI中常用的类和接口,如`javax.naming.Context`等。 **10.3 JNDI数据源** JNDI数据源是通过JNDI访问数据库的一种方式。 **10.4 配置Tomcat的JNDI数据源** 详细介绍如何在Tomcat服务器中配置JNDI数据源。 ...
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能完成的...
- **实现方式**:通过配置中心化的JNDI服务器或使用特殊的复制算法来实现。 **5.2 独立的JNDI** - **定义**:每台服务器维护自己的JNDI实例,这种方式可能会影响数据的一致性。 - **应用场景**:适用于对性能要求...
294 16.3.5 数据库连接池中使用JDBC 297 16.4 小结 302 第17章 ORM与Java持久化机制 303 17.1 ORM概述 303 17.2 域模型 304 17.3 实体域对象的持久化模式 304 17.4 JPA 305 17.4.1 实体 306 17.4.2 EntityManager ...
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能完成的...
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能完成的...
第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...
第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...
6.2 在JSP 中应用XML 6.3 javax.servlet.jsp.tagext 包介绍 6.4 Tag Library 开发与应用实例 6.5 本章小结 第7 章 典型Tag Library 介绍JRun Tag Library 7.1 JRun Tag Library 简介 7.2 SQL 标记 7.3 J2EE 标记 7.4...
这是个小型的系统,从投入的人力,财力与物力来讲是非常小的,发布出去之需要注册域名就可以了,从节省人力方面,可以让管理人员从繁与复杂的工作中解脱出来,做更多的工作。 2.2.3. 管理可行性 有IP地址、用户名...
第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...
第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...
本书从最基础的JSP开发开始,循序渐进地介绍了JSP 开发技术,并涵盖了许多高级主题,如需要在企业级Web应用中使用的特性—Enterprise JavaBeans、JDBC 2.0、数据库连接池和自定义标签库。本书既适合初学者阅读,也...