Übung 1.5: Unterschiede in der Codierung der JSP-Dateien vergleichen

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.

Tagbibliotheken

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.

IBM Portlet-API
<%@ 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" />

JSR 168-Portlet-API
<%@ 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"/>

Objekt für JSP-Dateien verfügbar machen

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.

IBM Portlet-API
<portletAPI:init />
JSR 168-Portlet-API
<portlet:defineObjects />

Deklarationen des MIME-Typs

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.

IBM Portlet-API
<%@ page contentType="text/html"
         import="java.util.*,
                 com.ibm.etools.portal.portletexamples.bookmark.legacy.*,
                 org.apache.jetspeed.portlet.*"
         session="false"%>
JSR 168-Portlet-API
response.setContentType("text/html");

Portletverweise

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).

IBM Portlet-API
In einer JSP-Datei:   <portletAPI:createURI/>
                 <portletAPI:createReturnURI/>
In einer Java-Klasse: PortletResponse.createURI()
                 PortletResponse.createReturnURI()
JSR 168-Portlet-API
In einer JSP-Datei:   <portlet:actionURL/>
                 <portlet:renderURL/>
In einer Java-Klasse: RenderResponse.createActionURL()
                 RenderResponse.createRenderURL()

URL-Codierung

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.

IBM Portlet-API
<%= response.encodeURL("images/photo01.jpg") %>
JSR 168-Portlet-API
<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/photo01.jpg") %>

Namensbereichscodierung

Die Namensbereichscodierung für Java-Klassen und JSP-Dateien wird in Übung 1.3 im Abschnitt Namensbereichscodierung besprochen.

Ressourcenpakete

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.

IBM Portlet-API
<fmt:setBundle basename="nls.Text" />
JSR 168-Portlet-API
<fmt:setBundle basename="nls.Text" />

Nun sind Sie bereit für die Übung 1.6: API auswählen.

Nutzungsbedingungen | Feedback
(C) Copyright IBM Corporation 2000, 2005. Alle Rechte vorbehalten.