技术开发 频道

专家访谈: Roland Barcia 谈 JMS 和 JSF 的使用

  : 这是一个很基本的问题。您能比较一下 JSF 和 Struts 之间各自的优缺点吗。如何了解现在和将来的技术趋势,JSF 如何以及是否将会发展成为相对于 Struts 更出色的技术。另外,WSAD 如果可以使两者不同的话,将在两者的比较中将会充当什么样的角色。

  : 这是近期很热门的一个问题。一般来说,JSF 仍然是相当新的技术,需要时间来完全地成熟。然而,我看到 JSF 已经可以完成 Struts 可以做的任何事,而且做的更多。Struts 并不是来自于强制性的需求。它是开发人员厌烦了一次次的编写相同的逻辑而创造的。JSF 的出现,既是必然的需要也是竞争的结果。

  Struts 有以下优点:

  ·Struts 是一个成熟的、被证实了的框架。它已经使用了几年,且被成功部署到许多项目中。WebSphere Application Server 管理控制台就是一个 Struts 应用程序。

  ·Struts 使用 Front Controller 和 Command 模式,可以处理复杂的控制器逻辑。

  ·除了核心的控制器功能以外,它还有很多其他的优点,比如使用 Tiles 布局、说明性(declarative)异常处理以及国际化。

  以下是其缺点:

  ·Struts 是非常以 JSP 为中心的,必须使用其他框架来适应其他视图技术。

  ·尽管 Struts 有丰富的标记库,但是它只能帮助进行控制器方面的开发,当您处理关于页面的组件时,它没有任何意义。因此,从视图的角度来看,它没有提供好的工具。

  ·Struts 需要关于 Java™ 的知识。其目的是帮助 Java 开发人员,而不是隐藏 Java。它在对 Web 开发人员隐藏 Java 语言的细节这一方面做的并不好。

  ·ActionForms 被程式化的与 Struts 框架链接。因此,为了降低模型的耦合度,您需要编写传送代码或者在输入时使用工具将数据从 Action Forms 移动到 Model。

  JSF 从包括 Struts 的少数框架发展而来。Struts 的创建者,Craig McClanahan,即是 JSF 规范的领导人之一。因此,能看到 Struts 和 JSF 之间的一些相似之处,这并不是偶然的。JSF 的主要目的之一就是使得 J2EE Web 应用程序在 RAD 工具下易于开发。同样地,它也引入了丰富的组件模型。JSF 有如下优点:

  ·JSF 是一个来自 Sun® 的规范,将会被包括在 J2EE 规范的未来版本之中。各主要供应商都保证对 JSF 提供强力支持。

  ·JSF 使用 Page Controller Pattern,因此会对页面密集型应用程序有帮助。相应组件会对来自页面上组件的事件作出响应。

  ·JSF 有一个明确定义的请求生命周期,保证了在不同级别上的可插入性(plugability)。

  ·可插入性的一个有力的例子是构建您自己的 render 工具包。将框架中的呈现(rendering)部分和控制器部分分离的能力实现了良好的可扩展性。组件供应商可以编写他们自己的工具包以处理不同的标记语言,如 XML 或 WML。另外,render 工具包也不依赖于 JSP。

  ·因为 JSF 有一个丰富的组件模型,所以它支持 RAD 类型的开发。现在我可以使用拖放技术来构建我的 Web 页面。此外,JSF 提供在不打破层次布局的条件下,将可视组件同后台模型组件连接起来的途径。

  JSF 有以下缺点:

  ·JSF 仍是相当新的并处于发展过程中。要看到成功的部署和广泛的应用还需要一段时间。另外,组件供应商可能并不能做您想让他们完成的所有事情。

  ·手工方式的 JSF 并不比 Struts 简单。它的目标更倾向于 RAD。那些喜欢手工开发的人(例如,那些不喜欢 IDE 的 vi 类型的人)可能会发现 Struts 更容易开发。

  ·Struts 导航可能会更加灵活一些,但同时也导致控制器逻辑更加复杂。

  JSF 和 Struts 将会继续共存一段时间。Struts 社区已经了解了 JSF 并在作出一些改变以对 JSF 提供强大的支持。参见 What about JSTL and JavaServer faces?

  在工具的角度,如果您留意了 WebSphere Studio 对 JSF 和 Struts 的工具支持,将会发现 Struts 工具集中于控制器方面。Web Diagram 编辑器帮助构建您的 Struts 配置,而向导/编辑器构建 Struts 构件。JSF 工具适合于构建页面,而实质上向您隐藏了 JSF 框架。可以预计 WebSphere Studio 将暂时同时支持两种框架。当 JSF 趋于成熟以后,预计将可以在 JSF 中看到一些控制器方面的可用工具。

  : 将大型应用程序从 Struts 向 JSF 进行迁移的非常好的途径是什么?是否有一些有帮助的支持工具?

  : 这是一个决定于您的 Struts 应用程序的复杂任务。因为两种框架有着不同的目标,这将存在一些挑战。首先迁移您的响应页面。保留 Struts 控制器,同时在前端使用 JSF 页面。然后您可以配置 Struts 前端以检查 Faces servlet。可以考虑参考 Apache 的 Struts-Faces 框架。参见 JSF in Action的框架一章。

  :是否有从 Struts 到 JSF 的迁移途径?比起 Struts,JSF 的成熟性如何?

  : 对于第一个问题,参见前一个问题的回答。对于第二个问题,参见问题 1 的回答。

  : 我能否用 Message-Driven bean 来代替 Stateless session bean?

  : 程式化地说,任何事都是可能的。但是这种类型的改变应该是需求驱动的。Message Driven Bean (MDB) 是一个用来接收 JMS 消息的异步监听器。Stateless Session Bean 既通过本地接口进行监听,也使用远程接口通过 RMI/IIOP 进行监听。应用程序逻辑应该根据向多个客户端提供服务的方式进行分层。您可能考虑通过 MDB 来取代 Stateless Session Bean,以便增加其可被多个客户端访问的能力。图 1 展示了相关概念。

  图 1. 概念  

  有关这个话题, Enterprise Java Programming with IBM WebSphere, Second Edition是一个很好的资料。

0
相关文章