Bevor Sie anfangen, müssen Sie die Übung 1.4: Unterschiede zwischen den Implementierungsdeskriptoren vergleichen ausführen.
In dieser Übung lernen Sie die Unterschiede bei der Codierung der JSP-Dateien zwischen den beiden Portlet-APIs kennen. Untersuchen Sie die beiden Versionen der JSP-Dateien für die Bearbeitung und die Anzeige. Die Hauptunterschiede werden nachstehend besprochen.
Die Tags der IBM Portlet-API werden in der Tagbibliothek portlet.tld
deklariert. Die Tags verwenden das Präfix portletAPI. Die JSR 168-Portlet-API verwendet die Tagbibliothek std-portlet.tld
und das Präfix portlet. Es können auch andere Tagbibliotheken verwendet werden, beispielsweise die in fmt.tld
definierte JSTL (JavaServer Pages Standard Tag Library). Wie aus dem nachstehenden Beispielcode ersichtlich ist, verwendet die Tagbibliothek JSTL das Präfix fmt.
<%@ taglib uri="/WEB-INF/tld/portlet.tld" prefix="portletAPI" %>
<portletAPI:init />
<%@ taglib prefix="fmt" uri="/WEB-INF/tld/fmt.tld" %>
<fmt:setBundle basename="nls.Text" />
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<portlet:defineObjects />
<%@ taglib prefix="fmt" uri="/WEB-INF/tld/fmt.tld" %>
<fmt:setBundle basename="nls.Text"/>
Bei der IBM Portlet-API macht das Tag <portletAPI:init> die Objekte PortletRequest, PortletResponse und PortletConfig für die JSP-Dateien verfügbar. Bei der JSR 168-Portlet-API macht das Tag <portlet:defineObjects> die Objekte RenderRequest, RenderResponse und PortletConfig für die JSP-Dateien verfügbar.
<portletAPI:init />
<portlet:defineObjects />
Die beiden APIs unterscheiden sich bei der Definition des MIME-Typs für die Wiedergabeantwort. Bei IBM Portlets wird der MIME-Typ auf der Seitenanweisung der JSP-Datei deklariert. Bei JSR 168-Portlets wird der MIME-Typ in den Wiedergabemethoden (doView() und doEdit()) mit Hilfe der Methode setContentType() des Objekts RenderResponse deklariert.
<%@ page contentType="text/html"
import="java.util.*,
com.ibm.etools.portal.portletexamples.bookmark.legacy.*,
org.apache.jetspeed.portlet.*"
session="false"%>
response.setContentType("text/html");
Verweise auf ein Portlet, eine Portletseite oder eine Portletressource müssen in einem Portlet-URI codiert sein (JSR 168 verwendet den Begriff URL). Bei der IBM Portlet-API wird createURI zum Zeigen auf das aufrufende Portlet im aktuellen Modus verwendet. Mit createReturnURI wird auf das aufrufende Portlet im vorigen Modus verwiesen. Die JSR 168-Portlet API erstellt URLs für die Aktionsphase (actionURL) und für die Wiedergabephase (renderURL).
In einer JSP-Datei: <portletAPI:createURI/>
<portletAPI:createReturnURI/>
In einer Java-Klasse: PortletResponse.createURI()
PortletResponse.createReturnURI()
In einer JSP-Datei: <portlet:actionURL/>
<portlet:renderURL/>
In einer Java-Klasse: RenderResponse.createActionURL()
RenderResponse.createRenderURL()
JSP-Dateien in Portlets müssen URLs codieren, die auf Ressourcen in der zugeordneten WAR-Datei verweisen, beispielsweise auf Bilder, Applets und andere JSP-Dateien. Außerdem muss bei der JSR 168-Portlet-API der Kontextpfad in der URL enthalten sein.
<%= response.encodeURL("images/photo01.jpg") %>
<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/photo01.jpg") %>
Die Namensbereichscodierung für Java-Klassen und JSP-Dateien wird in Übung 1.3 im Abschnitt Namensbereichscodierung besprochen.
Der Beispielcode für beide APIs zeigt die Verwendung des JSTL-Tags <fmt:setBundle>.
Dieses Tag verweist auf Text.properties
, ein standardmäßiges Java-Ressourcenpaket, das sich im Verzeichnis JavaSource/nls
der Beispiele befindet. Vergleichen Sie dies mit den Ressourcenpaketen zum Definieren des Portlets.
<fmt:setBundle basename="nls.Text" />
<fmt:setBundle basename="nls.Text" />
Nun sind Sie bereit für die Übung 1.6: API auswählen.