在 Portal 开发中,Portlet 通信是一个关键环节,因为它涉及到 Theme 与 Portlet 之间的交互以及 Portlet 之间的同步更新。JSR 168 规范规定 Portlet 是独立的,不共享 Session 对象,这就提出了在这些独立组件间传递数据的需求。本文详细探讨了Portlet通信的过程和方法。
首先,理解 Portal 和 Portlet 的基本概念是关键。Portal 被定义为基于 Web 的应用程序,它提供了个性化体验、单点登录、内容集成和信息系统的表示层。Portlet 是一种基于 Java 技术的 Web 组件,由 Portal 容器管理,用于处理请求并动态生成输出内容,类似于 Servlets 在合成页面中的角色。在访问 Portal 页面时,可能会同时加载多个 Portlet,它们各自生成 HTML 标记,最终组合成完整的 Portal 页面。
JSR168 是由 Sun Microsystems 在 2003 年末制定的 Portal 规范,它为 Portlet 设定了标准,并提供了一个实现接口,以确保各个 Portlet 之间的互操作性和一致性。Portlet 页面通常由一个或多个 Portlet 窗口构成,每个窗口内部又有自己的逻辑结构。
在 IBM Rational Application Developer V7.0 和 Rational Software Architect V7.0 这样的开发平台上,Portlet 参数传递是通过特定的机制实现的。因为 Portlet 不共享 Session,所以传递参数的方式通常涉及:
1. **Request Parameter**:在发送请求时,可以通过 URL 参数将数据直接传递给目标 Portlet。
2. **Session Attributes**:虽然 Portlet 本身不共享 Session,但可以通过设置和读取 Session 属性间接实现数据共享,不过这可能不是最佳实践,因为 Session 易于数据泄露和安全问题。
3. **Portlet Scope**: Portlet 提供了端口范围(Portlet Scope)来存储数据,这是一个更为安全且符合 JSR168 规范的方式,数据仅限于调用它的 Portlet 可见。
4. **Portlet Preferences**: Portlet 可以保存用户的偏好设置,作为持久化的数据存储,这也是传递参数的一种选择。
5. **Event System**: Portlet Container 提供的事件系统允许 Portlet 通过事件通知其他 Portlet 关于状态变化,从而实现异步通信,但通常用于更复杂的状态同步需求。
了解这些机制后,开发人员可以根据应用的具体场景选择合适的参数传递方式。在实际开发中,还要注意遵循良好的编程实践,比如减少跨域问题、优化性能和安全性等。通过合理利用 Portlet 的通信能力,可以构建出高效、稳定的 Portal 系统。