服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

j2ee开发n层应用


  摘要:在这篇文章中,我们将介绍13种j2ee(java 2平台企业版)的核心技术:jdbc,jndi,ejbs,rmi,jsp,java servlets,xml,jms,java idl,jts,jta,javamail和jaf。为了更好地说明这些技术在实际中的应用,本文将通过bea system的weblogic server来介绍。
  java起初是运用在浏览器和客户计算机上的,当时,很多人都怀疑它是否适合用作服务端的开发。现今,随着越来越多的第三方对java 2平台企业版(j2ee)的支持,java已经被广泛用来开发企业级的服务器端应用。
  j2ee平台包含有一整套的服务、应用编程接口(api)和协议,可用于开发多层的基于web的应用。
  在这篇文章中,我们将讨论构成j2ee的13种核心技术:jdbc, jndi, ejbs, rmi, jsp, java servlets, xml, jms, java idl, jts, jta, javamail和jaf。我们将介绍每种技术适合用在哪里;我们还将介绍每种不同的技术之间是如何通信的。
  为了更好地说明j2ee在现实中的应用,我们将通过weblogic server来介绍其中主要的技术,weblogic server来自bea syetem,它是一个广泛使用的j2ee工具。要注意的是,这篇介绍性文章的阅读对象是对weblogic server和j2ee不熟悉的开发者、以及对j2ee感兴趣的项目经理和商业分析者。
  分布式体系和j2ee
  以前,两层的应用--也称为客户/服务器应用是很常见的。图1表示的就是一个典型的两层体系。在一些情况下,服务器提供的唯一服务就是数据库服务。在这种情形下,客户端负责数据访问、应用商业逻辑、将结果转换为一个格式以便显示,为用户显示内部的接口,以及接受用户的输入。客户/服务器的体系在开始的时候很容易配置,不过难于升级或者扩展,而且通常基于私有的协议--典型的是私有的数据库协议。商业和表现逻辑的重新使用也很难。在web领域中,可能最重要的就是扩展,而两层的应用不便于升级扩展,因此不适合用在internet。
   j2ee开发n层应用
  **图1***************
  (两层的应用体系)
  为了解决这个两层体系的不足,sun设计了j2ee。j2ee定义了一套标准,可轻松地开发n层的企业应用。它定义了一套标准化、模块化的组件;并为这些组件提供了一整套完整的服务;以及自动处理应用行为的许多细节---例如安全和多线程。
  使用j2ee来开发n层的应用,要将原来的2层体系细分为多个不同的层。一个n层的应用能够为以下的每个服务提供独立的层:
  表现:在一个典型的web应用中,运行在客户机器上的浏览器负责处理表现
  动态产生表现:虽然浏览器可以处理一些动态产生的表现,不过为了支持多种不同的浏览器,大部分的动态产生都应该在web服务器进行,通过使用jsp,servlet或者xml(extensible markup language,扩展标记语言)和xsl(extensible stylesheet language,扩展样式表语言)。
  商业逻辑:实现商业逻辑的最佳方法是通过session ejb(下文将会提及)。
  数据访问:实现数据访问的最佳方法是在entity ejb(下文将会提及),以及使用jdbc。
  backend系统集成:可使用各种不同的技术来与backend系统集成。最佳的选择在于backend系统的确切种类。
  你也许会问:为什么要这么多层呢?这是由于分层的方法可得到一个更便于扩展的企业应用。它可让每个层集中在一个特定的角色上--例如,让一个web服务器提供网页服务,一个应用服务器来提供应用服务,以及一个数据库服务器来提供数据库服务。
  由于j2ee构建在java 2平台标准版本上(j2se),因此它可提供与j2se一样的所有优点和特色。包括有“写一次,到处运行”的便利、用作数据库访问的jdbc,与现有企业资源交互的corba技术,以及一个经过验证的安全模型。在这个基础上,j2ee还加入了对企业javabean(ejb)组件、java servlets, javaserver pages (jsps)和xml技术的支持。
  weblogic server的分布式体系
  j2ee提供了一个框架--一个标准的api--用作开发分布式的体系。实现这个框架的引擎工具留给第三方厂商完成。一些厂商将着重于实现j2ee体系中的某些组件。例如,apache的tomcat为jsp和servlet提供支持。bea system通过它的weblogic server产品实现了j2ee的全部特性。
  通过提供j2ee规范的一个完整实现,weblogic server可用来建立及配置易于扩展和分布式的应用。weblogic server和j2ee为你处理一些常见的编程任务。包括有提供事务服务,安全领域、认证信息、命名和目录服务、数据库访问和连接池、线程池、负载均衡和容错。
  通过以一种易于使用和标准的方式提供这些常见的服务,类似weblogic server的产品可提供更富扩展性和便于维护的应用。结果是可为大量的用户提供可用性更强的应用。
  j2ee技术
  在以下的部分中,我们将讨论构成j2ee的每一种技术,并且看看weblogic server如何在一个分布式的应用中支持它们。最常用的j2ee技术可能是:jdbc, jndi, ejb, jsps和servlets,因此我们也着重讨论这些方面。
  图2表示了在一个分布式的应用中,每项j2ee技术最常用在哪里。
  ****图2************
  (n层应用体系的一个例子)
  java数据库连接(jdbc)
  jdbc api以一个统一的方式访问各种数据库。与odbc类似,jdbc将开发者和私有数据库之间的问题隔离开来。由于它建立在java上,因此jdbc可以提供平台无关的数据库访问。
  jdbc定义了4种不同的驱动,具体来说,包括有:
  类型1:jdbc-odbc桥
  在jdbc刚产生时,jdbc-odbc桥是非常有用的。通过它,开发者可以使用jdbc来访问一个odbc数据源。缺点是,它需要在客户机器上安装有一个odbc驱动,该机器通常是应该运行微软windows系统的。使用这一类的驱动器,你就会失去jdbc平台无关的好处。此外,odbv驱动器需要客户端的管理。
  类型2:jdbc-native驱动桥
  jdbc-native驱动桥提供了一个建筑在本地数据库驱动上的jdbc接口--没有使用odbc。jdbc驱动将标准的jdbc调用转变为对数据库api的本地调用。使用类型2的驱动也会失去jdbc平台无关性的好处,并且需要安装客户端的本地代码。
  类型3:jdbc-network桥
  jdbc-network桥不需要客户端的数据库驱动。它们使用网络-服务器中层来访问一个数据库。这会引出诸如负载均衡、连接池等技术,数据缓冲也是可能的。由于类型3的驱动通常可带来相对小的下载时间,它是平台无关的,并且不需要客户端的安装和管理,因此很适合用作internet的应用。
  类型4:纯java驱动
  类型4使用纯java数据库驱动来提供直接的数据库访问。由于类型4驱动运行在客户端,并且直接访问数据库,因此运行在这个模式暗示要使用一个两层的体系。要在一个n层的体系中使用类型4的驱动,可以通过一个包含有数据访问代码的ejb,并且让该ejb为它的客户提供一个数据库无关的服务。
  weblogic server为一些很常用的数据库提供了jdbc驱动器,包括有oracle、sybase、microsoft sql server, 和informix。它还带有一个cloudscape的jdbc驱动,这是一个纯java dbms,不过weblogic server自带的是一个评估版本。
  接着我们来看一个例子。
  jdbc例子
  在例子中,我们假设你已经在cloudscape中设置了一个phonebook数据库,该数据库包含有一个contact_table表,里面有name和phone字段。我们首先载入cloudscape的jdbc驱动,接着向driver manager请求获得一个到phonebook cloudscape数据库的一个连接。使用这个连接,我们建立了一个statement对象,并且使用它来执行一个简单的sql查询。最后,循环得到结果集的所有项目,将name和phone字段的内容写入到标准的输出中。
  import java.sql.*;
  
  public class jdbcexample
  {
  public static void main( string args[] )
  {
  try
  {
  class.forname("com.cloudscape.core.jdbcdriver");
  connection conn = drivermanager.getconnection("jdbc:cloudscape:phonebook");
  statement stmt = conn.createstatement();
  string sql = "select name, phone from contact_table 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();
  }
  }
  }
  接着,我们将介绍jdbc在企业应用中的使用。
  企业应用中的jdbc
  上面的例子是很简单的。它使用的仍然是一个两层的体系。在一个n层的企业应用中,客户将与一个ejb通信,并且会进行数据库的连接。为了提高扩展性和性能,weblogic server提供连接池(connection pools)的支持。
  通过在服务器启动的时候建立一个数据库的连接池,连接池可减少建立和中断数据库连接时的系统开销。如果有数据库连接的需求,weblogic server可从池中选择一个,而不是创建一个。weblogic server的连接池在weblogic.properties中定义(具体可参考你的weblogic.properties中的例子和weblogic server中的文档)。
  另一个企业应用中经常用到的数据库特性是支持事务。事务是一组语句,不过为了保持数据的完整性,这组语句都被看成是一个单一的语句。默认的情况下,jdbc工作在自动提交(auto-commit)的事务模式。你可以使用connection类的setautocommit()方法来覆盖它。
  现在我们对jdbc已经有一个了解了。接着我们将介绍jndi。
  java命名和目录接口(java naming and directory interface,jndi)
  jn

扫描关注微信公众号