開始之前,您應該先完成練習 1.2:API 之間的概念差異。
在這個練習中,您將學會兩種 Portlet API 之間的 Java 類別編碼差異。 請檢查 BookmarkPortlet Java 類別的兩個版本。 請注意這兩個 API 之間的下列基本差異:
兩個 API 匯入的 Portlet 類別不同。
import org.apache.jetspeed.portlet.*;
import javax.portlet.*;
兩個 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 類別。
public class BookmarkPortlet extends PortletAdapter implements ActionListener
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 物件來提供一般功能。
public void doEdit(PortletRequest request, PortletResponse response)
public void doEdit(RenderRequest request, RenderResponse response)
IBM Portlet API 利用 PortletContext 物件來併入 JSP 檔;JSR 168 Portlet API 則使用 PortletRequestDispatcher 物件。併入動作會呼叫指定的 JSP 檔。
getPortletConfig().getContext().include(EDIT_JSP, request, response);
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
rd.include(request, response);
IBM Portlet API 會將使用者資料儲存在 PortletData 物件中。JSR 168 Portlet API 會將類似的資訊儲存在 PortletPreferences 物件中。
PortletData prefs = portletRequest.getData()
PortletPreferences prefs = renderRequest.getPreferences()
在 IBM Portlet API 中,Java 類別必須提供 actionPerformed() 方法來實作 ActionListener 介面。 當使用 JSR 168 Portlet API 時,Java 類別必須提供 processAction() 方法;不需要任何接聽器。
public void actionPerformed(ActionEvent event) throws PortletException
public void processAction(ActionRequest request, ActionResponse response)
名稱空間編碼用來確保 Portlet 中所用的變數在入口網站儲存器中不重複。 下列摘要也顯示 JSP 檔所用的名稱空間編碼方法。
在 Java 類別中:PortletResponse.encodeNamespace()
在 JSP 檔中: <portletAPI:encodeNamespace/>
在 Java 類別中:RenderResponse.getNamespace()
在 JSP 檔中: <portlet:namespace/>
現在您已準備好開始進行練習 1.4:比較部署描述子的差異。