J2EE平台Web应用开发要点摘要:今天,越来越多的开发人员都想编写分布式的,事务型的企业及应用程序,以及平衡速度、安全及服务器方可靠度的技术。如果你已经在这个领域工作,你应该知道在当今的快速变换及需求的电子商务及信息技术的世界里,企业应用程序需要设计、编译、产生低价位的、高速的、占用少量资源的程序。为了缩减开发成本,快速跟踪企业应用的设计和开发,J2EE技术提供了基于组件的设计方法,开发、集成、部署应用程序。J2EE平台提供了多层分布式应用模式,使具有重用的能力,并集成了基于XML的数据交换一个统一的安全模式及灵活的事务控制。很多开源社区也为J2EE平台开发了一些非常实用的框架,尤其是SourceForge社区,现在这些框架的应用也越来越广泛,如主流的,口碑较好的Struts,Spring,Hibernate,分别在MVC模式,IOC(依赖注入),AOP(面向切面编程),O/RMapping(对象关系映射)方面做地非常的优秀。这些优秀的框架都大量地使用了设计模式及Java的反射技术,提供了方便的基于XML文件的配置式的灵活地实现方式,从而在一定程度上减轻了对于后期维护的负担,可以尽量减少修改源代码的可能,也就尽量遵循开闭原则,做到对扩展开放,对修改关闭。关键词:J2EE、容器、事务、Bean、框架、Web应用、企业级、Servlet、JSP一、J2EE的总括1.1J2EE容器瘦客户端的多层应用程序总是很难开发,因为它包括各个层的事务处理、状态管理、多线程、资源池和其他复杂底层细节等等的错综复杂的编码。但是基于组件和平台独立的J2EE平台使J2EE应用程序容易开发,因为商业逻辑被封装在可重用的组件(EJB)中。另外J2EE服务器以容器的形式为所有组件提供底层服务,因此你不必再为这些底层服务二伤脑筋,而可以专注于解决商业问题。1.1.1容器服务容器(Container)是组件和支持组件功能的底层特定平台(如数据库)之间的接口。在运行Web组件、企业Bean或者J2EE应用程序客户端之前,你必须将它们装配到一个J2EE应用程序中,并部署它们到容器中。装配的过程包括为J2EE应用程序的每个组件和J2EE应用程序本身设置容器的配置信息。这些配置信息定制J2EE服务器支持的底层服务,包括安全,事务管理,Java命名和目录接口(JNDI)查找和远程连接等。下面使这些服务的精简描述:J2EE安全模型让你配置Web组件或者企业Bean以使系统资源只被授权用户访问J2EE事务模型让你指定属于同一个事务的多个方法以使这些方法作为一个原子操作被执行JNDI查找服务为企业应用中的多种命名和目录服务提供统一接口使应用程序组件可以统一访问这些命名和目录服务。J2EE远程连接模型管理客户端和企业Bean之间的底层通信。企业Bean被创建后,客户端调用它的方法就像在本地虚拟机中的调用一样。事实上,J2EE体系结构提供可配置服务意味着同一个J2EE应用程序中的组件可以根据不同的部署环境而有不同的行为。例如,一个企业Bean的安全配置可以使它在一种产品环境中有一个级别的数据库数据访问权限,而在另一种产品环境中有不同的数据库数据访问权限。容器也管理着很多不可配置的服务,如企业Bean和Servlet的生命周期,数据库连接池,数据持久化机制和J2EE平台API的访问权等等。尽管数据持久化机制是不可配置服务,但是J2EE体系结构允许你忽略容器管理的持久性(Container-ManagedPersistence,CMP)机制在企业Bean实现中加入合适的代码,当然除非你确实需要比容器管理持久性机制提供的更多的应用程序控制权,否则使用容器管理的持久性。例如你可以用Bean管理的持久性(Bean-ManagedPersistence,BMP)机制来实现自己的查找方法或者创建一个定制的数据库缓冲池。1.1.2容器类型部署过程将J2EE应用程序安装到J2EE容器中。图1展示了组件在容器中的情况:图1J2EE服务器和容器(Container)(1)J2EEserver(J2EE服务器)J2EE产品的运行时服务部分。一个J2EE服务器提供EJB容器(EJBContainer)和Web容器(WebContainer)。所以我们常见的Tomcat严格来说不能说是应用服务器,Tomcat只是Servlet容器,只能说是Web容器,J2EE应用服务器有JBoss,WebLogic等。(2)EJB容器管理J2EE应用程序中企业Bean的运行。企业Bean和它们的容器在J2EE服务其中运行。(3)Web容器管理J2EE应用程序中JSP页面和Servlet组件的运行。Web组件和容器也在J2EE服务其中运行。JBoss是一个J2EE应用服务器,因为JBoss包含了Tomcat,及EJB组件。1.2J2EE核心API和组件J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述(限于篇幅,这里只能进行简单的描述):1、JDBC(JavaDatabaseConnectivity):JDBCAPI为访问不同的数据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDCB对数据库的访问也具有平台无关性。2、JNDI(JavaNameandDirectoryInterface):JNDIAPI被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,或应用服务器中的对象。3、EJB(EnterpriseJavaBean):J2EE技术之所以赢得某体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现J2EE的唯一途径。正是由于J2EE的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。4、RMI(RemoteMethodInvoke):正如其名字所表示的那样,RMI协议调用远程对象上方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。5、JavaIDL/CORBA:在JavaIDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBAORB中展开,或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的应用和旧的系统相集成。6、JSP(JavaServerPages):JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。7、JavaServlet:Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和CGIPerl脚本很相似。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。8、XML(ExtensibleMarkupLanguage):XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合,您可以得到一个完美的具有平台独立性的解决方案。9、JMS(JavaMessageService):MS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,有支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另一种方式来对您的应用与旧的后台系统相集成。10、JTA(JavaTransactionArchitecture):JTA定义了一种标准的API,应用系统由此可以访问各种事务监控。11、JTS(JavaTransactionService):JTS是CORBAOTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持JavaTransactionAPI(JTA)规范,并且在较底层实现OMGOTSspecification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。12、JavaMail:JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。13、JTA(JavaBeansActivationFramework):JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF。1.3J2EE的四层模型J2EE使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。事实上,sun设计J2EE的初衷正是为了解决两层模式(client/server)的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,在这种模式中,第一次部署的时候比较容易,但难于升级或改进,可伸展性也不理想,而且经常基于某种专有的协议。通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。现在J2EE的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层,以下是J2EE典型的四层结构:运行在客户端机器上的客户层组件运行在J2EE服务器上的Web层组件运行在J2EE服务器上的业务逻辑层组件运行在EIS服务器上的企业信息系统(Enterpriseinformationsystem)层软件图2J2EE典型的四层结构1.3.1J2EE应用程序组件J2EE应用程序是由组件构成的.J2EE组件是具有独立功能的软件单元,它们通过相关的类和文件组装成J2EE应用程序,并与其他组件交互。J2EE说明书中定义了以下的J2EE组件:应用客户端程序和applets是客户层组件.JavaServlet和JavaServerPages(JSP)是web层组件.EnterpriseJavaBeans(EJB)是业务层组件.1.3.2客户层组件J2EE应用程序可以是基于web方式的,也可以是基于传统方式的.1.3.3web层组件J2EEweb层组件可以是JSP页面或Servlets.按照J2EE规范,静态的HTML页面和Applets不算是web层组件。正如下图3所示的客户层那样,web层可能包含某些JavaBean对象来处理用户输入,并把输入发送给运行在业务层上的enterprisebean来进行处理。图3Web层组件1.3.4业务层组件业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务层上的enterprisebean进行处理.下图4表明了一个enterprisebean是如何从客户端程序接收数据,进行处理(如果必要的话),并发送到EIS层储存的,这个过程也可以逆向进行。有三种企业级的bean:会话(session)beans,实体(entity)beans,和消息驱动(message-driven)beans.会话bean表示与客户端程序的临时交互.当客户端程序执行完后,会话bean和相关数据就会消失.相反,实体bean表示数据库的表中一行永久的记录.当客户端程序中止或服务器