摘抄于:http://gceclub.sun.com.cn/staticcontent/html/2004-06-10/studio.html
几个月前 Sun Microsystems 宣布了 Sun Java System,它是一个对软件进行打包、发布和定价的新方法。Sun 初步指定了组成 Sun Java System 的一组软件。Sun Java Enterprise System 就是其中的一个,它将一组综合的基于标准的企业服务集成到一个单一的包中。这些服务包括 Web 和应用程序服务、目录和身份认证服务、门户服务和可用性服务。
作为 Sun Java System 宣言的一部分,Sun 也宣布了 Sun Java Studio Enterprise,它是 Java Enterprise System 的开发人员解决方案。Java Studio Enterprise 包括了创建和测试部署于 Java Enterprise System 上的应用程序的工具和服务。总之,Java Studio Enterprise 和 Java Enterprise System 为开发人员提供了一整套的解决方案,用于开发、测试以及部署企业应用程序和 Web 服务。
较早前的一篇文章 介绍了 Java Studio Enterprise。它强调了 Java Studio Enterprise 的一些关键的功能,以及为开发人员带来的好处。紧接着的一篇文章 阐述了 Java Studio Enterprise 如何很容易的创建和测试会话 bean,会话 bean 是一个基于 Enterprise JavaBean (EJB) 的组件,并代表 J2EE 服务器的一个客户。
在本文中,您将了解到如何利用 Sun Studio 的 Web Application Framework 来轻松的创建 Web 应用程序,Web Application Framework 已经集成到了 Java Studio Enterprise 中。(为简单起见,本文以下用“Web Application Framework”,而不用“Sun Studio 的 Web Application Framework”。) Web Application Framework 不仅可以简化 Web 应用程序的创建过程,而且可确保 Web 应用程序符合最佳的设计理念,并具有高度的可扩展性。
目录
- Web 应用程序示例 - 更多有关 Web Application Framework 的主题 启动 Java Studio Enterprise 创建一个新的 Web 应用程序 创建一个 JDBC SQL 查询模型 创建一个 Pagelet 组件 创建一个 Page 组件 将 Pagelet 添加到 Page 添加导航控件 测试 Web 应用程序 Web 应用程序示例在下面的示例中,您将了解到如何利用已集成到 Java Studio Enterprise 当中的 Web Application Framework 来迅速创建一个 Web 应用程序。利用创建的 Web 应用程序,用户可以直观地浏览数据库中的记录。下面的步骤将描述 Web Application Framework 的诸多功能特性如可视和不可视组件,以及允许添加用户自定义组件的定制功能。除了具有 Web Application Framework 的功能外,Java Studio Enterprise 也有许多其他的用于提高开发人员效率的功能,以及一套综合性的开发资源和支持服务,目的是解决在应用程序的开发、编译以及测试过程中所遇到的问题。
更多有关 Web Application Framework 的主题对于 Web 应用程序而言,如果它应满足的需求简单的话,则它的创建也就相对简单。但随着需求的增长,则创建 Web 应用程序会迅速变得困难起来。最具难度的一个需求是:使 Web 应用程序具有可扩展性,以满足用户的不断增长(有时候数量会十分巨大)。要使 Web 应用程序具有可扩展性是很困难的,同时也将增加应用程序的复杂性,而且使它的维护更加困难。为了迎接这些挑战,Java Studio Enterprise 集成了一个功能强大的、灵活的以及易用的 Web Application Framework。Web Application Framework 为您提供了一个图形化的环境和一组可重用的组件,这样您就可以迅速创建 Web 应用程序了,甚至是那些具有高度复杂性和成熟性的 Web 应用程序。Web Application Framework 的基础是一组 J2EE 的被称为 设计模式 的最优方案 (best practice)。Web Application Framework 在它所生成的代码中实现了这些设计模式中的许多。为了做到这一点,Web Application Framework 确保 Web 应用程序的结构完整性,并使它们具有高度的可扩展性,同时易于维护。
启动 Java Studio Enterprise在您所选择的开发平台上启动 Java Studio Enterprise。它可运行在 Solaris 操作系统、Microsoft Windows 2000 以及 Microsoft Windows XP 上。本例运行于 Solaris 操作系统上。
当您启动了 Java Studio Enterprise 之后,就打开了其集成开发环境 (IDE)。从菜单栏中选择“View” 菜单。然后选择 Web Application Framework 和 Web Application Framework Explorer。这将打开 Web Application Framework 工作区。
工作区由一组窗口组成,利用它可以执行一组相关的任务。除了 Web Application Framework 工作区外,IDE 中也有针对文件编辑相关任务的工作区,GUI 编辑以及编译。您可以打开这些工作区中的任何一个,只要单击 IDE 中相应的选项卡即可。您也可以创建新的工作区,或者定制现有的工作区。每个工作区针对某个特定的任务可能会有不同的布局。我们也可以只用一个工作区,对它进行配置以显示所有的窗口和可用资源。然而,这个工作区将会变的非常拥挤。这也就是大家为什么乐于创建不同工作区的原因。
Web Application Framework 工作区在默认状态下,将在左侧显示 Explorer 窗口,在下部显示 Web Application Framework Apps 和 Runtime 视图选项卡。注意 Web Application Framework Apps 视图中的工具栏。通过单击工具栏上的图标,就可以执行与开发 Web 应用程序相关的任务。
Web Application Framework 工作区的中心区域显示的是 Welcome 窗口(当您打开一个文件进行编辑时,该区域会显示出 Source 编辑窗口),和其下部的 Output 窗口。一个标题为“Component Palette”的窗口显示在右侧。(注意:如果您定制了您的 Java Studio Enterprise 环境,则工作区的布局可能会有所不同。)
单击放大创建一个名为 PaginateDemo 的 Web 应用程序:
单击 Web Application Framework 工作区工具栏上的第一个(也就就是位于最左边的那个)图标 。打开了 New Application 向导。还有两个其他方法可以打开 New Application 向导。一个就是在 IDE 菜单中选择 File 菜单,然后选择 New。就打开了 New 向导。在 New 向导中,展开 Web Application Framework 节点,选择 Application,并单击 Next 按钮。另外一个就是在 Explorer 中右键单击 Web Application Framework 节点,然后选择 New Web Application Framework App。(这些方法说明了 IDE 的灵活性)。
向导中的其他窗格可帮助您对 Web 应用程序及其模块的许多属性进行定制。例如,您可以为 Web 应用程序指定一个包名,或者为一个将作为 Web 应用程序之前端控制器的 servlet 指定一个类名。然而,在本例中,Web 应用程序及其模块的默认属性已经足够了。作为回应,您将看到一个通知窗口,说明 Web 应用程序已经加载,同时也说明它是一个 Web Application Framework 应用程序。该通知也说明了在工作区中查看已加载的 Web 应用程序的多种方法,并告诉您查找技术文档的位置。
注意在 Explorer 窗口的 Web Application Framework Web Apps 视图中现在显示出了一个 Paginate Demo 节点。在 Paginate Demo 节点的下部,您将会看到三个子节点:Settings & Configuration、Application Classes 和 Documents。展开 Applications Classes 节点,然后展开 pageinatedemo 文件夹,再展开 main 文件夹。main 文件夹很特别,因为它是一个模块文件夹。模块文件夹是创建 Web 应用程序的所有 Application Framework 组件(例如 page、model 和 command)的地方。在本例中,您将使用一个模块文件夹和一个简单的 Java 包结构。然而,Application Framework 允许您创建许多模块文件夹和使用复杂的 Java 包结构。Application Framework 对您如何架构您的 Web 应用程序没有限制。这说明您可以利用 Application Framework 创建高度复杂的 Web 应用程序。
您已经了解到 Web 应用程序可以显示一组客户记录并允许您进行可视浏览。在本例中,这些记录来自驻留在 PointBase 数据库服务器上的简单的 SQL 数据库。注意 PointBase 数据库服务器以及其他有用的开发工具如 Tomcat Web 服务器、Ant XML-based 脚本工具和 JUnit 测试工具都绑定到了 Java Studio Enterprise 中。
在对数据库中的记录进行访问之前,您需要启动 PointBase 网络服务器。
启动 PointBase 网络服务器: 在 Tools 菜单中选择 PointBase Network Server,然后选择 Start Server。
就打开了 PointBase 控制台。如不需要,您可以将其最小化。
接下来,您需要创建一个既代表您要访问的数据,也代表检索该数据的操作的模型。注意 Web Application Framework 是建立在被称为设计模式的一组最优方案之上的。Web Application Framework 在生成应用程序代码时实现这些模式。Web Application Framework 实现的一个主要的模式是 MVC (Model, View, Controller) 设计模式。MVC 设计模式将应用程序的设计分为三个明显的部分:模型 (model)、视图 (view) 和 控制器 (controller)。每个部分的功能简要说明如下:
模型——代表企业数据和负责数据访问和更新管理的商业规则。这说明模型既代表数据,也代表允许的数据访问和数据操作。
视图——呈现模型的内容。也就是说,视图向用户显示模型中的数据。
控制器——将与视图的交互翻译成由模型所执行的操作。这说明,根据用户的操作(例如,用户单击视图中的一个按钮),控制器会为模型选择出要执行的一组合适的动作。然后控制器选择一个基于操作结果的视图。
因为您要访问的数据存在于 SQL 数据库中,所以您需要创建一个 JDBC SQL 查询模型。该模型用于执行对 SQL 数据库的查询(通过 JDBC API)。
创建一个 JDBC SQL 查询模型:
从 Explorer 窗口的 Web Application Framework Web Apps 视图中选择 main 模块文件夹。 单击 Web Application Framework 工作区工具栏上的 Add Model 图标 。现在打开了 New Model Wizard。New Model Wizard 显示出了一个可用模型类型的列表。
另一种方法是,在 Explorer 窗口中右键单击 main 模块文件夹,然后选择 Add,再选择 Model。
显示出 Select Datasource 窗格。
jdbc/jdbc-pointbase 数据源是在创建 Web 应用程序中自动生成的。您可以根据需要创建指向其他数据库的数据源(如来自其他开发商的数据库)。在创建 Web 应用程序时,您可以选择避免创建默认的数据源。
单击 Next 按钮。
显示出 Select Database Tables 窗格。
显示出 Select Table Columns 窗格。
CUSTOMER_TBL 中的所有列被选中。
单击 Finish 按钮。
单击放大 单击放大注意一个称为 CustomerModel 的新模型组件已加入到您的 main 模块文件夹中。在 Explorer 中展开 CustomerModel 节点。您将看到列 (column) 节点。同时也为该模型创建了一个 Java 类。您可以通过双击 CustomerModel 节点(或其 Java Source 子节点)查看该类中的源代码。
实际上,您只是关注了存在于 Web Application Framework 组件库中一个组件,本例中指的是 JDBC SQL 查询组件。组件库中包括了四种类型的组件:模型组件、可视组件、命令组件和不可视组件。顾名思义,模型组件提供模型(即,在一个MVC 设计中提供“M”)。JDBC SQL 查询组件所提供的模型使用一个 SQL 数据库中的一个或多个表作为一个数据源。可视组件创建 Web 应用程序的用户界面。命令组件用来封装操作,如请求的处理。非可视组件提供支持,如配置模型实例。在本例中,您将用到可视、命令和非可视组件。
在本例中,假设您希望显示客户记录,一次显示三条记录,并希望用表的格式显示。要显示数据,您就得创建一个视图。该视图允许您的应用程序在上一步骤中所创建的模型中显示数据。注意 Web Application Framework 组件库包含有可视组件。这些组件创建 Web 应用程序的用户界面,并提供模型的一个视图。
组件库含有许多不同的可视组件,其中的一个是 Basic Container View 组件,也称为 pagelet 组件。一个 pagelet 提供一个 page。要显示数据,pagelet 必须被包含在另外一个称为 Basic ViewBean 的可视组件中,也称为 page 组件。从该角度看,pagelet 组件类似于 Swing 中的 Panel 组件。page 组件类似于 Swing 中的 Frame 组件。和 Panel 组件一样,pagelet 组件是形成复杂可视组件的基础。
pagelet 组件可以包含其他可视组件,并且可重用于整个 Web 应用程序中的其他 pagelet 和 page 中。Web Application Framework 应用程序中的一个单一的逻辑 page 通常与一个 page 组件和一个关联的 JSP 页相对应。当您创建 pagelet 组件(或者 page 组件)时,Application Framework 会给您机会来标识出一个关联的 JSP 页。本例中的下一步 创建一个 Page 组件 将提供更多有关 page 组件的信息。
单击放大 单击放大另外一个可视组件是 Basic TiledView 组件((或简单的说,tiled view)。一个 tiled view 是 pagelet 组件的一种,它可用一个重复区域(称为 tile)的数字标识其孩子(即,pagelet 和其他可视组件如显示域)。tile 的例子是表的行或列,或者 tabbed 组件的选项卡。这个功能正是您为了一次显示三条客户记录所需要的。
创建一个 tiled view:
从 Explorer 窗口的 Web Application Framework Web Apps 视图中选择 main 模块文件夹。则打开 Pagelet (ContainerView) Wizard。Pagelet (ContainerView) Wizard 显示出可用 Pagelet 类型的列表。
另一种方法是,在 Explorer 窗口中右键单击 main 模块文件夹,然后选择 Add,再选择 Pagelet (ContainerView)。
这时出现了 Associate JSP 窗格。在本窗格中,您可以将该 pagelet 与一个 JSP 页关联起来。
这时,标有 "Use default JSP template" 的复选框被自动选中。
选中标有 "Use formatting to beautify fields on JSP" 的复选框。
选中这个复选框意味着一个基本样式表将会用一个简单的表布局来进行格式化显示。要这么做,请使用 Java Studio Enterprise 中的默认的 JSP/HTML 语法着色编码 (color-coded) 编辑器对原始格式的 JSP 内容进行编辑。您也可以使用第三方的 HTML WYSIWYG 编辑器。
单击 Next 按钮。
显示出 Model Associations 窗格。
显示出 Bind Display Fields 窗格。
注意一个名为 CustomerListPagelet 的新 Pagelet 组件已经添加到您的 main 模块文件夹中了。在 Explorer 中展开 CustomerListPagelet 节点可以看到 Visual Components 子节点。您将看到四个静态文本域(用一个 标出)。它们是您在对 Pagelet (ContainerView) Wizard 中的 Bind Display Fields 窗格中进行选取后所创建的。要进行这些选取,您需要将 pagelet 绑定到与之相关联的 CustomerModel 的字段。
同时也为该 pagelet 创建了一个 Java 类。要查看类中的源代码,请双击 CustomerListPagelet 节点(或其 Java Source 子节点)。
正如上一步骤所述,一个 pagelet 提供了一个 page。您可以使用许多 pagelet 组件(和简单的可视组件如 display field 和 button) 来组成一个更复杂的 page 组件。pagelet 是可视组件,但如果没有一个包含它的 page 组件的帮助,它是不能显示出来的。注意 Swing 中类似的 Panel 组件。一个 Panel 组件只有在包含在一个 Frame 组件中才会显示出来。所以 page 组件位于可视组件层次结构的顶级。
创建一个 page 组件来作为 TiledView pagelet 的父容器可视组件。要创建一个 page 组件,请:
从 Explorer 窗口的 Web Application Framework Web Apps 视图中选择 main 模块文件夹。于是打开了 Page (ViewBean) Wizard。Page (ViewBean) Wizard 显示出了一个可用的 Page 类型列表。(列表中只有一个可用的 Page 类型: Basic ViewBean)。
另一种方法是,在 Explorer 窗口中右键单击 main 模块文件夹,然后选择 Add,再选择 Page (ViewBean)。
page 向导中的几个可选步骤与 pagelet 向导中的一样。如不单击 Finish 按钮,而是单击 Next 按钮,则显示出 Associate JSP 窗格。在本例中,您不需要创建一个 JSP 页以便和该 page 相关联——向导会默认创建一个 JSP 页。而且,也不需要将该 page 与任何的模型相关联,所以不需要显示 Model Associations 窗格。
注意一个名为 CustomerListPage 的新的 Page 组件已经添加到您的 main 模块文件夹中。在 Explorer 中展开 CustomerListPage 节点可以看到 Visual Components 子节点。它没有子节点。在下一个步骤中,您将用 Component Palette 添加 Visual Components。
同时也为该 page 创建了一个 Java 类。要查看类中的源代码,请双击 CustomerListPage 节点(或其 Java Source 子节点)。
单击放大 单击放大Web Application Framework 是组件友好型的。也就是说,您所创建的组件易于重用。只需要一个指定和单击,就可以将 pagelet 组件(CustomerListPagelet) 添加到 page 组件(CustomerListPage)中。您也可以利用 Web Application Framework API 来手工完成这一任务(要了解有关使用 Web Application Framework API 的详细信息,请参阅 Sun Java Studio 的 Web Application Framework 开发指南)。当您需要更加灵活和更加复杂的显示逻辑时,通过 API 手工完成 Web Application Framework 任务将是十分有用的。然而,在大多数情况下,采用图形化的方法,即指定和单击是快速有效的方法。
添加 CustomerListPagelet 组件到 CustomerListPage 组件中:
单击放大 确保 Component Palette 是可见的。如果它不可见,选择 View 菜单中的 Web Application Framework,然后选择 Component Palette。在 Component Palette中, 默认的视图是 Visual Components 层。
Application Visual Component 层位于 Component Palette 的底部, 显示的图标是 。选择这一层之后,Component Palette 会显示出所有当前应用程序的可视组件。这里只有可视组件 CustomerListPagelet 显示出来。一旦在您的应用程序中创建了另外的 pagelet,它们就可以在 Application Visual Component 层中以备重用。
选择该组件会在 CustomerListPage 的 Visual Components 节点下添加一个新的子节点。如果您在编辑器中显示 CustomerListPage 的 Java 源代码,您会发现有额外的代码生成。如果查看与之相关联的 JSP 页,您会发现一个新的标签被添加到了该 JSP 页。
在这里,“tile”一词比“row”一词更普通。
在现在为止,实际上您已经创建了一个可访问数据库中三条客户记录的 Web 应用程序。如果运行该应用程序,您会发现该页上显示出了三条记录,但却没有办法浏览其余的记录。而本例的目标之一就是允许用户浏览所有的客户记录。为了能够进行导航,您需要向该 page 上添加适当的按钮(如 First、Next、Previous 以及 Last)并对其进行配置,以便使用内置的 WebAction(WebAction 可实现与模型相关联的特定动作)。Web Application Framework 中的 JDBC SQL 查询模型和关联的 WebAction 可完成所有有关记录导航的基础工作。注意记录导航并不局限于基于 SQL 的模型,也可应用于可处理多记录的任何模型类型。记录导航是基于 Web Application Framework API 中可用的模型接口的。要了解有关这些接口的详细信息,请参阅 Sun Java Studio 的 Web Application Framework 开发指南。
不是创建和添加单独的按钮,现在让我们创建并添加一个组件,它含有四个经过预先配置的按钮以完成记录导航功能。请牢记 Web Application Framework (和工具)是基于组件而建立起来的。先进的组件架构可使开发人员创建多种多样的组件。为了简化操作,已经为应用程序 PaginateDemo 创建了一个含有多个组件的组件库。该库中的一个组件可提供必要的按钮,每个按钮都进行了适当的配置以完成一定的导航功能。
要访问组件库,请 下载文件 paginate.jar。将该 jar 文件保存到您应用程序的 WEB-INF/lib 目录(Web-INF±lib for Windows)。例如,如果您创建的 PaginateDemo 应用程序位于目录 <home-dir>/jstudio_6ee_user,则将 jar 文件保存到 <home-dir>/jstudio_6ee_user/WEB-INF/lib 中。
作为回应,Java Studio Enterprise 会识别出一个 jar 文件已经添加到您的 Web 应用程序的 lib 目录(这不会花费太长的时间,也许只有数秒钟,取决于机器的性能)。此外,Java Studio Enterprise 也将该 jar 文件看做一个 Web Application Framework 的组件库。(包含在 jar 文件中的是一个描述文件,它将该 jar 文件指定为一个 Web Application Framework 组件库。) 其中包含的组件将被显示在不同的 Java Studio Enterprise 向导和 Component Palette 中。您将会在 Component Palette 中的 Visual Components 层的底部看到 paginate.jar 组件。
现在组件库是可用的,将库中的导航控件添加到 page 中。
在 Explorer 窗口的 Web Application Framework Web Apps 视图中选择 CustomerListPage 节点或其 Visual Components 节点。
单击 Component Palette 的 Visual Components 层中的 First - Prev - Next - Last 组件,将其添加到 page 中。
在 Explorer 窗口中选择新的 Visual Components 子节点 paginateControls1。
在 Property 表中,将名为 Target Container Path 的属性的值设置为 CustomerListPagelet1 (CustomerListPagelet 可视组件的名称)。
使用可视组件的实例名 (customerListPagelet1) 而不是正式的组件名 (CustomerListPagelet)。该属性可使您定位一个可在其中进行导航操作的特定容器。如果您指定了一个空白值或者使用默认值 ("/"),则目标容器视图就是导航控件本身的父,也就是说,CustomerListPage。实际上,它是最终操作的模型。与模型相关联的目标容器用于检索记录。在这种情况下,目标容器视图是 CustomerListPagelet 的一个实例,它称为 customerListPagelet1。目标容器视图的深度超过一级是常见的。
如果愿意的话,您可以更改按钮的标签,当前的标签是 |<< ( First 组件)、>>| (Last 组件)、-> (Next 组件) 和 <- (Previous 组件)。
单击放大 注意 paginate.jar 组件库只是一个原型。其目的不是为了表示一个成品,而是为了说明 Web Application Framework 组件架构的强大的功能和易于使用的特性。当您 测试 Web 应用程序 时,您会发现当数据库的第一条记录显示时,First (|<<) 和 Previous (<-) 按钮处于无效状态 (正如预期的一样)。然而,如果您单击 Last (>>|) 按钮,从而导航到记录集的最后一条记录时, 您会发现 Next (->) 和 Last (>>|) 按钮不是处于无效状态 (不是预期的)。现在是测试该 Web 应用程序的时间了。要进行测试,您就需要编译、部署以及运行该 Web 应用程序。然而,在进行这些步骤之前,还需要进行以下工作:
确保 Sun Java System Application Server 处于运行状态。在 Explorer 窗口的 Web Application Framework Runtime 视图中展开 Installed Servers 节点。然后展开 Sun Java System Application Server 7 节点,再展开 localhost:4848 节点。右键单击标签为 server1 (localhost:8080) 的应用服务器实例,然后选择 Status。
于是显示出应用服务器实例的一个状态窗口。该状态会指示出应用服务器实例正在运行。如果状态停止,您可以单击状态窗口中的 Start Server 按钮启动应用服务器实例。
在 Explorer 窗口的 Web Application Framework Runtime 视图中展开 Default Servers 节点。标签为 server1 (localhost:8080) 的应用服务器实例应该列为默认服务器。如果没有,则展开 Sun Java System Application Server 7 节点,再展开 localhost:4848 节点。右键单击标签为 server1 (localhost:8080) 的应用服务器实例,然后选择 Set as Default。
如果 PointBase 网络服务器没有运行,则在 Tools 菜单中选择 PointBase Network Server,然后选择 Start Server。
要编译、部署和运行该 Web 应用程序,请:
在 Explorer 窗口的 Web Application Framework Web Apps 视图中右键单击 Paginate Demo 应用程序节点,然后选择 Compile All。您将会看到一条说明 Web 应用程序编译成功的消息。
这时会有一个对话窗口显示应用程序部署的进度。如果在 Web 应用程序部署之后对其进行了修改,则需要重新编译和重新部署。
作为回应,您将会看到一个显示来自示例数据中的一个含有三条客户记录的表的 page。单击导航按钮来显示第一条、最后一条、下一条以及上一条记录。如果您对 Web 应用程序进行了修改并要进行重新的测试,请选择 Execute Page (Redeploy)。这将确保上一个版本的应用程序完全从应用服务器的内存中清除掉。
作为接下来的练习,您可以向同一个 page 中添加记录状态组件 (Record Status Component),并用配置导航组件相同的方式对它进行配置。这将添加一个记录状态消息。例如,当您显示三条记录中的第一条时,该消息显示为“Records 1 to 3”。
和 paginate 组件库一样,记录状态组件 (Record Status Component) 是一个原型,且并不完全起作用。例如,记录状态消息应该显示“Records 1 to 3 of 13”,而不是简单的“Records 1 to 3”。Sun Java System
Sun Java Enterprise System
Sun Java Studio Enterprise
Introduction to Sun Java Studio Enterprise
Sun Java Studio Enterprise in Action: Building a Session Bean
BluePrints: Patterns
Sun Java Studio's Web Application Framework Developer's Guide
关于作者Ed Ort 是 developers.sun.com 和 java.sun.com 的一名职员。发表了许多有关关系数据库技术、编程语言以及 Web 服务的文章。
Reggie Carey 是 Sun Microsystems, Inc. 的高级系统工程师,曾经从事过软件开发和管理。参与过两本有关软件技术书籍的写作,在计算机行业中已有将近 20 年的经历。Reggie 偶尔会对应用服务器和集成开发环境发表武断的观点。
Craig Conover 是 Sun Microsystems, Inc. 的在职工程师,主要从事 Sun Java System Application Framework (JATO) 工程。他有 11 年的软件行业从业经历,从事过 Web 应用程序框架、工具以及应用程序的研究与开发工作。其职业生涯开始于 1996 年,从事过顾问、讲师等工作。
本文地址:http://com.8s8s.com/it/it11189.htm