| 
| 
| J2EE开发n层应用 |  
| 时间:2014-05-04 10:14:28  来源:不详  作者:佚名 |  
| | | 摘要:在这篇文章中, JNDI,EJBs,RMI,JSP,Ja
 为了更好地说明这些技术在
 。
 
 | 我们将介绍13种J2EE(Java 2平 va servlets,XML,JMS,Java
 实际中的应用,本文将通过BEA
 
 
 | 台企业版)的核心技术:JDBC, IDL,JTS,JTA,JavaMail和JAF。
 System的WebLogic Server来介绍
 
 
 | 
 | Java起初是运用在浏览 的开发。现今,随着越来越
 用来开发企业级的服务器端
 
 | 器和客户计算机上的,当时,很 多的第三方对Java 2平台企业版
 应用。
 
 | 多人都怀疑它是否适合用作服务端 (J2EE)的支持,Java已经被广泛
 
 
 | 
 | J2EE平台包含有一整套 Web的应用。
 
 | 的服务、应用编程接口(API) 
 
 | 和协议,可用于开发多层的基于 
 
 | 
 | 在这篇文章中,我们将讨论构成J2EE Java servlets, XML, JMS, Java IDL, J
 用在哪里;我们还将介绍每种不同的技术
 
 | 的13种核心技术:JDBC, JNDI, EJBs, RMI, JSP, TS, JTA, JavaMail和JAF。我们将介绍每种技术适合
 之间是如何通信的。
 
 | 
 | 为了更好地说明J2EE在现实中的应用 术,WebLogic Server来自BEA Syetem,
 绍性文章的阅读对象是对WebLogic Serve
 经理和商业分析者。
 
 | ,我们将通过WebLogic Server来介绍其中主要的技 它是一个广泛使用的J2EE工具。要注意的是,这篇介
 r和J2EE不熟悉的开发者、以及对J2EE感兴趣的项目
 
 
 | 
 | 以前,两层的应用--也 层体系。在一些情况下,服
 数据访问、应用商业逻辑、
 受用户的输入。客户/服务
 通常基于私有的协议--典型
 Web领域中,可能最重要的
 Internet。
 
 | 称为客户/服务器应用是很常见 务器提供的唯一服务就是数据库
 将结果转换为一个格式以便显示
 器的体系在开始的时候很容易配
 的是私有的数据库协议。商业和
 就是扩展,而两层的应用不便于
 
 
 | 的。图1表示的就是一个典型的两 服务。在这种情形下,客户端负责
 ,为用户显示内部的接口,以及接
 置,不过难于升级或者扩展,而且
 表现逻辑的重新使用也很难。在
 升级扩展,因此不适合用在
 
 
 | 
 
 | 为了解决这个两层体系的不足,Sun 层的企业应用。它定义了一套标准化、模
 ;以及自动处理应用行为的许多细节---
 
 | 设计了J2EE。J2EE定义了一套标准,可轻松地开发n 块化的组件;并为这些组件提供了一整套完整的服务
 例如安全和多线程。
 
 | 
 | 使用J2EE来开发n层的 能够为以下的每个服务提供
 
 | 应用,要将原来的2层体系细分 独立的层:
 
 | 为多个不同的层。一个n层的应用 
 
 | 
 | 表现:在一个典型的Web应用中,运行在客户机器上的浏览器负责处理表现 | 
 | 动态产生表现:虽然浏 器,大部分的动态产生都应
 Extensible Markup Langua
 扩展样式表语言)。
 
 | 览器可以处理一些动态产生的表 该在Web服务器进行,通过使用J
 ge,扩展标记语言)和XSL(Ext
 
 
 | 现,不过为了支持多种不同的浏览 SP,servlet或者XML(
 ensible Stylesheet Language,
 
 
 | 
 | 商业逻辑:实现商业逻辑的最佳方法是通过Session EJB(下文将会提及)。 | 
 | 数据访问:实现数据访 
 | 问的最佳方法是在Entity EJB( 
 | 下文将会提及),以及使用JDBC。 
 | 
 | Backend系统集成:可使用各种不同 backend系统的确切种类。
 
 | 的技术来与backend系统集成。最佳的选择在于 
 
 | 
 | 你也许会问:为什么要这么多层呢? 用。它可让每个层集中在一个特定的角色
 用服务器来提供应用服务,以及一个数据
 
 | 这是由于分层的方法可得到一个更便于扩展的企业应 上--例如,让一个Web服务器提供网页服务,一个应
 库服务器来提供数据库服务。
 
 | 
 | 由于J2EE构建在Java 2 特色。包括有“写一次,到
 CORBA技术,以及一个经过
 EJB)组件、Java servlets
 
 | 平台标准版本上(J2SE),因此 处运行”的便利、用作数据库访
 验证的安全模型。在这个基础上
 , JavaServer Pages (JSPs)和X
 
 | 它可提供与J2SE一样的所有优点和 问的JDBC,与现有企业资源交互的
 ,J2EE还加入了对企业JavaBean(
 ML技术的支持。
 
 | 
 | J2EE提供了一个框架-- 具留给第三方厂商完成。一
 Tomcat为JSP和servlet提供
 部特性。
 
 | 一个标准的API--用作开发分布 些厂商将着重于实现J2EE体系中
 支持。BEA System通过它的WebL
 
 
 | 式的体系。实现这个框架的引擎工 的某些组件。例如,Apache的
 ogic Server产品实现了J2EE的全
 
 
 | 
 | 通过提供J2EE规范的一个完整实现, 式的应用。WebLogic Server和J2EE为你
 全领域、认证信息、命名和目录服务、数
 
 | WebLogic Server可用来建立及配置易于扩展和分布 处理一些常见的编程任务。包括有提供事务服务,安
 据库访问和连接池、线程池、负载均衡和容错。
 
 | 
 | 通过以一种易于使用和 提供更富扩展性和便于维护
 
 | 标准的方式提供这些常见的服务 的应用。结果是可为大量的用户
 
 | ,类似WebLogic Server的产品可 提供可用性更强的应用。
 
 | 
 | 在以下的部分中,我们 一个分布式的应用中支持它
 servlets,因此我们也着重
 
 | 将讨论构成J2EE的每一种技术, 们。最常用的J2EE技术可能是:
 讨论这些方面。
 
 | 并且看看WebLogic Server如何在 JDBC, JNDI, EJB, JSPs和
 
 
 | 
 | 图2表示了在一个分布式的应用中,每项J2EE技术最常用在哪里。 | 
 | JDBC API以一个统一的方式访问各种 间的问题隔离开来。由于它建立在Java上
 
 | 数据库。与ODBC类似,JDBC将开发者和私有数据库之 ,因此JDBC可以提供平台无关的数据库访问。
 
 | 
 | 在JDBC刚产生时,JDBC ODBC数据源。缺点是,它需
 Windows系统的。使用这一
 需要客户端的管理。
 
 | -ODBC桥是非常有用的。通过它 要在客户机器上安装有一个ODBC
 类的驱动器,你就会失去JDBC平
 
 
 | ,开发者可以使用JDBC来访问一个 驱动,该机器通常是应该运行微软
 台无关的好处。此外,ODBV驱动器
 
 
 | 
 | JDBC-native驱动桥提供了一个建筑 JDBC驱动将标准的JDBC调用转变为对数据
 台无关性的好处,并且需要安装客户端的
 
 | 在本地数据库驱动上的JDBC接口--没有使用ODBC。 库API的本地调用。使用类型2的驱动也会失去JDBC平
 本地代码。
 
 | 
 | JDBC-network桥不需要 库。这会引出诸如负载均衡
 带来相对小的下载时间,它
 Internet的应用。
 
 | 客户端的数据库驱动。它们使用 、连接池等技术,数据缓冲也是
 是平台无关的,并且不需要客户
 
 
 | 网络-服务器中层来访问一个数据 可能的。由于类型3的驱动通常可
 端的安装和管理,因此很适合用作
 
 
 | 
 | 类型4使用纯Java数据 并且直接访问数据库,因此
 中使用类型4的驱动,可以
 一个数据库无关的服务。
 
 | 库驱动来提供直接的数据库访问 运行在这个模式暗示要使用一个
 通过一个包含有数据访问代码的
 
 
 | 。由于类型4驱动运行在客户端, 两层的体系。要在一个n层的体系
 EJB,并且让该EJB为它的客户提供
 
 
 | 
 | WebLogic Server为一些很常用的数 Microsoft SQL Server, 和Informix。它
 Java DBMS,不过WebLogic Server自带的
 
 | 据库提供了JDBC驱动器,包括有Oracle、Sybase、 还带有一个Cloudscape的JDBC驱动,这是一个纯
 是一个评估版本。
 
 | 
 | 在例子中,我们假设你 有一个CONTACT_TABLE表,
 接着向driver manager请求
 接,我们建立了一个Statem
 到结果集的所有项目,将NA
 
 | 已经在Cloudscape中设置了一个 里面有NAME和PHONE字段。我们
 获得一个到PhoneBook Cloudsca
 ent对象,并且使用它来执行一
 ME和PHONE字段的内容写入到标
 
 | PhoneBook数据库,该数据库包含 首先载入Cloudscape的JDBC驱动,
 pe数据库的一个连接。使用这个连
 个简单的SQL查询。最后,循环得
 准的输出中。
 
 | 
 
 | public static void main( String 
 | args[] ) 
 | 
 | Class.forName("COM.cloudscape.co 
 | re.JDBCDriver"); 
 | 
 | Connection conn = Dr 
 | iverManager.getConnection("j 
 | dbc:cloudscape:PhoneBook"); 
 | 
 | Statement stmt = con 
 | n.createStatement(); 
 | 
 | String sql = "SELECT name, phone 
 | FROM CONTACT_TABLE ORDER BY name"; 
 | 
 | ResultSet resultSet = stmt.execu 
 | teQuery( sql ); 
 | 
 
 | while ( resultSet.next() ) | 
 | name = resultSet.getString(1).trim(); | 
 | phone = resultSet.getString(2).trim(); | 
 | System.out.println( 
 | name + ", " + phone ); 
 | 
 | 上面的例子是很简单的 户将与一个EJB通信,并且
 提供连接池(connection p
 
 | 。它使用的仍然是一个两层的体 会进行数据库的连接。为了提高
 ools)的支持。
 
 | 系。在一个n层的企业应用中,客 扩展性和性能,WebLogic Server
 
 
 | 
 | 通过在服务器启动的时 时的系统开销。如果有数据
 一个。WebLogic Server的
 weblogic.properties中的
 
 | 候建立一个数据库的连接池,连 库连接的需求,WebLogic Serve
 连接池在weblogic.properties
 例子和Weblogic Server中的文
 
 | 接池可减少建立和中断数据库连接 r可从池中选择一个,而不是创建
 中定义(具体可参考你的
 档)。
 
 | 
 | 另一个企业应用中经常 据的完整性,这组语句都被
 auto-commit)的事务模式
 
 | 用到的数据库特性是支持事务。 看成是一个单一的语句。默认的
 。你可以使用Connection类的se
 
 | 事务是一组语句,不过为了保持数 情况下,JDBC工作在自动提交(
 tAutoCommit()方法来覆盖它。
 
 | 
 | 现在我们对JDBC已经有一个了解了。接着我们将介绍JNDI。 | 
 | Java命名和目录接口( 
 | Java Naming and Directory In 
 | terface,JNDI) 
 | 
 | JNDI API被用来访问命名和目录服务 资源,例如一个应用服务器中的DNS、LDA
 
 | 。它提供一个相容的模式来访问和操作企业范围大的 P、本地文件系统或者对象。
 
 | 
 | 在JNDI中,一个目录结 context相对的,没有一个
 第一个context:
 
 | 构中的每一个节点被称为contex 绝对名字的概念。一个应用可以
 
 
 | t。每一个JNDI的名字都是与一个 使用InitialContext类来得到它的
 
 
 | 
 | Context ctx = new InitialContext(); | 
 | 通过这个初始的contex 定你已经在WebLogic Serve
 客户端,在得到这样一个初
 
 | t,应用就可以经过目录树定位 r中配置了一个EJB,并且在myAp
 始的context后,然后就可以使
 
 | 到需要的资源或者对象。例如,假 p.myEJB中绑定了home接口。EJB的
 用以下的代码来定位到home接口:
 
 | 
 | MyEJBHome home = ctx.lookup( "my 
 | App.myEJB" ); 
 | 
 | 一旦你得到你所需对象 用它上面的方法。我们将在
 讨论它。
 
 | 的一个引用--在这个例子中,就 后面的“企业Java Beans(Ente
 
 
 | 是EJB的home接口--然后你可以调 rprise Java Beans)”中进一步
 
 
 | 
 | 以上关于JNDI的讨论,只是它的冰山 还提供方法可以做到:
 
 | 一角。为了在一个context中查找到一个对象,JNDI 
 
 | 
 | 插入或者绑定一个对象 
 | 到一个context中。在你配置一 
 | 个EJB时,这是非常有效的方法; 
 | 
 | 企业Java Beans(Enterprise Java Beans,EJB) | 
 | J2EE其中一个引人注目 商业逻辑,因此可以明显减
 应该如何及何时与它们的容
 、安全、资源池和容错。
 
 | 的技术是EJB。它提供了一个架 少开发扩展性、高度复杂企业应
 器交互。由容器来负责提供普通
 
 
 | 构来开发和配置到客户端的分布式 用的难度。EJB规范定义了EJB组件
 的服务,例如目录服务、事务管理
 
 
 | 
 | 无状态的session beans(Stateless 护任何的状态,在服务器崩溃时也不再存
 session bean可能用作执行温度转换。
 
 | session beans):这是一个单一使用的服务,不维 在,而且生存期也相对地短。例如,一个无状态的
 
 
 | 
 | 有状态的session bean 在线购物车就是这样一个有
 溃时也不再存在,而且生存
 
 | :它提供了一个传统的与客户端 状态session ean的典型例子。
 期也相对地短,并且每个实例只
 
 | 交互的方法,存储客户端的状态。 有状态session beans在服务器崩
 可以用在一个单一的线程中。
 
 | 
 | 实体bean(Entity beans):这是持 在服务器崩溃后数据仍然存在。多个客户
 :一个用户的帐号信息。
 
 | 久保存数据的代表--典型的是存储在数据库中--因此 端可以使用EJB来表示同样的数据。实体EJB的例子是
 
 
 | 
 | 虽然它们有不同,不过所有的EJB也 定义一个客户如何创建和消除EJB;一个
 ;以及一个实现主商业逻辑的bean类。
 
 | 有不少相同的地方。它们都有一个home的接口,用来 远程的接口,定义客户端可以调用哪些bean上的方法
 
 
 | 
 | 至于如何开发一个EJB 第三方得到了一个EJB,你
 个EJB Deployer Tool来帮
 需要指定JNDI的名字,以便
 处理与容器的通信,并且与
 
 | ,这已经超出了这篇文章的讨论 就需要在你的应用服务器上配置
 助你配置EJB。当你使用EJB Dep
 客户端可以找到这个EJB。然后
 一些必要的Java类绑定在一起到
 
 | 范围。不过,如果已经开发或者由 它。WebLogic Server 5.1带有一
 loyer Tool来配置一个EJB时,你
 Deployer Tool会产生封装的类来
 一个jar文件中。
 
 | 
 | 一旦EJB配置好,客户端就可以使用 home接口的一个引用。然后,使用这个接
 服务器上运行的bean实例的一个句柄。最
 。
 
 | 它的JNDI名字来查找到该EJB。首先,它必须获得到 口,客户端就可以调用bean的create()方法,以获得
 后,客户端就可以使用这个句柄来调用bean上的方法
 
 
 | 
 | 或许你已经对微软的Active Server 它是平台无关的。它们都是设计来帮助we
 网页。web设计者即使不懂得编程,也可
 HTML代码和Java代码的混合。在客户请求
 HTML页面给浏览器。
 
 | Pages (ASPs)非常熟悉;JSP也是类似的技术,不过 b内容开发者使用相对较少的代码就可以创建动态的
 以使用JSP来创建动态的网页。JavaServer Page是
 页面的时候,服务器就会处理Java代码,然后返回
 
 
 | 
 | 让我们看一个JSP的简单例子,它用 解,已经超出了本文的讨论范围;不过,
 %= 和 %>间的是Java表达式,表示输出
 
 | 来显示服务器的当前日期和时间。至于具体的细节讲 你要注意到在< %和%>符号间的是Java代码,<
 。
 
 | 
 | < title>Sample JSP Page< /title> | 
 | < h1>Date JSP sample< /h1> | 
 | < % response.setHeader("Refresh 
 | ", 5); %> 
 | 
 | The current date is < %= new Da 
 | te() %>. 
 | 
 | 你可以也听过JHTML, 支持JSP,还支持JHTML。不
 本)。你必须编辑weblogic
 
 | 它是一个旧的标准,现在已经被 过,在默认设置下,WebLogic S
 .properties来激活web服务器,
 
 | JSP取代了。WebLogic Server不但 erver是不支持JSP的(对于5.1版
 对于JSPServlet来说,也是这样。
 
 | 
 | servlets提供的功能大 HTML代码,其中只有少量的
 HTML代码。
 
 | 部分JSP相同,它采用的是一个 Java代码,而servlets则相反,
 
 
 | 有点不同的方法。JSP中大部分是 它完全使用Java编写,并且产生
 
 
 | 
 | servlet是一个在服务器上运行的Jav 端的应用可以在被请求时动态执行,与传
 servlet的一个主要不同是:CGI脚本对于
 销--而servlet的执行只要在servlet引擎
 性也更好。
 
 | a小程序,它可以扩展Web服务器的功能。这些服务器 统Web服务器上的CGI Perl脚本差不多。CGI脚本和
 每次请求都启动一个全新的进程--需要额外的系统开
 内启动一个独立的线程就性了。因此Servlet的扩展
 
 
 | 
 | 在开发servlet时,你通常都要扩展j 一些方法。感兴趣的方法包括有:
 
 | avax.servlet.http.HttpServlet类,并且覆盖它的 
 
 | 
 | service(): 作为command-specific方法的一个调度程序 | 
 | doGet(): 处理来自一个客户的HTTP GET请求 | 
 | doPost(): 处理来自一个客户的HTTP POST请求 | 
 | 还有一些其它的方法来处理不同类型 更多相关的信息。
 
 | 的HTTP请求--可参考HttpServlet API的文本来得到 
 
 | 
 | 以上讨论的方法是标准的J2EE Servl 有的API。一旦你开发了自己的servlet,
 在WebLogic Server中配置它。
 
 | et API全部标准的部分。WebLogic Server实现了所 通过在weblogic.properties文件中注册,你就可以
 
 
 | 
 | 以上我们已经介绍了J2 括有RMI, Java IDL and CO
 
 | EE主要的技术,在下面的部分, RBA, JTA和XML。
 
 | 我们将简要地介绍余下的技术,包 
 
 | 
 | 通过Java的IDL支持,开发者可以将J ORB中的Java对象,也可以创建作为配置
 Java将你的新应用和以前的系统集成,后
 
 | ava与CORBA集成。他们可以创建能配置在一个CORBA 在其它ORB内的CORBA对象客户端的Java类。对于通过
 者提供了一个另外的方法。
 
 | 
 | Java事务体系(JTA)/Java事务服务(JTS) | 
 | JTA定义了一个标准的API,应用可以通过它来访问事务监控器。 | 
 | JTS是CORBA OTS事务监控器的一个基 Transaction Manager),这个管理器在
 一个低级别上实现了OMG OTS规范的Java
 器、standalone应用和通信资源管理器提
 
 | 本实现。JTS指定了一个事务管理器的实现( 一个高级别上支持Java事务API(JTA)规范,并且在
 映射。一个JTS事务管理器为应用服务器、资源管理
 供事务服务。
 
 | 
 | JavaMail和JavaBeans 
 | 激活架构(JavaBeans Activati 
 | on Framework,JAF) 
 | 
 | JavaMail是一个用来访问邮件服务器 个邮件系统。支持SMTP和IMAP服务器。
 
 | 的API。JavaMail API提供了一套抽象类来模型化一 
 
 | 
 | JavaMail通过使用Java 。MIME字节流和Java对象间
 
 | Beans Activation Framework ( 可以互相转化。大多数的应用无
 
 | JAF) 来处理MIME加密的邮件附件 需要直接使用JAF。
 
 | 
 | Java信使服务(Java Messaging Service,JMS) | 
 | JMS是一个用来和面向信息的中层通 域,并且提供对担保信息传送、事务信息
 于将你的应用和以前的backend系统集成
 
 | 信的API。它不但支持点对点的域,也支持发布/订阅 传送、持久信息和durable subscribers的支持。对
 ,JMS提供了另外一个方法。
 
 | 
 | 扩展标记语言(Extensible Markup Language,XML) | 
 | XML是一个用来定义其它标记语言的 展是与Java分开的;不过,它的目标和Ja
 合,你可以得到一个完全平台无关的解决
 集成而工作。具体的信息,可浏览Sun站
 以及IBM的developerWorks的XML Zone部
 
 | 的语言。它可被用作商业之间的数据共享。XML的发 va类似,都是为了与平台无关。通过将Java与XML结
 方案。多个公司都为在Java和XML间开发一个紧密的
 点的Java-XML部分(http://java.sun.com/xml),
 分(http://www.ibm.com/developer/xml/)。
 
 | 
 | 在这篇文章中,我们介 持,我们也作了介绍。当然
 
 | 绍了建立在J2EE上的分布体系, ,对于J2EE的介绍,以上只是冰
 
 | 对于WebLogic Server对J2EE的支 山一角。
 
 | 
 | 我们集中介绍了你通常要使用的J2EE 介绍了一些没有那么知名的J2EE技术的背
 经理,对于J2EE和WebLogic Server可为
 将有一个不错的概念了。
 
 | 技术:JDBC, JNDI, EJBs, JSPs和servlets。我们也 景信息。不论你是一个开发者、商业分析家或者项目
 你、你的企业或者你的企业应用带来些什么,现在你
 
 
 | 
 
 | 
 |  |  |  |