練習 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.Portlet 介面之預設實作的 org.apache.jetspeed.portlet.PortletAdapter。 這個 Portlet 類別繼承 HttpServlet,因此,IBM Portlet 是某類型的 Servlet。JSR 168 Portlet API 提供實作 javax.portlet.Portlet 介面的 javax.portlet.GenericPortlet 類別。

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

要求和回應物件

呈現 (JSR 168 API) 或服務 (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 檔。

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.