练习 1.3:比较 JavaTM 类差别

在开始之前,应该先完成练习 1.2:两种 API 在概念方面的差别

在此练习中,您将了解两个 portlet API 在 Java 类编码方面的差别。研究两个版本的 BookmarkPortlet Java 类。注意两种 API 之间的基本差别:

导入基本 portlet 类

这两种 API 导入的 portlet 类是不同的。

IBM portlet API
import org.apache.jetspeed.portlet.*;
JSR 168 portlet API
import javax.portlet.*;

Java 类继承

这两种 API 是从不同的类继承的。IBM portlet API 扩展 org.apache.jetspeed.portlet.PortletAdapter(它提供了 org.apache.jetspeed.portlet.Portlet 接口的缺省实现)。此 Portlet 类扩展 HttpServlet,因此,IBM portlet 是一种类型的 servlet。JSR 168 portlet API 提供了 javax.portlet.GenericPortlet 类,该类将实现 javax.portlet.Portlet 接口。

IBM portlet API
public class BookmarkPortlet extends PortletAdapter implements ActionListener
JSR 168 portlet API
public class BookmarkPortlet extends GenericPortlet

请求和响应对象

render(JSR 168 API)或 service(IBM API)方法(例如,doView() 和 doEdit())上的请求和响应对象的名称不同。IBM portlet API 使用 PortletRequest 和 PortletResponse 对象;而 JSR 168 API 使用 RenderRequest 和 RenderResponse 对象。RenderRequest 和 RenderResponse 将分别扩展 PortletRequest 和 PortletResponse 对象,并提供常见功能。

IBM portlet API
public void doEdit(PortletRequest request, PortletResponse response)
JSR 168 portlet API
public void doEdit(RenderRequest request, RenderResponse response)

包含 JSP 文件

IBM portlet API 使用 PortletContext 对象来包含 JSP 文件;而 JSR 168 portlet API 使用 PortletRequestDispatcher 对象来包含 JSP 文件。包含操作将调用指定的 JSP 文件。

IBM portlet API
getPortletConfig().getContext().include(EDIT_JSP, request, response);
JSR 168 portlet API
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(request, response);

Portlet 数据

IBM portlet API 将用户数据存储在 PortletData 对象中。JSR 168 portlet API 将类似信息存储在 PortletPreferences 对象中。

IBM portlet API
PortletData prefs = portletRequest.getData()
JSR 168 portlet API
PortletPreferences prefs = renderRequest.getPreferences()

操作处理

在 IBM portlet API 中,Java 类必须通过提供 actionPerformed() 方法来实现 ActionListener 接口。使用 JSR 168 portlet API 时,Java 类必须提供 processAction() 方法;不需要侦听器。

IBM portlet API
public void actionPerformed(ActionEvent event) throws PortletException
JSR 168 portlet API
public void processAction(ActionRequest request, ActionResponse response)

名称空间编码

名称空间编码可用来确保 portlet 中使用的变量在门户网站容器内是唯一的。下面的摘录还说明了可在 JSP 文件中使用的名称空间编码方法。

IBM portlet API
在 Java 类中:PortletResponse.encodeNamespace()
在 JSP 文件中:  <portletAPI:encodeNamespace/>
JSR 168 portlet API
在 Java 类中:RenderResponse.getNamespace()
在 JSP 文件中:  <portlet:namespace/>

现在,您可以开始进行练习 1.4:比较部署描述符差别了。

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.