ASP 开发人员的 J2EE 基础

2012 年 9 月 7 日6270

【内容导航】

文本Tag:

  【IT168 技术文章】

为何要转向 J2EE?

  如果您不是十分渴望冒险投入 J2EE 开发环境,请考虑以下这些 J2EE 好处:

  选择,更多的选择:由于 J2EE 是一个定义良好的标准集,所以在部署自己的代码时有许多 J2EE 实现可供选择。只要您坚持使用标准 API,避免使用厂商专用的扩展,那么应用程序无需变更代码就能在各种各样的实现上运行。

  我们是在说选择吗?:J2EE 实现在从大型机到 Wintel、UNIX 和 Linux 的各种平台上都可用。编写应用程序一次就可将其部署在各种平台上。

  我们不能就安于现状吗?:J2EE 包含一个用于访问许多诸如 CICS、IMS、ERP 和 CRM 这样的遗留 EIS 系统的标准 API。它还包括 Web 服务支持,因此您可以集成 .NET 系统和支持行业 Web 服务标准的其他系统。J2EE 还支持标准消息 API(Java Message Service; JMS)和用于访问关系数据库(Java Database Connectivity; JDBC)的 API。这种广泛的选择允许您集成各种现有系统,而不会损失您对它们的投资。

  机房不再烟雾缭绕:来自世界各地的专家通过 Java Community Process(JCP)开发 J2EE 规范。JCP 发布了初步的规范草案以供公众评论。即使您不主动参与,也总是会知道哪些未来的规范正在筹备之中。该规范还包括一个参考实现,您可以在决定实现它之前使用它来检查新技术。

  J2EE 简介

  Java 2 Enterprise Edition 这个规范是由许多与使用 Java 语言开发分布式应用程序相关的组件规范组成的。您可以使用 J2EE 组件来编写基于 Web 的应用程序和传统的客户机-服务器应用程序,以及使用标准的 API 来连接到诸如关系数据库之类的遗留资源。如果您有 IIS/ASP 开发背景, 那么 Java Servlets和 JavaServer Pages(JSP) 技术就是对您最有用的组件。

  Java Servlet

  Java Servlet 是作为诸如 IIS 或 Apache Web Server 等 Web 服务器的扩展来运行的 Java 类。Java Servlet 类似于 ISAPI 过滤器或 cgi-bin 程序/脚本。servlet 在客户端浏览器直接或间接地调用一个专门配置的 URL 时运行。servlet 能访问 HTTP 请求中的所信息,并能通过提供返回给客户端的内容来直接处理该请求。或者,servlet 能将客户端浏览器重定向到另一个资源。大多数 J2EE Web 应用程序都主要把 servlet 用作 HTML 表单的目标以处理用户输入,然后作相应的处理。响应页面的生成通常委托给一个 JSP 页面。

  JavaServer Page 技术

  JSP 页面类似于 ASP 页面。即它们是包含脚本元素的 HTML 页面,在用户请求该页面时,这些脚本元素就会在服务器上运行。ASP 页面和 JSP 页面之间的一个关键区别在于,ASP 使用 VBScript 或 JScript 作为脚本语言,而 JSP 页面则使用 Java 语言。典型的 JSP 页面包含 Java 代码片断和一些在 JSP 规范中定义的特殊的类 HTML 标签,它们与标准的 HTML 交织在一起,提供静态内容和动态内容的组合。Java Servlet 和 JavaServer Page 技术之间的区别在概念上类似于 ISAPI 过滤器和 ASP 页面之间的区别。在这两种情况下,前者都是可用于直接或间接向其他资源发送 HTML 的一段代码,而后者都是一个可以包含嵌入代码的 HTML 文档。

  Web 服务器和应用服务器

  作为 ASP 开发人员,您知道 ASP 页面由 IIS 调用的脚本引擎执行。您还可以向 Web 应用程序添加 ISAPI 过滤器和 COM 组件,以供 IIS 进行调用。这种方法使得在 IIS 上部署 Web 应用程序非常容易。但这仅限于 Windows 平台,即 IIS 可以运行的唯一平台。而 J2EE 采用不同的方法,因为它的设计目标就是在各种操作系统(包括 Windows)上运行。它并非尝试将运行 Java Servlet 和 JSP 页面的代码直接嵌入到 Web 服务器,而是使用一个称为 应用服务器的单独的服务器组件来运行它们。大多数应用服务器(如 IBM WebSphere)还拥有一个单独的插入组件,它们在应用服务器和特定的 Web 服务器之间架起了一座桥梁。例如,WebSphere 附带了针对 IIS 和 Apache Web 服务器的单独插件。这样,您在运行 J2EE 组件时就可以使用自己选择的 Web 服务器。

  应用服务器作为单独的可插入组件这种功能带来了许多优点:

  Web 服务器选择:您不会被限定使用某个 Web 服务器来提供静态的 HTML 页面。您可以继续使用自己最喜欢的 Web 服务器来实现此目的,并且使用任何应用服务器来处理 Java Servlet 和 JSP 页面。这种能力在您将 ASP 应用程序移植到 J2EE 时特别有用。您可以继续运行 IIS 并分阶段移植应用程序。您不需要一下子改写整个应用程序。

  平台选择:您可以编写 J2EE 应用程序一次,然后在能够运行应用程序服务器的各种操作系统上部署它――包括 Windows、AIX 和 Linux。您不会被限定于某个能够运行特定 Web 服务器的平台。

  应用服务器厂商选择:由于行业标准规范定义了 Java Servlet 和 JavaServer Page 技术,因此您可以编写 J2EE 应用程序一次,然后将其部署到多个应用服务器环境中,如 WebSphere Express 或 Apache Tomcat,后者是一个流行的开放源代码应用服务器。J2EE 还定义了必须如何打包 Web 应用程序,因此,您可以将自己开发的应用程序引入某个 J2EE 环境,在无需更改代码或重新编译应用程序的情况下,就能将它重新部署另一个应用服务器中。将应用程序部署到多个平台也是如此。

  应用服务器如何运行 servlet 和 JSP 代码

  如上所述,J2EE 规范强制人们使用一种标准格式来部署 Java Servlets 和其他 J2EE 组件。一个称为 部署描述符的 XML 文档就是这个标准格式的一部分。部署描述符包含从每个 servlet 到用于调用特定 servlet 的 URL 的映射。应用服务器使用部署描述符中的信息来决定针对给定的请求应该调用哪个 servlet。

  应用服务器调用 JSP 页面的方式不同于调用 ASP 页面的方式。J2EE 应用服务器将各个 JSP 页面转换为单独的特殊 servlet,它在该页面被请求时编译和运行。这个特殊的 servlet 保持加载在内存中,直到 JSP 文件改变为止。这样最大限度地降低了必须为每个 JSP 页面创建和编译一个类而对性能产生的影响。

  模型-视图-控制器体系结构

  J2EE 是根据一个特定的应用程序结构开发的,这个结构称为 模型-视图-控制器(MVC)。MVC 清楚地将应用程序定义为三个分离的层:

  模型:应用程序的数据和业务规则的集合――通常称为应用程序的业务逻辑。

  视图:应用程序的用户界面。

  控制器:定义了应用程序如何对用户输入或模型层的变化作出反应――通常称为应用逻辑。

  MVC 体系结构的优点

  J2EE 中没有任何东西强迫您使用 MVC 体系结构来组织应用程序,但是这样做有许多很好的理由。通过定义三层之间的清楚分离,MVC 允许构成每个层的组件之间进行松散耦合。这使得组件具有更高的可重用性和灵活性。例如,假设您的需求之一是在某个 Web 应用程序中对相同数据支持不同类型的视图,因为不同的部门需要某个数据库中相同数据的不同子集。您需要开发特定于每个所需子集的新视图组件。如果视图逻辑和数据库访问代码是紧密耦合的――ASP 页面就是将数据库访问代码和 HTML 交织在一起,那么每个视图都要包含数据库访问代码。维护重复的代码不仅需要大量的工作,而且可能导致出错。对于这种情形,MVC 体系结构将数据库访问代码作为该模型的一部分,而各种视图组件都可以重用它。

  J2EE 组件和 MVC

  图 1 显示我们到目前为止所讨论的 J2EE 组件如何映射为 MVC 体系结构。注意,模型和视图之间不存在任何联系。控制器的功能是充当两者之间的中转站。

  图 1. MVC 与 J2EE Web 应用程序

  

  在典型场景中,用户提交一个 HTML 表单,这个表单的目标是一个 servlet。servlet 解析输入的数据并使用模型中的类来调用业务逻辑以满足该请求。然后,servlet 将结果传递给一个 JSP 页面,以便向用户显示这些结果。

  JavaServer Faces

  JavaServer Faces (JSF) 规范提供了运行时组件,这些组件使 J2EE 工具厂商为开发基于 Web 的 UI 提供了拖放功能。它还允许厂商开发可供他们的开发工具使用的自定义组件。要了解 JSF 的实际应用,可以考察一下 WebSphere Studio 5.1.1 版中的系列工具(请参阅 参考资料)。WebSphere Studio 还有一个名为 Page Designer 的完全集成的工具,可以使用它通过拖放操作来可视化地开发 HTML 页面和 JSP 页面。Page Designer 已实现了 JavaServer Faces 规范,它允许您在页面上拖放诸如 HTML 表单元素之类的组件以及一些更高级的组件,这些组件允许将 HTML 表绑定到后台数据源。

  其他 J2EE 技术

  Java Servlets 和 JSP 技术为您提供用 Java 语言开发平台无关的 Web 应用程序所需的工具。其他一些 J2EE 规范和组件向您提供了您带来更高级的功能:

  Enterprise JavaBeans (EJB) 技术:企业组件(或 beans)存在三种形式:

  会话 beans:特殊的 Java 类,类似于在 Microsoft Transaction Server 或 MTS 对象控制下运行的 COM 对象。与 MTS 对象一样,会话 beans 在容器中运行 ―― MTS Executive(就 MTS 对象而言)和 EJB 容器(就会话 bean 而言)。EJB 容器提供诸如声明性的事务管理、基于角色的安全、分布式环境中的无缝集成以及根据需要激活等服务。会话 bean 又存在两种形式:

  无状态的:方法调用之间没有维护状态,因此您必须提供通过参数来调用某个方法时所需要的全部信息。无状态会话 bean 的优点在于,容器可以使用任何实例来服务于任何客户机调用。

  有状态的:方法调用之间的状态得到保持,以便客户机总是与特定的实例相关联。有状态会话 bean 的优点在于,客户机可以使用对话模式来与有状态的会话 bean 交互。当重新创建中间状态信息的成本所需的代价很大时,这就特别有用。

  实体 bean:特殊的 Java 类,它们是存储在关系数据库或其他持久存储中持久数据的对象表示。它们可以封装数据库模型中的表,也可以封装数据模型中表之间的关系。与会话 bean 相似,它们在提供以下服务的容器中运行:声明性的事务管理、基于角色的安全和分布式环境中的无缝访问。实体 bean 是共享对象,因此容器还要处理并发控制,并确保底层持久数据保持其 ACID(Atomicity、Consistency、Isolation 和 Durability,即原子性、一致性、隔离性和持久性)属性。(与会话 bean 不同,实体 bean 是共享对象,因此多个客户机可以并发地访问单个实例。)简而言之,实体 bean 防止您直接访问底层的持久存储。无需作出任何应用程序更改,就可以将它们部署到各种不同的持久存储中。(也就是说,无需改动任何代码,就可以在部署时将实体 bean 映射到它的持久存储。)因此,例如,无须更改任何应用程序,就可以将已经映射到 Oracle 或 SQL Server 数据库的一组实体 bean 重新映射到 DB2。

  消息驱动的 bean:充当 JMS 相容的消息中间件的监听器的特殊 Java 类。JMS 是用于访问消息队列的标准 Java API。可以将消息驱动的 bean 配置为指向特定的消息队列;容器会在消息到达该队列中时激活它们。有了消息驱动的 bean,您就可以提供在消息到达时调用的应用逻辑。每种 J2EE 1.3 相容的应用服务器都必须提供一个 JMS 实现,不过您也可以使用诸如 WebSphere MQ(以前名为 MQSeries)这样的流行消息中间件。

  Java 连接器体系结构(Java Connector Architecture,JCA):用于访问许多诸如 CICS、IMS、ERP 和 CRM 这样的遗留 EIS 系统的标准 API。JCA 把您解放出来,从此不必再学习针对每种 EIS 系统的不同 API。

0 0