- Java EE 程序设计
- 郝玉龙编著
- 5110字
- 2025-02-21 11:23:45
1.4 Java EE技术框架
作为一个企业分布式应用开发标准集,Java EE由一系列的企业应用开发技术来最终实现。Java EE技术框架可以分为四个部分:组件技术、服务技术、通信技术和架构技术。整个Java EE技术框架体系如图1-4所示。

图1-4 Java EE技术体系结构
1.4.1 组件技术
组件是Java EE应用的基本单元。Java EE 8提供的组件主要包括三类:客户端组件、Web组件和业务组件。
1.客户端组件
Java EE客户端既可以是一个Web浏览器、一个Applet,也可以是一个应用程序。
1)Web浏览器
Web浏览器又称为瘦客户。它通常只进行简单的人机交互,不执行如查询数据库、业务逻辑计算等复杂操作。
2)Applet
Applet是一个用Java语言编写的小程序,运行在浏览器上的虚拟机里,通过HTTP等协议和服务器进行通信。
3)应用程序客户端
Java EE应用程序客户端运行在客户端机器上,它为用户处理任务提供了比标记语言更丰富的接口。典型的Java EE应用程序客户端拥有通过Swing或AWT API建立的图形用户界面。应用程序客户端直接访问服务器在EJB容器内的EJB组件。当然,Java EE客户应用程序也可像Applet客户那样通过HTTP连接与服务器的Servlet通信。与Applet不同的是,应用程序客户端一般需要在客户端进行安装,而Applet是通过Web下载,无须专门安装。
2.Web组件
Web组件是在Java EE Web容器上运行的软件程序。它的功能是基于HTTP协议对Web请求进行响应。这些响应其实是动态生成的网页。用户每次在浏览器上单击一个链接或图标,实际上是通过HTTP请求向服务器发出请求。Web服务器负责将Web请求传递给Web组件。Java EE平台的Web组件对这些请求进行处理后生成动态内容再通过Web容器返回给客户端。
Java EE Web组件包括Servlet、JSP和WebSocket。
Servlet是Web容器里的程序组件。Servlet实质上是动态处理HTTP请求和生成网页的Java类。
JSP是Servlet的变形,它像是文本格式的Servlet,它的写法有些像写网页,这样就为应用开发者(特别是不熟悉Java语言的)提供了方便,JSP在Web容器内会被自动编译为Servlet,编写JSP比编写Servlet程序更简洁。
WebSocket用来实现客户端与服务器之间基于连接的交互。
3.业务组件
业务组件指运行在图1-3所示的业务逻辑层的组件,它们主要完成业务逻辑处理功能。业务组件包含EJB组件和Entity组件两大类。EJB组件用于实现特定的应用逻辑,而不是像Web组件一样负责处理客户端请求并生成适应客户端格式要求的动态响应。EJB组件能够从客户端或Web容器中接收数据并将处理过的数据传送到企业信息系统来存储。由于EJB依赖Java EE容器进行底层操作,使用EJB组件编写的程序具有良好的扩展性和安全性。
Java EE支持两种类型的EJB组件:Session Bean(会话Bean)和Message-Driven Bean(消息驱动Bean)。
Entity组件主要用来完成应用数据的持久化操作。
1.4.2 服务技术
Java EE容器为组件提供了各种服务,这些服务是企业应用经常用到但开发人员难以实现的,例如,命名服务、部署服务、数据连接、数据事务、安全服务和连接框架等。现在这些服务已经由容器实现,因此Java EE组件只要调用这些服务就可以了。
1.命名服务
Java EE命名服务提供应用组件(包括客户、EJB、Servlet、JSP等)程序命名环境。在传统的面向对象编程中,如果一个类A要调用另一个类B, A需要知道B的源程序然后在其中创建一个B的实例。当一方程序改变时,就要重新编译,而且类之间的连接比较混乱。JNDI(Java Naming and Directory Interface, Java命名和目录服务接口)简化了企业应用组件之间的查找调用。它提供了应用的命名环境(Naming Environment)。这就像一个公用电话簿,企业应用组件在命名环境注册登记,并且通过命名环境查找所需其他组件。
JNDI API提供了组件进行标准目录操作的方法,例如,将对象属性和Java对象联系在一起,或者通过对象属性来查找Java对象。
2.数据连接服务
数据库访问几乎是任何企业应用都需要实现的。JDBC(Java DataBase Connectivity, Java数据库连接)API使Java EE平台和各种关系数据库之间连接起来。JDBC技术提供Java程序和数据库服务器之间的连接服务,同时它能保证数据事务的正常进行。另外,JDBC提供了从Java程序内调用SQL数据检索语言的功能。Java EE 8平台使用JDBC 4.1。
3.Java事务服务
JTA(Java Transaction API, Java事务API)允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。JTA用于保证数据读写时不会出错。当程序进行数据库操作时,要么全部成功完成,要么一点也不改变数据库内容。最怕的是在数据更改过程中程序出错,那样整个系统的业务状态和业务逻辑就会陷入混乱。所以,数据事务有一个“不可分微粒”的概念,是指一次数据事务过程不能间断,JTA保证应用程序的数据读写进程互相不干扰。如果一个数据操作能整个完成,它就会被批准;否则,应用程序服务器就当什么都没做。应用程序开发者不用自己实现这些功能,从而简化了数据操作。数据事务技术使用JTA的API,它可以在EJB层或Web层实现。
4.安全服务
JAAS(Java Authentication Authorization Service, Java验证和授权服务)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统免受用户的攻击。它让用户能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议)或Kerberos等通过一种通用的可配置的方式集成到系统中。
5.Java连接框架
JCA(Java Connector Architecture, Java连接框架)是一组用于连接Java EE平台到企业信息系统(EIS)的标准API。企业信息系统是一个广义的概念,它指企业处理和存储信息数据的程序系统,譬如企业资源计划(ERP)、大型机数据事务处理以及数据库系统等。由于很多系统已经使用多年,这些现有的信息系统又称为遗产系统(Legacy System),它们不一定是标准的数据库或Java程序,例如,非关系数据库等系统。JCA定义了一套扩展性强、安全的数据交互机制,解决了遗留系统与EJB容器和组件的集成问题。这使Java EE企业应用程序能和其他类型的系统进行通话。
6.Web服务
Web服务通过基于XML的开放标准使企业之间进行信息连接,企业使用基于XML的Web服务描述语言(Web Services Description Language, WSDL)来描述它们的Web服务(比如银行转账、价格查询等);通过Internet,系统之间可以使用Web服务注册来查找被登记的服务目录,这样实现了真正在Internet上的信息查询和交换。Java的Web服务实现主要提供与XML和Web服务协议有关的API等。
7.上下文和依赖注入
上下文和依赖注入(Contexts and Dependency Injection, CDI)使得容器以类型安全的松耦合的方式为EJB等组件提供一种上下文服务。它将EJB等受控组件的生命周期交由容器来管理,降低了组件之间的耦合度,大大提高了组件的重用性和可移植性。
1.4.3 通信技术
Java EE通信技术提供了客户和服务器之间及在服务器上不同组件之间的通信机制。Java EE平台支持几种典型的通信技术:Internet协议、RMI(Remote Method Invocation,远程方法调用)、OMGP(Object Manage Group Protocol,对象管理组协议)、消息技术(Messaging)等。
1.Internet协议
Java EE平台能够采用通用的Internet协议实现客户服务器和组件之间的远程网络通信。
TCP/IP(Transport Control Protocol over Internet Protocol,互联协议之上的传输控制协议)是Internet在传输层和Web层的核心通信协议。
HTTP是在互联网传送超文本文件的协议。HTTP消息包括从客户端到服务器的请求和从服务器到客户端的响应,HTTP协议和Web浏览器被称为Internet最普及和最常用的功能。大多数Web服务器都提供HTTP端口和互联网进行通信,在HTTP之上的SOAP(Simple Object Access Protocol,简单对象访问协议)成为受到广泛关注的Web服务基础协议。目前使用最广泛的版本为HTTP 1.1,不过随着HTTP 2以更优异的性能和安全性被广泛应用,Java EE 8规范中也提供了对HTTP 2的支持。
SSL 3.0(Secure Socket Layer,安全套接字层)是Web的安全协议。它在TCP/IP之上对客户和服务器之间的Web通信信息进行加密而不被窃听,它可以和HTTP共同使用(即HTTPS)。服务器可以通过SSL对客户进行验证。
2.RMI
RMI是Java的一组用于开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象(在不同机器操作系统的程序对象),它结合了Java序列化(Java serialization)和Java远程方法协议(Java Remote Method Protocol)。简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用。由于Java EE是分布式程序平台,它以RMI机制实现程序组件在不同操作系统之间的通信。比如,一个EJB可以通过RMI调用网络上另一台机器上的EJB远程方法。
3.OMGP
OMGP协议允许在Java EE平台上的对象通过CORBA技术和远程对象通信。CORBA对象以IDL(Interface Define Language,接口定义语言)定义,程序对象以IDL编译器使对象和ORB(Object Request Broker,对象请求中介)连接;ORB就像是程序对象之间的介绍人,它帮助程序对象相互查找和通信,ORB使用IIOP(Internet Inter-ORB Protocol, Internet间对象请求代理协议)和对象进行通信;OMG是一个广义的概念,Java EE平台要使用Java IDL和RMI-IIOP来实现OMG。
4.Java通信服务技术
Java EE结合使用RMI和OMG来提供组件间的通信服务。Java IDL允许Java客户通过CORBA调用使用IDL定义了的远程对象,它属于Java标准版的技术,它提供的编译器可以根据CORBA对象生成桩(stub, Java客户端接口);Java客户连接桩并以CORBA API访问CORBA对象,编写Java RMI和CORBA的程序比较复杂,Java EE应用服务器的好处是将此过程进行了简化,开发人员可以不必考虑很多多层RMI和CORBA的细节,只要理解其基本概念和使用方法就够了。
5.Java消息技术和邮件技术
JMS(Java Message Service, Java消息服务)API允许Java EE应用程序访问企业消息系统,例如,IBM MQ系列产品和JBoss的JBossMQ。在Java EE平台上,消息服务依靠消息EJB来实现。
Java邮件(Java Mail)API提供能进行电子邮件通信的一套抽象类和接口。它们支持多种电子邮件格式和传递方式。Java应用可以通过这些类和接口收发电子邮件,也可以对其进行扩充。
1.4.4 架构技术
在Java EE 6之前的Java EE规范中,主要从微观的角度来规范企业应用的开发,关注的重点在组件级别上如何处理应用服务器与客户端的交互以及Java EE组件与容器之间的交互。但随着Java EE的广泛应用,在Java EE企业应用的构建过程中一些架构层面上的共性问题(如页面导航、国际化、数据持久化、输入校验等)逐渐显现。这些问题是每个Java EE开发人员构建企业应用时几乎必然遇到的,但Java EE规范并没有对此给出答案,因此,各种第三方架构大行其道,如Struts 2、Hibernate、Spring、Seam等。这些众多的框架给开发人员带来很大的学习压力,也给Java EE服务器厂商带来更多的麻烦,限制了他们为Java EE应用提供更高级的支持。因此,从Java EE 6规范开始,Java EE吸收了业界流行的架构的优点,增加了架构方面的一些标准规范。
1.JSF
JSF(Java Server Faces)是一种用于构建Java EE Web应用表现层的框架标准。它提供了一种以组件为中心的事件驱动的用户界面构建方法,从而大大简化了Java EE Web应用的开发。通过引入基于组件和事件驱动的开发模式,使开发人员可以使用类似于处理传统桌面应用界面的方式来开发Web应用程序。JSF还通过将良好构建的模型-视图-控制器(MVC)设计模式集成到它的体系结构中,使行为与表达清晰分离,确保了应用程序具有更高的可维护性。Java EE 8规范中包含的JSF的版本为2.3。
2.JPA
持久化对于大部分企业应用来说都是至关重要的,因为企业应用中的大部分信息都需要持久化存储到关系数据库等永久介质中。尽管有不少选择可以用来构建应用程序的持久化层,但是并没有一个统一的标准可以用在Java EE环境中。作为Java EE规范中的一部分,JPA(Java Persistence API, Java持久化应用接口)规范了Java平台下的持久化实现,大大提高了应用的可移植性。Java EE 8规范中包含的JPA的版本为2.2。
3.Bean Validation
输入校验是企业应用中一项重要又十分烦琐的任务。在Java EE分层架构的应用中,每一层都需要对企业数据进行校验。然而对于同一个业务数据多次重复实现同样的验证逻辑并不是好的设计方法,它既容易出错,还降低了应用可维护性。为实现企业数据的统一校验,Java EE提出了Bean Validation规范。Java EE 8规范中包含的Bean Validation的版本为2.0。
4.Java EE优点
Java EE体系架构具有以下优点:
(1)独立于硬件配置和操作系统。Java EE应用运行在JVM(Java Virtual Machine, Java虚拟机)上,利用Java本身的跨平台特性,独立于硬件配置和操作系统。JRE(Java 2 Runtime Environment, Java运行环境)几乎可以运行于所有的硬件/操作系统组合之上。因此Java EE架构的企业应用使企业免于高昂的硬件设备和操作系统的再投资,保护已有的IT投资。
(2)坚持面向对象的设计原则。作为一门完全面向对象的语言,Java几乎支持所有的面向对象的程序设计特征。面向对象和基于组件的设计原则构成了Java EE应用编程模型的基础。Java EE多层结构的每一层都有多种组件模型。因此开发人员所要做的就是为应用项目选择适当的组件模型组合,灵活地开发和装配组件,这样不仅有助于提高应用系统的可扩展性,还能有效地提高开发速度,缩短开发周期。
(3)灵活性、可移植性和互操作性。利用Java的跨平台特性,Java EE组件可以很方便地移植到不同的应用服务器环境中。这意味着企业不必再拘泥于单一的开发平台。Java EE的应用系统可以部署在不同的应用服务器上,在全异构环境下,Java EE组件仍可彼此协同工作。这一特征使得装配应用组件首次获得空前的互操作性。
(4)轻松的企业信息系统集成。Java EE技术出台后不久,很快就将JDBC、JMS和JCA等一批标准归纳于自身体系之下,这大大简化了企业信息系统整合的工作量,方便企业将诸如遗产系统、ERP和数据库等多个不同的信息系统进行无缝集成。
(5)旺盛的生命力。Java EE规范秉着兼容包并的原则,版本一直在持续进化,对企业应用开发中不断涌现的新技术(如HTML5、JSON等)及时提供支持。