面向服务的编程模型可以简化程序到用户 (program-to-human) 的交互的开发,方法是在用户或者管理员控制下在表示层抽象化接口、标准化消息以及聚合独立信息源。本文是关于 IBM 的 SOA 编程模型的系列文章之一,介绍了用户面对的服务并提供了用户界面 (UI)。
面向服务的体系结构的用户界面
在文献中,对 Web 服务的讨论通常是在程序到程序 (program-to-program) 交互的上下文中进行的。然而,模型-视图-控制器(Model-View-Controller,MVC)范例是现代大多数 UI 应用程序框架的基础。SOA 操作提供模型层,而 UI 位于视图层。UI 技术可以在各种设备上呈现信息,这些设备包括的范围很广,从窗口小部件和智能电话到浏览器和能够进行大量客户端处理的富客户机。中间件和工具将视图层 UI 技术连接到模型层 Web 服务和数据。
在 SOA 方法中,宿主组件的环境抽象成容器,它提供已知的服务集。从 UI 的角度来说,承载客户端 UI 组件的三个主要的容器是:
基本 Web 浏览器。
使用 Java™Script 和动态 HTML 增强的 Web 浏览器。
IBM Workplace™ Client Technology™——具有本地 IBM WebSphere® Application Server 客户机支持的 Eclipse 富客户机。
这些容器可以通过支持下列技术得以增强:Servlet、JavaServer Page (JSP) 和 JSP Tag;用于页面排序的 Struts;用于高级页面组合的 JavaServer Face (JSF);以及合并在同一页面上的多应用程序视图的 Portlet 技术。
UI 开发框架
UI 开发框架可以简化创建面对用户的复杂应用程序的过程。通常使用下列的 UI 框架来创建 UI 组件:
Struts,拥有最大的开发人员社区和异常工具支持,是 Apache 开放源代码项目,它早于 Java Portlet 规范 JSR 168(请参阅参考资料以获得 Struts Web 站点的链接)。Struts 是使用 servlet/JSP 范例开发基于服务器的 UI 的多页 MVC 框架。Struts 的一个特殊版本 V1.1 库支持 IBM WebSphere Portal 上的 JSR 168 Portlet。
JavaServer Faces 是 Java Web 应用程序的 MVC 实现,以增量方式构建于以前的技术之上。它很好地适应了 Portlet 开发,提供 Portlet 和 Servlet、声明处理、确认和事件处理。JSF 页面具有一个或多个与该页面上的 UI 控件交互的本地模型。这些控件将 UI 属性呈现给输出,而复杂的逻辑确保它们的表示是在“正确的”地方。客户端模型可以连入企业服务总线 (Enterprise Service Bus) 来发送和接收事件。
Java Widget Library (JWL),是一个可供门户和 Portlet 程序员使用的扩展窗口小部件集,向 JSF 添加 JavaScript 客户端处理,而且将得到 IBM Rational® Suite® DevelopmentStudio 的支持。更新客户机本地视图省去了往返服务器的过程,缩短了几个数量级的响应时间,而且极大地改善了用户体验。
门户 提供了最好的 UI 支持。在门户体系结构中,Portlet(通常是使用上面提到的某种 UI 框架开发的)是基本构件。使用这种体系结构,开发人员可以把主要精力放在他们的应用程序的独特方面,并且将生命周期、每个用户的自定义、聚合以及与其他组件的集成等公共功能委派给中间件。
下面几部分将单个服务和门户的 Portlet 组件描述成服务聚合机制。
面向服务的 UI 的 Portlet
Portlet 组件实现了标准服务接口和协议。Java Portlet 规范和用于远程 Portlet 的 Web 服务(Web Services for Remote Portlet,WSRP)标准分别定义了 Java 和 Web 服务的这个接口(请参阅参考资料以获得更多关于 WSRP 的信息)。这两个标准非常相似,以致如果存在合适的容器或者代理,为任一接口编写的 Portlet 都可互换。
Java Portlet 示例
每个 Java Portlet 都实现了该 Portlet 接口或者扩展了实现它的类。这个接口定义了 Portlet 和它的容器之间的服务约定,以及 Portlet 的生命周期:
初始化 Portlet 并将其放入服务中(init 方法)
处理请求(processAction 和 render 方法)
除去服务的 Portlet(destroy 方法)
