1.2 Java EE简介
Java EE是建立在Java平台上的企业级应用的解决方案。其技术的基础是Java平台,不但有Java SE平台的所有功能,同时还提供了对EJB、Servlet、JSP、XML等技术的全面支持,最终目标是为使用Java技术开发服务器端的应用提供了一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、部署和管理。
Java EE是一个标准,一种规范,而不是一个现成的产品。各个平台开发商,如IBM、BEA公司等,按照Java EE规范分别开发了不同的Java EE应用服务器,以及开发Java EE企业级应用的IDE工具。Java EE应用服务器是Java EE企业级应用的部署平台,由于它们都遵循了Java EE规范,因此,使用Java EE技术开发的企业级应用可以部署在各种Java EE应用服务器上。
1.2.1 Java EE体系结构
为了规范使用Java EE架构来构建企业级应用,Sun公司给出了一个建议性的Java EE应用设计模型,如图1-11所示。
图1-11 Java EE体系结构
这个模型提供了实施Java EE企业级应用的体系结构、设计模式和相关的代码规范。
通过应用Java EE体系结构所描述的体系模型,能够部分简化架构企业级应用这项复杂的工作。Java EE体系是开发人员设计和优化Java EE组件的基本原则,同时为围绕开发工作进行职能分工给出了指导性策略,以帮助应用开发设计人员合理地分配技术资源。
通过分析Java EE应用设计模型,可以看出Java EE架构分为三层:客户层、中间层及企业信息系统层,其中中间层又分为Web层和业务层,如图1-1 2所示。
图1-12 Java EE多层模型
● 客户层
客户层提供用户与应用程序交互的方式。这种交互可以是通过Web浏览器实现的,也可以通过Web服务接口以编程方式实现。
在一个基于Web的Java EE应用中,用户通过浏览器与部署在Web服务器上的应用程序交互,这时,客户层中的就是用户的浏览器,用户在浏览器中发出请求,查看Web服务器的某个页面,或输入信息,提交到Web服务器上;Web服务器将Web层中的静态HTML页面或由JSP或Servlet生成的动态HTML页面传送给浏览器。
在一个不是基于Web的Java EE应用程序中,客户层中的是一个独立的客户端程序。客户端程序可能会包括JavaBean,JavaBean处理用户的输入信息,并将输入发送到业务层中运行的Enterprise Bean来处理。
● Web层
Web层使客户层可以与驻留在其他层的应用程序逻辑通信和交互。在典型的Web应用程序中,通常一些或全部应用程序逻辑就驻留在Web层。
Java EE的Web层通常由JSP页面,以及显示HTML页面的Servlet组成。就像客户层一样,Web层也可能会包括JavaBean来管理用户的输入,并将输入发送到业务层中运行的Enterprise Bean来处理。
● 业务层
运行在业务层的EJB负责执行整个应用程序中的业务逻辑。
一方面,EJB从客户层中接收数据,并对数据进行加工处理,再将数据发送到企业信息系统层存储。另一方面,EJB还从企业信息系统层中检索数据,并将数据送回客户程序,显示给用户。因此业务层经常被称为EJB层。
● 企业信息系统层
企业信息系统层(EIS层)包含整个企业使用的数据和服务。它提供了对企业资源的访问手段,这些企业资源包括数据库、主机、客户关系管理(CRM)应用以及ERP(企业资源规划)系统。中间层使用专用于资源的协议与EIS层中的组件通信。例如,为了与关系数据库通信,中间层通常要使用JDBC驱动程序。对于ERP系统而言,还要使用专用的适配器。
1.2.2 Java EE组件及容器
1.Java EE组件
一个多层的分布式的应用模型意味着应用逻辑根据功能划分成组件,并且可以在同一个服务器或不同的服务器上安装这些组件。一个应用组件应被安装在什么地方,取决于该应用组件属于多层的Java EE环境中的哪一层。
Java EE定义了4种组件:Applets和Application Client是客户层中包含的组件;Web组件(包括JSP和Servlet)放置在Web层;还有Enterprise JavaBean放置在业务层,如图1-13所示。
图1-13 Java EE组件
● 客户层组件
Applet是嵌在浏览器中的一种轻量级客户端,一般而言,仅当使用Web页面无法充分地表现数据或应用界面时才使用它。Applet是一种替代Web页面的手段,仅能够使用Java SE开发Applet,Applet无法使用Java EE的各种Service和API,这是基于安全性的考虑。
Application Client相对Applet而言是一种较重量级的客户端,它能够使用Java EE的大多数Service和API。Java EE应用程序客户端与一般的Java应用程序的区别在于,它必须在Java EE上运行,所以能够访问其他Java EE组件。而一般的Java应用程序不能访问像EJB那样的Java EE组件。
● Web层组件
Web层中包括两种组件:JSP和Servlet。JSP和Servlet都是Web服务器的功能扩展,接收Web请求,返回动态的Web页面。Web容器中的组件可使用EJB层中的组件完成复杂的商业逻辑。
● 业务层组件
业务层,也就是EJB层,它是Java EE的核心之一,主要用于服务器端的业务逻辑的实现。EJB规范定义了一个开发和部署分布式商业逻辑的框架,以简化企业级应用的开发,使其较容易地具备可伸缩性、可移植性、分布式事务处理、多用户和安全性等。
2.Java EE容器
所有的Java EE组件都运行在容器中。Java EE将组成一个完整企业级应用的不同部分纳入不同的容器,每个容器中都包含若干组件,这些组件是需要部署在相应容器中的。通常,容器提供了运行于其中的组件的控制环境。容器提供了其中的组件可以使用的通用服务,这样组件开发人员无须自己编写这些服务。
Java EE容器包括4个:Applet容器和Application Client容器,这些是客户端容器;Web组件容器和EJB容器,这些是服务器端容器,如图1-14所示。
图1-14 Java EE容器
Applet容器包含的组件为Applet;Application Client容器包含的组件为Application Client;Web容器包含两种组件JSP和Servlet;EJB容器包含组件EJB。
容器为组件的运行提供环境。例如,EJB容器用来容纳业务逻辑,并为业务逻辑截取请求。EJB在EJB容器中运行,EJB容器为EJB提供所有典型的中间层服务,如事务管理、安全、远程连接、生存周期管理和数据库连接缓冲。组件开发人员不必关心这些资源的管理。
Web容器截取通过HTTP、FTP、SMTP或其他协议发送的请求。Web应用容器为Servlet和JSP页面提供的资源与EJB容器提供的资源相同。Web容器允许Servlet、JSP组件和其他Java类在容器中部署和执行。JSP和Servlet这种Web组件依赖Web容器支持诸如客户请求和响应及Enterprise Bean查询等。像Java Naming and Directory Interfac(e Java命名和目录接口,JNDI)、连接池和事务服务都可以在容器层次上配置。
客户端应用是独立的Java应用,它们在远程的独立JVM上运行(与Web容器和EJB容器所运行的JVM不同)。应用客户端容器为这些应用截取请求。运行在应用客户端容器上的程序非常类似于带有main()方法的Java程序,不过,程序不再由JVM控制,而是由一个容器(也就是应用客户端容器)控制。在应用客户端容器内运行的程序能够访问远程应用服务器上的JAXP、JDBC、JMS和JAAS资源。
Applet容器是一个特殊的容器,它为在浏览器内运行的Java程序截取请求。Applet容器不提供任何对其他资源(比如JDBC和JMS)的访问。在Applet容器内运行的Applet必须自己直接向应用服务器请求资源(而不是把请求发送给容器,然后由容器发送请求给应用服务器)。
当使用容器提供的服务时,组件开发人员可能不得不将对环境的某些控制权交给容器。第三方开发商构建这些容器,但是他们必须遵守公共规范中明确规定的指导原则,尽管允许每一个开发商以特有的方式实现容器的某些部分,但是他们还是必须遵守这些规则,以确保应用程序可以移植。
1.2.3 Java EE打包与部署
Java EE平台允许开发人员可以在其上整合不同的组件,这个将组件整合为模块并将模块整合为商业应用程序的过程叫做打包。而在一个可使用的环境中安装和定制应用程序的过程则叫做部署。
Java EE规范不仅为Java EE应用程序的结构建立和生成提供了指导,还定义了怎样对EJB、JSP和Servlet等组件打包。它定义将一个或多个组件集成为一个模块,模块作为最小单元提供独立部署。也就是说,一个模块可以直接部署到Java EE容器中运行,或者多个模块可以集合起来组建成一个Java EE应用程序部署。比如说,几个EJB组件可以被打包成EJB模块,同时这个EJB模块也可以进一步与其他模块结合起来,建造成一个完成的Java EE应用部署。Java EE平台为打包和部署提供了相应的工具,使得其过程相对简单,如图1-15所示。
图1-15 Java EE打包部署
EAR是Enterprise Application Archive的缩写。EAR文件用来把一个或多个Java EE组件封装到单个模块里面,以便一起部署并装入到服务器上。
Java EE规范描述4种类型的模块:Web模块、EJB模块、应用程序客户端模块和资源适配器模块。当部署到Java EE应用程序服务器时,通常会将所有这些模块都压缩到单个Java EE应用程序EAR文件中。每个模块都有相应的部署描述符,部署描述符是一个XML格式的文件,它描述了相应模块部署时的配置信息。整个Java EE程序的EAR文件也有一个部署描述符:application.xml。
● Web模块
Web模块包含Web层的组件及资源,由JSP、Servlet、JSP标签库、HTML或XML文档,以及其他公共资源如图片,applet类文件组成。在Web模块中,部署描述符web.xml具有Servlet初始化和映射信息以及用于在应用程序服务器中运行Web模块的其他设置。Web模块会被打包成Web Application Archive文件,即WAR文件。
● EJB模块
EJB模块包含EJB和EJB部署描述符。它们包含应用程序的业务逻辑,通常会被Web模块、Application Client模块和其他EJB模块调用。EJB模块会被打包成Java Archive文件,即JAR文件。JAR文件包含一个或多个EJB组件。
● 应用程序客户端模块
应用程序客户端模块包含应用客户类,也被打包成Java Archive文件,并且还有一个部署描述符application-client.xml。应用程序客户端模块中除了包含运行独立的客户端所需要的类,当然还包括访问JDBC、JMS、JAXP、JAAS或者EJB客户所需的任何客户端库。部署时,JAR文件包含一个独立的Java应用程序,会在应用程序的客户端容器中运行。
● 资源适配器模块
资源适配器模块包含Java连接器、资源适配器和帮助库函数及相关资源。还有一个部署描述符ra.xml文件。资源适配器RAR文件通常包含在一个企业信息系统中,来实现一个JCA资源适配器所需的本地库和Java类。资源适配器不在容器内执行,相反,它们应该作为应用服务器和外部企业信息系统之间的桥接软件执行。
对于一个Java EE企业应用程序来讲,它就是由一个或多个Web、EJB或应用客户端模块的组合。