什么是 JavaEE?
在企业级应用中,都有一些通用企业需求模块,如:数据库连接、邮件服务、事务处理等。既然很多企业级应用都需要这些模块,一些大公司便开发了自己的通用模块服务,即中间件。这样一来,就避免了重复开发,开发周期长和代码可靠性差等问题。但是,各公司的中间件不兼容的问题就出现了,用户无法将它们组装在一起为自己服务。于是,“标准”就应运而生了。
JavaEE 就是基于 Java 技术的一系列标准。
JavaEE 是 Java 平台企业版(Java Platform Enterprise Edition),核心是一组技术规范与指南,其中所包含的各类组件,服务架构和技术层次,都有共同的标准及规格,让各种依云 JavaEE 架构的不同平台之间,存在良好的兼容性。
JavaEE 的13种规范
1. JDBC(Java Database Connectivity)
JDBC 是以统一方式访问数据库的 API。
它提供了独立于平台的数据库访问,也就是说,有了 JDBC API,我们就不必为访问 Oracle 数据库专门写一个程序,为访问 Sybase 数据库又专门写一个程序等等,只需要用 JDBC API 写一个程序就够了,它可以向相应数据库发送 SQL 调用 。JDBC 是 Java 应用程序与各种不同数据库之间进行对话的方法的机制。简单地说,它做了三件事:
- 与数据库建立连接
- 发送操作数据库的语句
- 返回处理结果
2. JNDI(Java Name and Directory Interface)
JNDI 是一组在 Java 应用中访问命名和目录服务的 API。
(命名服务将名称和对象联系起来,我们即可用名称访问对象。JNDI 允许把名称同 Java 对象或资源关联起来,建立逻辑关联,而不必知道对象或资源的物理 ID。) JNDI 为开发人员提供了查找和访问各种命名和目录服务的通用,统一的接口,可访问的目录及服务如下表:
利用 JNDI 的命名与服务功能可满足企业级 API 对命名与服务的访问,诸如 EJB、JMS、JDBC 2.0 以及 IIOP 上的 RMI 通过 JNDI 来使用 CORBA 的命名服务。
JNDI 和 JDBC 类似,都是构建在抽象层上。因为它提供了标准的独立于命名系统的 API,这些 API 构建在命名系统之上。这一层有助于将应用与实际数据源分离,因此不管是访问的 LDAP,RMI 还是 DNS。也就是说,JNDI 独立于目录服务的具体实现,只要有目录的服务提供接口或驱动,就可以使用目录。
3. EJB(Enterprise JavaBean)
J2EE 将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能只是负责发送调用请求和显示处理结果。
在 J2EE中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是 EJB 组件。其实就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。
4. RMI(Remote MethodInvoke)
RMI 是一组用户开发分布式应用程序的 API。
这一协议调用远程对象上的方法使用了序列化的方式在客户端和服务器之间传递数据,使得原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用,即 RMI 机制实现了程序组件在不同操作系统之间的通信。它是一种被 EJB 使用的更底层的协议。
RMI / JNI:RMI 可利用标准 Java 本机方法接口与现有的和原有的系统相连接。
RMI / JDBC:RMI 利用标准 JDBC 包与现有的关系数据库连接。
这就实现了与非 Java 语言的现有服务器进行通信。
5. Java IDL / CORBA(Common Object Request Broker Architecture)
Java 接口定义语言 / 公用对象请求代理程序体系结构。
在 Java IDL 的支持下,开发人员可以将 Java 和 CORBA 集成在一起。他们可以创建 Java 对象并使之可在 CORBA ORB 中展开,或者他们还可以创建 Java 类并作为和其它 ORB 一起展开的 CORBA 对象的客户。后一种方法提供了另外一种途径,通过它 Java 可以被用于将新的应用和旧的系统相集成。
CORBA 是面向对象标准的第一步,有了这个标准,软件的实现与工作环境对用户和开发者不再重要,可以把精力更多地放在本地系统的实现与优化上。
6. JSP(Java Server Pages)
JSP 页面由 HTML 代码和嵌入其中的 Java 新代码所组成,其根本是一个简化的 Servlet 设计。
服务器在页面被客户端请求后,对这些 Java 代码进行处理,然后将执行结果连同原 HTML 代码生成的新 HTML 页面返回给客户端浏览器。
7. Java Servlet
Servlet 是一种小型的 Java 程序,扩展了 Web 服务器的功能,作为一种服务器的应用,当被请求时开始执行。Servlet 提供的功能大多和 JSP 类似,不过,JSP 通常是大多数的 HTML 代码中嵌入少量的 Java 代码,而 Servlet 全部由Java写成并生成 HTML。
8. XML(Extensible Markup Language)
XML 可扩展标记语言,被用来传输和存储数据。XML 的发展和 Java 是相互独立的。不过,它和 Java 具有的相同目标就是跨平台。通过将 Java 与 XML 结合,我们可以得到一个完全与平台无关的解决方案。
9. JMS(Java Message Service)
它是一种与厂商无关的 API,用来访问消息收发系统消息。它类似于 JDBC。JDBC 是可以用来访问不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问消息收发服务的方法,这样就可以通过消息收发服务实现从一个 JMS 客户机向另一个 JMS 客户机发送消息,所需要的是厂商支持 JMS。换句话说,JMS 是 Java 平台上有关面向消息中间件的技术规范。
10. JTA(Java Transaction API)
定义了一种标准 API,应用程序由此可以访问各种事务监控。它允许应用程序执行分布式事务处理,在两个或多个网络计算机资源上访问并且更新数据。JTA和JTS为J2EE 平台提供了分布式事务服务。
JTA 事务比 JDBC 事务更强大,一个 JTA 事务可以有多个参与者,而一个 JDBC 事务则被限定在一个单一的数据库连接。
11. JTS(Java Transaction Service)
JTS 是 CORBA OTS 事务监控器的一个基本实现。JTS 指定了一个事务管理器的实现(Transaction Manager),这个管理器在一个高级别上支持 JTA 规范,并且在一个低级别上实现了 OMG OTS 规范的 Java 映射。一个 JTS 事务管理器为应用服务器、资源管理器、standalone 应用和通信资源管理器提供事务服务。
12. JavaMail
用于访问邮件服务器的 API,提供了一套邮件服务器的抽象类。
13. JAF(JavaBeans Activation Framework)
JAF 是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口。也就是说,JAF 让 Java 程序知道怎么对一个数据源进行查看、编辑、打印等。
JavaMail 利用 JAF 来处理 MIME 编码的邮件附件。