用WebLogic Portal 8.1 开发 JSR 168 Portlets
作为一名应用程序开发人员
您应当分析在
WebLogic Portal 8.1
中提供的各种不同类型的
portlet
,
找到最适合完成你当前任务的类型
portlet
。例如,如果您正在为连接
Java
控件、利用基于
Struts
Java Page Flow(Java
页面流)
portlet
。如果您想寻找一种简单的
portlet
或想把现有的
JSP
页面转化为
portlet
时,可以考虑使用
JSP portlet
。如果您是为一个独立软件公司或其他关注跨多个
portlet
容器进行移植的企业工作的话,那么您可以选择使用与
JSR 168
兼容
的
Java portlet
。
下面的表格可以帮助您决定在构建 portlet 时应该使用哪种工具:
Portlet 类型 | 优点 | 缺点 |
基于 JSP 或 HTML 的 portlet | · 易于实施和部署 · 提供不太复杂的基本功能 | · 业务逻辑和表示层可以合并到 JSP · 不太适合高级 portlet 导航 |
基于JSR 168 的 portlet | · 适用于跨平台 portlet 的可移植性 · 无需使用特定于门户服务器的 JSP 标签 · 行为类似于 Servlet | · 不利用 BEA 高级 portlet 特性 · 需要对 J2EE 编程模型有深入了解 |
基于 Java Page Flow的 portlet | · 允许您从导航控制和其他业务逻辑中分离用户界面代码 · 提供构建简单和高级 portlet 导航模型的能力 · 允许快速利用 Java 控件、Web 服务和业务流程 · 为构建大量基于 Struts 的应用提供可视化环境 | · 高级页面流特性,对静态、简单的或单视图的 portlet 不是必需的 |
规范中的组件
有两个与 JSR 168 相关联的主要组件 -- portlet 和 portlet 容器。
1. Portlet:portlet 是一个基于 Java 技术的 Web 组件,它由负责处理请求和生成动态内容的 portlet 容器管理。Portlet 被门户用作可插入用户界面组件,用户界面组件用于在信息系统中提供表示层。
2. Portlet 容器:portlet 容器为 portlet提供所需的运行时环境,为 portlet 首选项管理生命周期和持久性存储。
Java Portlets
JSR 168 中定义的 Portlet API 与 servlet API 有许多公共的概念:
1. Portlet 是基于 Java 技术的 web 组件。
2. 专门的容器管理 Portlet 以及 portlet 生命周期。
3. Portlet用于生成动态内容。
以下几个方面是 Portlet 与 servlet 的不同之处:
1. Portlet 只生成标记片段,并不产生完整的文档。门户将 portlet 标记片段汇聚合为完整的门户页面。
2. Portlet 不直接绑定到 URL。
3. Web 客户机通过门户系统和 portlet 进行交互。
4. Portlet 有许多细化的请求处理、操作请求、交付请求。
5. Portlet 具有预定义的 portlet 模式和窗口状态。 .
Portlet 还能拥有以下额外的 servlet 不提供的功能:
1. Portlet 具有访问及存储持久性配置和自定义数据的方法。
2. Portlet可以访问用户概要信息。
3. Portlet 拥有URL重写功能,可以用来生成超链接,以允许门户服务器在页面片段中创建未知链接及操作。
Java Portlet 容器
Portlet 容器是 Servlet 容器的扩展。Portlet API v1.0 基于 J2EE (Java 2 Platform, Enterprise Edition) v1.3。Portlet 容器和 portlet 符合 J2EE 规范所描述的运行环境的需求。
Portlet 容器必须使用与 servlet 容器用于Web 应用程序资源相同的类加载器,以加载 portlet 应用程序内的 portlet 及相关资源。Portlet 容器负责提醒用户角色的 portlet ,但是portlet不会处理用户的身份验证。
BEA 实现概述
BEA 实现了完全兼容 JSR 168 的 portlet ,BEA 实现完全利用了 WebLogic Application Server 在 portlet的容错性、伸缩性、安全性以及热部署方面的能力。Portlet 容器将管理 portlet 生命周期的各个阶段。实现本身由若干 jar 文件组成,这些可添加到门户 Web 应用中。
图 1:与 Portlet 容器交互的请求的典型流程图
portlet 容器支持 Portlet 首选项概念。这就允许一个简洁的 portlet 实例可作为逻辑实例用于几个用户,同样的道理,也可使多个实例用于单个用户,而这些用户反过来又可以定制与其逻辑实例相关联的行为和外观(look and feel)。这些基础特性在 WebLogic Portal 8.1 中已存在,并且它可应用于非 JSR168 的portlet上。
JSR168 Hello World Portlet
下边是一个完全兼容 JSR 168 的 "Hello World" portlet 实例:
package examples.helloworld; import java.io.IOException; import javax.portlet.PortletException; import javax.portlet.GenericPortlet; import javax.portlet.RenderResponse; import javax.portlet.RenderRequest; public class HelloWorld extends GenericPortlet { public void render(RenderRequest request, RenderResponse response) throws PortletException, IOException { response.getWriter().write("<p>Hello World</p>"); } } |
下边是 Hello World portlet 的 portlet.xml 文件:
<?xml version="1.0" encoding="UTF-8"?> <portlet-app version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/portlet" xmlns="http://java.sun.com/xml/ns/portlet"> <portlet> <portlet-name>helloWorld</portlet-name> <portlet-class>examples.helloworld.HelloWorld</portlet-class> <portlet-info> <title>Hello World</title> </portlet-info> </portlet> </portlet-app> |
结束语
BEA WebLogic Portal 团队积极投身于研究 JSR 168 的专家组。 您可以下载使用 Weblogic Portal 8.1 SP2 的 JSR168 完整实现过程。
有关 JSR 168 和 BEA WebLogic Portal 8.1 的更多信息 , 请参见 :
dev2dev 上关于 BEA WebLogic Portal 的页面 :
http://dev2dev.bea.com/products/wlportal81/index.jsp
BEA WebLogic Portal 的文档站点 :
http://edocs.bea.com/wlp/docs81/index.html
BEA WebLogic Portal 新闻组 :
http://newsgroups.bea.com/cgi-bin/dnewsweb?cmd=xover&group=WebLogic.developer.interest.portal&utag=
BEA WebLogic Portal 产品页 :
http://www.bea.com/framework.jsp?CNT=index.htm&FP=/content/products/portal
JSR 168 主页 :
http://www.jcp.org/en/jsr/detail?id=168