Esercizio 1.5: Confronto delle differenze di codifica dei file JSP

Prima di iniziare, è necessario completare l'Esercizio 1.4: Confronto delle differenze dei descrittori di distribuzione.

In questo esercizio verranno illustrate le differenze della codifica dei file JSP tra le due API per portlet. Esaminare le due versioni dei file JSP Edit e View. Le principali differenze vengono descritte di seguito.

Librerie di tag

I tag di IBM portlet API vengono dichiarati nella libreria di tag portlet.tld. I tag utilizzano il prefisso portletAPI. JSR 168 portlet API utilizza la libreria di tag std-portlet.tld e il prefisso portlet. È possibile utilizzare anche altre librerie di tag, come JSTL (JavaServer Pages Standard Tag Library), definite in fmt.tld. Come illustrato nel codice di esempio riportato di seguito, la libreria di tag JSTL utilizza il prefisso 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"/>

Disponibilità degli oggetti per i file JSP

In IBM portlet API, il tag <portletAPI:init> rende gli oggetti PortletRequest, PortletResponse e PortletConfig disponibili per i file JSP. In JSR 168 portlet API, il tag <portlet:defineObjects> rende gli oggetti RenderRequest, RenderResponse e PortletConfig disponibili per i file JSP.

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

Dichiarazioni del tipo MIME

Le due API differiscono nel modo in cui impostano il tipo MIME per la risposta di rendering. I portlet IBM dichiarano il tipo MIME nella direttiva della pagina del file JSP. I portlet JSR 168 dichiarano il tipo MIME utilizzando il metodo setContentType() dell'oggetto RenderResponse nei metodi di rendering (doView(), doEdit()).

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");

Riferimenti dei portlet

I riferimenti a un portlet, a una pagina oppure alle risorse di un portlet devono essere codificati in un URI del portlet (JSR 168 utilizza il termine URL). IBM portlet API utilizza createURI per puntare al portlet che esegue la chiamata nella modalità corrente e createReturnURI per puntare al portlet che esegue la chiamata nella modalità precedente. JSR 168 portlet API crea URL per la fase azione (actionURL) e la fase di rendering (renderURL).

IBM portlet API
in a JSP file:   <portletAPI:createURI/>
                 <portletAPI:createReturnURI/>
in una classe Java: PortletResponse.createURI()
                 PortletResponse.createReturnURI()
JSR 168 portlet API
in a JSP file:   <portlet:actionURL/>
                 <portlet:renderURL/>
in a Java class: RenderResponse.createActionURL()
                 RenderResponse.createRenderURL()

Codifica URL

I file JSP dei portlet devono codificare URL che fanno riferimento alle risorse nel file WAR associato, come le immagini, gli applet e altri file JSP. JSR 168 portlet API richiede che anche nell'URL venga incluso il percorso di contesto.

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

Codifica dello spazio nomi

La codifica dello spazio nomi, sia per le classi Java che per i file JSP, viene descritta nella sezione Codifica dello spazio nomi nell'Esercizio 1.3.

Insiemi di risorse

Il codice di esempio per entrambe le API mostra l'uso dei tag JSTL <fmt:setBundle>. Questo tag si riferisce a un insieme di risorse Java standard, Text.properties, nella directory JavaSource/nls degli esempi. Confrontare questo insieme con gli insiemi che definiscono il portlet.

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

A questo punto, è possibile iniziare l'Esercizio 1.6: Scelta dell'API da utilizzare.

Feedback
(C) Copyright IBM Corporation 2000, 2005. Tutti i diritti riservati.