1、简介
Java EE的全称是Java Platform, Enterprise Edition。早期Java EE也被称为J2EE,即Java 2 Platform Enterprise Edition的缩写。从J2EE1.5以后,就改名成为Java EE。一般来说,企业级应用具备这些特征:1、数据量特别大;2、用户特别多;3、性能要求高;4、安全性要求高;5、生命周期长。企业级应用就要考虑数据存储和查询的问题、系统訪问快慢即性能问题、怎样使用事务保证安全的问题、怎样使系统可扩展易维护的问题。这就要用到分布式,涉及远程方法调用,服务通信,事务和服务等技术,对应于Java EE里的EJB、RMI、JNDI、JTA等。Java EE提供了一个框架、一套标准接口,用于开发分布式结构的应用,但它并没有提供实现。接口的意义在于让不同的厂商由于遵循共同的接口而全然解除依赖关系。Java EE提供接口之后,第三方厂商或专注于整个Java EE架构中的特定组件,如Apache的Tomcat实现了JSP和Servlet;或对J2EE规范提供了一个较为完整的实现,如JBoss和BEA公司的WebLogic。
2、Java EE架构
Java EE的官方规范对Java EE的描述如下:
J2EE平台由一整套服务(services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的主要技术规范进行简单的描述:
-
- 配置文件(profiles),Java EE 平台针对特定类别应用程序的配置,所有 Java EE 配置文件都有一套共同的功能,如命名和资源注入、打包规则、安全要求等。
-
- 应用组件(Application Components),Java EE 运行时环境定义了四种应用程序组件类型:
(1)应用程序客户端(Application clients)是 Java 编程语言程序,通常是在桌面计算机上执行的图形用户界面程序。
(2)小应用程序(Applets)是图形用户界面组件,通常在网络浏览器中执行,但也可在支持小应用程序编程模型的各种其他应用程序或设备中执行。小应用程序可用于为 Java EE 应用程序提供强大的用户界面。
(3)网络容器(Web container):小服务程序(Servlets)、JSP 页面(Java Server Pages)、JSF 应用程序(JavaServer Faces technology)、过滤器和网络事件监听器通常在网络容器中执行,并可响应网络客户端的 HTTP 请求。Servlets、JSP 页面、JSF 应用程序和过滤器可用于生成作为应用程序用户界面的 HTML 页面。它们还可用于生成 XML 或其他格式的数据,供其他应用程序组件使用。Servlet、JSP 页面或 JSF 应用程序、网络过滤器和网络事件监听器统称为 “网络组件”。网络应用程序由网络组件和 HTML 页面等其他数据组成,网络组件在网络容器中执行。
Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,Servlet和CGI脚本类似,当被请求时开始执行,可以生成动态的页面,在客户端Session中保存客户的数据。Servlet标准定义了动态生成HTML、XML或其他格式文档的Web网页的技术标准。Serlvet八大内置对象如下:
- 应用组件(Application Components),Java EE 运行时环境定义了四种应用程序组件类型:
对象 | 类型 | 描述 |
---|---|---|
request | HttpServletRequest | 与Servlets相同 |
response | HttpServletResponse | 与Servlets相同 |
session | HttpSession | 用于跟踪用户状态 |
config | ServletConfig | JSP初始配置 |
out | JspWriter | 用于从scriptlets输出动态内容 |
pageContext | PageContext | 访问一些页面属性 |
application | ServletContext | 与Servlet容器通信 |
page | HttpJspPage | 表示从JSP产生的Servlet实例 |
JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求后对页面中的Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。JSP通常在大量的HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。
(4)EJB(Enterprise Java Beans) 组件在支持事务的托管环境中运行。EJB通常包含 Java EE 应用程序的业务逻辑,即企业业务逻辑。EJB可使用 SOAP/HTTP 协议直接提供网络服务。EJB提供了一个开发和实施分布式商务逻辑的框架,大大地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件如何与EJB容器(container)进行交互。容器负责提供公用服务,如目录服务、事务管理、安全性、资源缓冲池以及容错性等。但EJB并不是实现J2EE的唯一途径。从企业应用多层结构的角度来看,EJB是业务逻辑层的中间件技术。与JavaBeans的关键不同是它提供了事务处理的能力,业务逻辑代码即解决、达到特定业务领域的需求,如银行、零售、金融等,又称EJB处理的业务逻辑层。EJB又分为如下几种Bean:
名称 | 作用 |
---|---|
Session Beans | Session Beans分为Stateless Session Beans,用于表示应用程序的业务逻辑不存储客户端特定的状态;以及Stateful Session Beans,用于表示应用程序的业务逻辑可以存储客户端特定的状态。Session Beans是对业务逻辑的封装,类似于Service层。它可以以local,remote,webservice 服务的方式被client调用 |
Entity Beans | 用于表示应用程序的数据模型,通常与数据库表的行对应;也可用于持久性存储和检索数据 |
Message Driven Beans | 用于异步处理消息的组件,通常与消息队列集成,处理来自其他组件的消息 |
-
- 容器(Containers),为 Java EE 应用程序组件提供运行时支持。Java EE 应用程序组件从不与其他 Java EE 应用程序组件直接交互。它们使用容器的协议和方法进行交互并与平台服务交互。在应用组件和 Java EE 服务之间插入容器可让容器透明地注入组件所需的服务,如声明式事务管理、安全检查、资源池和状态管理。
(1)容器需要满足Java SE(Java Platform, Standard Edition)所述要求。
(2)Java EE 产品提供商通常使用现有的事务处理基础架构并结合 Java SE来实现 Java EE 服务器端功能。
Java EE中,容器的具体实现有这几种:Application Client容器、Applet Client容器、Web容器、EJB容器。Tomcat实际上是Web容器,包括JSP容器和Servlet容器。JBoss和WebLogic是Web容器和EJB容器。
- 容器(Containers),为 Java EE 应用程序组件提供运行时支持。Java EE 应用程序组件从不与其他 Java EE 应用程序组件直接交互。它们使用容器的协议和方法进行交互并与平台服务交互。在应用组件和 Java EE 服务之间插入容器可让容器透明地注入组件所需的服务,如声明式事务管理、安全检查、资源池和状态管理。
-
- 资源适配器(Resource Adapters),通常用于实现与外部资源管理器的网络连接。资源适配器可通过实施 Java EE 标准服务 API(如 JDBC驱动程序)或通过定义资源适配器来扩展 Java EE 平台的功能。资源适配器还可以提供完全本地化的服务,如本地资源交互。资源适配器通过 Java EE SPI(Java EE service provider interfaces)与 Java EE 平台接口交互。
-
- 数据库(Database),Java EE 平台需要一个可通过 JDBC(Java Database Connectivity) API 访问的数据库来存储业务数据。
-
- Java EE标准服务(Java EE Standard Services),Java EE标准服务由以下几部分组成:
(1)HTTP,HTTP 客户端 API 由 java.net 软件包定义。HTTP 服务器端 API 由 servlet、JSP 和 JSF 接口以及作为 Java EE 平台一部分的网络服务支持定义。
(2)HTTPS,在 SSL 协议上使用 的HTTP 协议。
(3)Java 事务 API(Java Transaction API,JTA)。包括:应用级分界接口,由容器和应用组件用来划分事务边界;事务管理器和资源管理器之间的接口,用于 Java EE SPI 层。
(4)RMI-IIOP。RMI(Remote Method Invocation,远程方法调用)是Java的分布式对象标准,允许位于不同主机上的Java类之间进行通信。Java RMI是个应用程序编程接口(API),还是个分布对象模型;使用RMI,Java程序员可以像调用本地操作一样进行网络调用,从而很容易地构造分布式系统。IIOP协议本来是CORBA的一种传输协议,和RMI结合在一起,使得整合非Java对象变得更加简单。
(5)Java IDL,在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并在CORBAORB中部署,或者创建 Java类作为和其他ORB一起部署的CORBA对象的客户。后者可用于遗留系统的集成。
(6)JDBC API,用于连接关系型数据库系统的 API。JDBC API为访问不同的数据库提供了一种统一的途径,像ODBC(Open Database Connectivity,开放数据库连接)一样,JDBC对开发者屏蔽了一些细节问题。另外,JDBC对数据库的访问也具有平台无关性。
(7)Java Persistence API, Java持久性API是管理持久性和对象/关系映射的标准 API。
(8)JMS(Java Message Service),用于和面向消息的中间件相互通信的API,支持可靠的点对点消息传递以及发布-订阅模式。
(9)JNDI(Java Naming and Directory Interface),命名和目录访问的标准 API。JNDI API 包括两个部分:应用组件访问命名和目录服务时使用的应用级接口;附加命名和目录服务提供商的服务提供商接口。JNDI API用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源,如DNS和LDAP、本地文件系统、应用服务器中的对象。
(10)JavaMail,JavaMail API 包括两个部分:应用程序组件用于发送邮件的应用程序级接口,以及 Java EE SPI 级的服务提供商接口。
(11)JAF(JavaBeans Activation Framework),JavaBeans激活框架。
(12)XML Processing,为解析 XML 文档的行业标准 SAX 和 DOM API 提供支持,并为 XSLT 转换引擎提供支持。XML用来在不同的商务过程中共享数据。
(13)Java EE Connector Architecture,允许支持访问企业信息系统的资源适配器插入任何 Java EE SPI。
(14)Security Services,Java Authentication and Authorization Service (JAAS) 使服务能够对用户进行身份验证和实施访问控制。
(15)Web Services,为网络服务客户端和网络服务端点提供全面支持。
(16)Concurrency Utilities,为 Java EE 应用程序组件提供异步功能:托管执行器服务、托管计划执行器服务、托管线程工厂和上下文服务。
(17)Batch,为批处理应用程序提供了一个编程模型,并为调度和执行作业提供了一个运行时。
(18)Management,定义了使用特殊管理企业 bean 管理 Java EE 服务器的 API。
(19)Deployment,定义了部署工具与 Java EE 产品之间的规范。
- Java EE标准服务(Java EE Standard Services),Java EE标准服务由以下几部分组成:
-
- 互操作性(Interoperability),上述许多应用程序接口提供了与不属于 Java EE 平台的组件(如 CORBA 服务),他们需满足一定的互操作性。
-
- 产品要求灵活性(Flexibility of Product Requirements),典型的低端 Java EE 产品将支持使用流行浏览器中 Java 插件的小程序,支持各自 Java 虚拟机中的应用程序客户端,并提供一个同时支持网络组件和企业 bean 的服务器;高端 Java EE 产品可能会将服务器组件分成多个服务器,每个服务器都可以分布在一系列机器上,并实现负载均衡。
-
- Java EE产品打包(Java EE Product Packaging),
-
- Java EE产品扩展(Java EE Product Extensions)
-
- 平台角色(Platform Roles),典型的 Java Platform 企业版角色由以下组成:
(1)Java EE 产品提供者(Java EE Product Provider),Java EE 产品提供商必须提供应用程序部署和管理工具。部署工具使部署者能够在 Java EE 产品上部署应用程序组件。管理工具允许系统管理员管理 Java EE 产品和部署在 Java EE 产品上的应用程序。
(2)应用组件提供者(Application Component Provider),例如,HTML 文档设计师、文档程序员和企业 bean
开发人员。
(3)应用程序组装器(Application Assembler)
(4)部署者(Deployer)
(5)系统管理员(System Administrator)
(6)工具提供者(Tool Provider)
(7)系统组件提供者(System Component Provider)
- 平台角色(Platform Roles),典型的 Java Platform 企业版角色由以下组成:
-
- 平台规范(Platform Contracts)
(1)Java EE APIs
(2)服务提供接口(Java EE Service Provider Interfaces, SPIs)
(3)网络协议(Network Protocols)
(4)部署描述符和注解(Deployment Descriptors and Annotations)
- 平台规范(Platform Contracts)
最后,Java EE的简洁描述可以用下面这张图来表示: