J2EE的13种核心技术(转载)

  Java最初是在浏览器和
端的开发。现在,随着对Ja
发企业级服 务器端解决方案
客户端机器中粉墨登场的。当时
va2平台企业版(J2EE)第三方
的 首选平台之一。
,很多人质疑它是否适合做服务器
支持的增多,Java被广泛接纳为开


  J2EE平台由一整套服务
Web的多层应用提供了功能
(Services)、应用程序接口(
支持。
APIs)和协议构成,它对开发基于


  在本文中我将解释支撑
servlets, XML, JMS, Java
需要使用这些技术。当然,
J2EE的13种核心技术:JDBC, JN
IDL, JTS, JTA, JavaMail 和
我还要介绍这些不同的技术之间
DI, EJBs, RMI, JSP, Java
JAF,同时还 将描述在何时、何处
是如何交互的。

  此外,为了让您更好地感受J2EE的真
Systems公司的一种 广为应用的产品―环
和J2EE的新手,还是那些想了解J2EE能带
定很有参考价值。
实应用,我将在WebLogic应用服务器―来自BEA
境下来介绍 这些技术。不论对于WebLogic应用服务器
来什么好处的项目管理者和系统分析员,相信本文一


  宏观印象: 分布式结构和J2EE

  过去,二层化应用 -- 通常被称为cl
了典型的二层化结构。在 很多情况下,服
案中,客户端程序负责数据访问、实现业
面、接受用户输入等。client/server结
改进,而且经常基于某种 专有的协议―通
辑非常困难。更重要的是,在Web时代,
适应Internet的要求。
ient/server应用 -- 是大家谈论的最多的。图1刻画
务 器提供的唯一服务就是数据库服务。在这种解决方
务逻辑、用合适的样式显示结果、弹出预设的用户界
构通常在第一次部署的时候比较容易,但难 于升级或
常是某种数据库协议。它使得重用业务逻辑和界面逻
二层化应用通常不能体现出很好的伸缩性,因而很难


  Sun设计J2EE的部分起
化N层企业级应用的开发。
J2EE 还自动为应用程序处理
因就是想解决二层化结构的缺陷
它定义了一套标准化的组件,并
了 很多实现细节,如安全、多线
。于是,J2EE定义了一套标准来简
为这些组件提供了完整的服务。
程 等。

  用J2EE开发N层应用包括将二层化结
为以下的每种服务提供一个 分开的层:
构中的不同层面切分成许多层。一个N层化应用A能够


  显示:在一个典型的Web应用中,客户端机器上运行的浏览器负责实现用户 界面。    

  动态生成显示: 尽管浏
动态生成工作应该放在Web
和 (可扩展样式表语言)。
览器可以完成某些动态内容显示
服务器端进行,使用JSP、Servl

,但为了兼容不同的浏览器,这些
ets,或者XML(可扩展标记语 言)

  业务逻辑:业务逻辑适合用Session EJBs(后面将介绍)来实现。        

  数据访问:数据访问适合用Entity EJBs(后面将介绍)和JDBC来实现。

  后台系统集成: 同后台
后台系统的特征而定。
系统的集成可能需要用到许多不

同的技术,至于何种最佳需要根据


  您可能开始诧异:为什
伸缩性,它允许每层专注于
应用逻 辑,而数据库服务器
么有这么多的层?事实上,多层
特定的角色。例如,让Web服务
提 供数据库服务。
方式可以使企业级应用具有很强的
器负责提供页面,应用服务器处理


  由于J2EE建立在Java2平台标准版(J
。包括“编写一次, 到处可用”的可移植
的CORBA技术,以及一个经过验证的安全
Java组件)、Java servlets、Java服务
2SE)的基础上,所以具备了J2SE的所有优点和功能
性、通过 JDBC访问数据库、同原有企业资源进行交互
模型。在这些基础上,J2EE又增加了对EJB(企业级
器页面(JSPs)和XML技术的支 持。

  分布式结构与WebLogic应用服务器

  J2EE提供了一个框架--一套标准API-
留给了第三方厂商。 部分厂商只是专注于
提供了对JSP和servlets的支持,BEA系统
范提供了一个较为完整的实现。
-用于开发分布式结构的应用,这个框架的实际实现
整个J2EE架构中 的的特定组件,例如Apache的Tomcat
公司则通过其WebLogic应用服务器产品为整个J2EE规


  WebLogic服务器已使建
J2EE代你处理了大量常规的
录 服务、数据库访问和连接
立和部署伸缩性较好的分布式应
编程任务,包括提供事务服务、
池、 线程池、负载平衡和容错处
用的过程大为简化。WebLogic和
安全领域、可靠的消息、名字和 目
理等。

  通过以一种标准、易用
有更好伸缩性和可维护性的
的方式提供这些公共服务,象We
应用系统,使其为大量的用户提
bLogic服务器这样的产品造就了具
供了增长的可用性。

  J2EE技术

  在接下来的部分里,我们将描述构成
一个分布式应用中对它们进行支 持的。最
servlets,对这些我们将作更仔细的考察
J2EE的各种技术,并且了解WebLogic服务器是如何在
常用的 J2EE技术应该是JDBC、JNDI、EJB、JSP和


  Java Database Connectivity (JDBC)            

  JDBC API以一种统一的
员隐藏了不同数据库的不同
存 取的平台独立性。
方式来对各种各样的数据库进行
特性。另外,由于JDBC建立在Ja

存取。和ODBC一样,JDBC为开发人
va的基础上,因此还提供了 数据库


  JDBC定义了4种不同的驱动程序,现分述如 下:                                

  类型 1: JDBC-ODBC Bridge                                  

  在JDBC出现的初期,JD
员可以使用JDBC来存取ODBC
, 必须安装Microsoft Wind
外,ODBC驱动程序还需要具
BC-ODBC桥显然是非常有实用意
数据源。不足的是,他需要在客
ows 的某个版本。使用这一类型
有客户端的控制权限。
义的,通过JDBC-ODBC桥,开发人
户端安装ODBC驱动程序, 换句话说
你需要牺牲JDBC的平台独立性。另


  类型 2: JDBC-native driver bridge                

  JDBC本地驱动程序桥提供了一种JDBC
要使用ODBC。 JDBC驱动程序将对数据库
型需要牺牲JDBC的平台独立性,还要求在
接口,它建立在本地数据库驱动程序的顶层,而不需
的API从标准的 JDBC调用转换为本地调用。使用此类
客户端安装一些本地代码。

  类型 3: JDBC-network bridge                            

  JDBC网络桥驱动程序不
数据库。这种应用使得以下
缓存 等。由于第3种类型往
户端安装并取得控制权,所
再需要客户端数据库驱动程序。
技术的实现有了可能,这些技术
往 只需要相对更少的下载时间,
以很适合于Internet上的应用。
它使用网络上的中间服务器来存取
包括负载均衡、连接缓冲池和数据
具 有平台独立性,而且不需要在客


  类型 4: Pure Java driver                                  

  第4种类型通过使用一个纯Java数据
在客户端实现了2层结构。 要在N-层结构
存取代码并提供一个对客户端具有数据库
库驱动程序来执行数据库的直接访问。此类型实际上
中应用,一个更好的 做法是编写一个EJB,让它包含
独立性的服务。

  WebLogic服务器为一些
Microsoft SQL Server以及
纯Java的DBMS,WebLogic服
通常的数据库提供了JDBC驱动程
Informix。它也带有一种 JDBC驱
务器中带有该数据库的评估版本
序,包括Oracle, Sybase,
动程序用于 Cloudscape,这是一种

  以下让我们看一个实 例。                                                        

  JDBC实例

  在这个例子中我们假定
个表,名为 CONTACT_TABLE
Cloudscape JDBC driver,
的连接。通过这一连接,我
询。最后,用循环来遍历结
出。
你已经在Cloudscape中建立了一
,它带有2个字段:NAME 和 PH
并请求 driver manager得到一
们可以构造一个 Statement 对
果集的所有数据,并用标准输出

个PhoneBook数据库,并且包含一
ONE。 开始的时候先装载
个 对PhoneBook Cloudscape数据库
象并用它来执行一个简单的SQL查
将NAME和PHONE字段的内容进行输


  import java.sql.*;                                          

  public class JDBCExample                              
   {                                                                            
  public static void main( String
args[] )
   {                                                                            
   try                                                                        
   {                                                                            

  Class.forName("COM.c
loudscape.core.JDBCDriver");
  Connection conn = DriverManager.
getConnection("jdbc:cloudscape:PhoneBook");
  Statement stmt = conn.createStat
ement();
  String sql = "SELECT
name, phone FROM CONTACT_TA
BLE ORDER BY name";

  ResultSet resultSet
= stmt.executeQuery( sql );

  String name;                                                      
  String phone;                                                    
  while ( resultSet.next() )                          
   {                                                                            
  name = resultSet.getString(1).trim();    
  phone = resultSet.getString(2).trim();  
  System.out.println( name + ", "
+ phone );
   }                                                                            
  catch ( Exception e )                                    
   {                                                                            
  // Handle exception here                              
   e.printStackTrace();                                      
   }                                                                            
   }                                                                            
   }                                                                            

  OK。接着我们来看一看JDBC是如何在企业应用中的进行使 用。                  

  JDBC在企业级应用中的应 用                                                  

  以上实例其实是很基本的,可能有些
业级应用中,更大的可能是在客 户端和一
和改进可伸缩性和系统性能, WebLogic

微不足道。它假定了一个2层结构。在一个多层的企
个EJB进行通信, 该EJB将建立数据库连接。为了实现
服务器提供了对连接缓冲池connection pool的支持


  Connection pool减少
缓冲池,此后如故再有对数
数 据缓冲池可以在WebLogic
weblogic.properties 文件
了建立和释放数据库连接的消耗
据库的请求,WebLogic服务器可
服 务器的 weblogic.properties
中的例子,WebLogic服务器的文
。在系统启动以后即可建立这样的
以很简单地从缓冲池中取出数据。
文 件中进行定义。(可参考
档中还有更详细的参考信息)

  在企业级应用的另一个
必须做为同一个statement
务 模式。这可以通过使用Co
常见的数据库特性是事务处理。
来处理以保证数据完整性。缺省
nnection 类的 setAutoCommit()
事务是一组申明statement,它们
情况下JDBC使用 auto-commit 事
方法来实现。

  现在我们已经对JDBC有了一些认识,下面该转向JNDI 了。                    

  Java Naming and Dire
ctory Interface (JNDI)

  JNDI API被用于执行名
DNS和LDAP,本地文件系统
字和目录服务。它提供了一致的
,后者在应用服务器中的对象。
模型来存取和操作企业级的资源如


  在JNDI中,在目录结构
context的。这里没有绝对
InitialContext 类来得到
中的每一个结点称为context。
名字的概念存在。对一个应用来
其 第一个context:
每一个JNDI名字都是相对于
说,它可以通过使用


  Context ctx = new InitialContext();        

  应用可以通过这个初始化的context
,假设你在 Weblogic服务器中展开了一个
EJB的某个客户在取得一个初始化context
经有这个目录树来定位它所需要的资源或对象。例如
EJB并将home 接口绑定到名字 myApp.myEJB ,那么该
以后,可以通过以下语句定位home接口:


  MyEJBHome home = ctx
.lookup( "myApp.myEJB" );

  在这个例子中,一旦你
法。我们将在下面的"Enter
有了对被请求对象的参考,EJB
prise Java Beans"章节中做更
的home接口就可以在它上面调用方
多的介绍。

  以上关于JNDI的讨论只是冰山之一角
JNDI也提供了一些方法 来进行以下操作:
而已。如果要更进一步地在context中查找对象,


  将一个对象插入或绑定到context。这在你展开一个EJB的时候是很 有效的。  

  从context中移去对 象。                                                  

  列出context中的所有对 象。                                              

  创建或删除子一级的 context。                                            

  接下来,我们要开始关注EJB 了。                                              

  Enterprise Java Beans (EJB)                        

  J2EE技术之所以赢得某
施分布式商务逻辑,由此很
规范 定义了EJB组件在何时
目录服务、事务管理、安全
体广泛重视的原因之一就是EJB
显著地简化了具有可伸缩性和高
如 何与它们的容器进行交互作用
性、资源缓冲池以及容错性。
。它们提供了一个框架来开发和实
度复杂的企业级应用的开发。EJB
。 容器负责提供公用的服务,例如


  EJB规范定义了三种基本的bean类型:

  Stateless session beans: 提供某
时无 法继续存在,生命期相对较短。例如
转换计算。
种单一的服务,不维持任何状态,在服务器故障发生
,一个 stateless session bean可能被用于执行温度


  Stateful session bea
。典型例子是购物车。 Stat
短。每一个实例只用于一个
n: T提供了与客户端的会话交互
eful session bean在服务器故
单个的线程。
,可以存储状态从而代表一个客户
障时无法继续生存,生命气相对较


  Entity beans: 提供了
后能继续存在。多用户情况
客 户的帐号信息。
一致性数据的表示-- 通常存放
下可以使用EJB来表示相同的数

在数据库中 -- 在服务器故障发生
据。entity EJB的一个典型例子是

  尽管有以上的区别,所有的EJB还是
定义了一个客户端是如何创建 与消亡EJB
行调用;bean类则执行了主要的商务逻辑
有许多的共同之处。它们都处理home interface。它
的。 可以在bean中对定义了客户端方法的远程接口进


  描述EJB的开发已经超
进行了购买,它就必须在应
Deployer Tool来协助处理E
所用的JNDI名字来定位EJB
jar文件中把被请求的Java
出了本文的范围。但是,如果一
用服务器中进行发布。WebLogic
JB 的发布。当你使用EJB Deploy
。Deployer Tool将生成wrapper
类绑定在一起。
个EJB已经被开发了或者从第三方
Server 5.1带有一个EJB
er Tool的时候,你要定义客户端
类来处理和容器的通信以及在一个


  一旦EJB被发布,客户端就可以使用
home接口的 reference。然后,客户端可
器上运行的某个bean实例的句柄;最后,
它的JNDI名字来定位EJB。首先,它必须得到一个到
以使用该接 口,调用一个 create() 方法来得到服务
客户端可以使用该句柄在bean中调用方法。

  了解 EJB后,让我们再来看JSP。                                          
  JavaServer Pages (JSPs)                                

  我们中间可能已经有许多人已经熟悉
JSP和ASP相对应的,但更 具有平台对立性
页,并且只需要相对较少的代码。 即使W
用是很方便的。 JSP页面由HTML代码和嵌
请求以后对这些Java代 码进行处理,然后
Microsoft的Active Server Pages (ASP)技术了。
。他们被设计用以帮助Web内容开发人员创建动态网
eb设计师不懂得如何编程也可以使用JSP,因为JSP应
入 其中的Java代码所组成。服务器在页面被客户端所
将生成的HTML页面返回给客户端的浏览器。

  下面我们来看一个JSP
的具体解释已经超出了本文
中间, 而Java的表达式则放
的简单实例。它只显示了服务器
的范围,但我们还是可以很直观
在 符号之间。
的当前日期和时间。虽然,对语法
地看到,Java代码被放在 符号的


  <H1>Date JSP sample</H1>                  

   <H2>                                                                
  <% response.setHeader("Refres
h", 5); %>
  The current date is <%= new D
ate() %>.
   </H2>                                                              

  您可能有时候听说过JHTML。这是JSP
JSP,又可支持 JHTML。请注意,在缺省状
。要使之有效,你可以编辑weblogic.pro
则要先使之有效。Servlet的情况和JSP是
以前的一种较老的标准。WebLogic服务器既可支持
况下,JSP 在WebLogic服务器中并没有处于有效状态
perties文件。如果Web服务器还没有处于有效状态,
一样的。

  下面是: Java servlets                                          

  Java Servlets                                                    

  Servlet提供的功能大多与JSP类似,
嵌入少量的Java 代码,而servlets全部由
不过实现的方式不同。JSP通常是大多数HTML代码中
Java写成 并且生成HTML。

  Servlet是一种小型的Java程序,它
,当被请求时开始执 行,这和CGI Perl脚
:每一个CGI在开始的时候都要求开始一
离的线程来运行的。因此servlets在可伸
扩展了Web服务器的功能。作为一种服务器端的应用
本很相似。 Servlets和CGI脚本的一个很大的区别是
个新的进程 -- 而servlets是在servlet引擎中以分
缩性上提供了很好的 改进。

  在开发servlets的时候
override一些它的方法,其
,您常常需要扩展javax.servle
中包括:
t.http.HttpServlet 类,并且


  service(): 作为dispatcher来实现命令-定义方法            

  doGet(): 处理客户端的HTTP GET请求。                          

  doPost(): 进行HTTP POST操作                                

  其它的方法还包括处理
不同类型的HTTP请求 -- 可以参
考HttpServlet API文档。

  以上描述的是标准J2EE Servlet API
的实现途径。 一旦你开发了一个servlet
此可以在WebLogic服务器中对它进行配置
的各种方法。WebLogic服务器提供了一个该API完整
,你就可 以在weblogic.properties 中加以注册并由


  通过Java servlets,我们已经到达了
些。下面的段落 中我们将简要地看一下现
以及XML,等等。
J2EE主要技术的末尾了。但J2EE所提供的并不止于这
存的一些技 术,包括RMI, Java IDL和CORBA, JTA,


  Remote Method Invocation (RMI)                  

  正如其名字所表示的那样,RMI协议
式在客户端和服务器端传递数 据。RMI是
是在远程对象上调用一些方法。它使用了连续序列方
一种被EJB使用的 更下层的协议。

  Java IDL/CORBA

  在Java IDL的支持下,开发人员可以
并使之可在CORBA ORB中展开, 或者他们
对象的客户。后一种方法提供了另外一种
legacy系统相集成。
将Java和CORBA集成在一起。 他们可以创建Java对象
还可 以创建Java类并作为和其它ORB一起展开的CORBA
途径,通过它Java可以被用于将你的新的应用和


  Java Transaction Arc
hitecture (JTA)/Java Transac
tion Service (JTS)

  JTA定义了一种标准的API,应用系统由此可以存取各种事务监 控。              

  JTS是CORBA OTS事务监控的基本的实
器是在高层支持 Java Transaction API (
specification的Java映像。JTS事务管理
资源管理器提供了事务服务。
现。JTS规定了事务管理器的实现方式。该事务管理
JTA)规范,并 且在较底层实现OMG OTS
器为应用服务器、资源管理器、独立的应用以及通信


  JavaMail and JavaBeans Activatio
n Framework

  JavaMail是用于存取邮
SMTP服务器,也支持IMAP服
件服务器的API,它提供了一套
务器。
邮件服务器的抽象类。不仅支持


  JavaMail利用JavaBeans Activation
MIME 的字节流可以被转换成Java对象,或
接使用JAF。
Framework (JAF)来处理MIME-编码的邮件附件。
者 转换自Java对象。由此大多数应用都可以不需要直


  Java Messaging Service (JMS)                      

  JMS是用于和面向消息
有支持发布/订阅(publish/
传 递,事务型消息的传递,
来对您的应用与legacy bac
的中间件相互通信的应用程序接
subscribe)类型的域,并且提 供
一致性消息和具有持久性的订阅
kend系统相集成。
口(API)。它既支持点对点的域,
对下列类型的支持:经认可的消息
者 支持。JMS还提供了另一种方式


  Extensible Markup Language (XML)              

  XML是一种可以用来定义其它标记语
XML的发展和Java是相 互独立的,但是,
Java和XML的组合,您可以得到一个完美
公司在为Java和XML的组合而努力。如果
Java-XML页 面,或者IBM developerWorks
言的语言。它被用来在不同的商务过程中共享数据。
它和Java具有的 相同目标正是平台独立性。通过将
的具有平台独立性的解决方案。目前正有许多不同的
要了解更多的这方面的信息,可以访问Sun的
的XML Zone。

  总结

  在本文中,我们介绍了建立在J2EE上
J2EE的各种支持。 然而,我们所揭示的
示J2EE潜在的对您的企业级应用的影响可
的分布式应用结构,并且描述了WebLogic服务器对
仅仅是冰山之 一角而已,要以一篇数千字的文章来展
是很不公平的。

  我们已经关注了在您开
EJB, JSP和servlet。我们
开 发人员,商务应用分析师
,给我们的企业以及我们的
始用J2EE进行工作时最有可能遇
也为您提供了一些尚未常见的J2
, 或者项目经理,都应该对J2EE
企业级应用所带来的意义有一个
到的各类技术:JDBC, JNDI,
EE技术的背景知识。不管您 是一名
和WebLogic服务器所能提供给我们
更好的认识。

posted @ 2010-02-16 17:54  evasnowind  阅读(1563)  评论(1编辑  收藏  举报