Exercício 1.5: Comparando Diferenças de Codificação do Arquivo JSP

Antes de começar, você deve concluir Exercício 1.4: Comparando Diferenças do Descritor de Implementação.

Neste exercício, você aprenderá as diferenças na codificação do arquivo JSP entre as duas APIs de portlet. Examine as duas versões dos arquivos JSP de Edição e Visualização. As diferenças básicas são descritas a seguir.

Bibliotecas de Tags

As tags da API de portlet IBM são declaradas na biblioteca de tags portlet.tld. As tags utilizam o prefixo portletAPI. A API de portlet JSR 168 utiliza a biblioteca de tags std-portlet.tld e o prefixo portlet. Outras bibliotecas de tags, como a JSTL (JavaServer Pages Standard Tag Library), definidas no fmt.tld , também podem ser utilizadas. Conforme mostrado no código de amostra a seguir, a biblioteca de tags JSTL utiliza o prefixo fmt.

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

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

Tornando os Objetos Disponíveis para Arquivos JSP

Na API de portlet IBM, a tag <portletAPI:init> torna os objetos PortletRequest, PortletResponse e PortletConfig disponíveis para os arquivos JSP. Na API de portlet JSR 168, a tag <portlet:defineObjects> torna os objetos RenderRequest, RenderResponse e PortletConfig disponíveis para os arquivos JSP.

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

declarações do tipo MIME

As duas APIs diferem em como elas definem o tipo MIME para a resposta de processamento. Os portlets IBM declaram o tipo MIME na diretiva da página do arquivo JSP. Os portlets JSR 168 declaram o tipo MIME utilizando o método setContentType() do objeto RenderResponse nos métodos de processamento (doView(), doEdit()).

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

Referências de Portlet

Referências a um portlet, a página do portlet ou recurso do portlet devem ser codificadas em um URI de portlet (o JSR 168 utiliza o termo URL). A API de portlet IBM utiliza o createURI para apontar para o portlet de chamada no modo atual e createReturnURI para apontar para o portlet de chamada no modo anterior. A API de portlet JSR 168 cria URLs para a fase de ação (actionURL) e a fase de processamento (renderURL).

API do portlet IBM
em um arquivo JSP:   <portletAPI:createURI/>
                 <portletAPI:createReturnURI/>
em uma classe Java: PortletResponse.createURI()
                 PortletResponse.createReturnURI()
API do portlet JSR 168
em um arquivo JSP:   <portlet:actionURL/>
                 <portlet:renderURL/>
em uma classe Java: RenderResponse.createActionURL()
                 RenderResponse.createRenderURL()

Codificação de URL

Os arquivos JSP de portlet devem codificar URLs que se referem a recursos no arquivo WAR associado, como imagens, applets e outros arquivos JSP. A API de portlet JSR 168 também requer que o caminho de contexto seja incluído na URL.

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

Codificação de Espaço de Nomes

A codificação de espaço de nomes, para classes Java e arquivos JSP, é descrita Codificação de Espaços de Nomes no exercício 1.3.

Pacotes de Recursos

O código de exemplo para ambas as APIs mostra a utilização da tag JSTL <fmt:setBundle>. Essa tag refere-se a um pacote de recursos Java padrão, Text.properties, no diretório JavaSource/nls das amostras. Compare isso com Pacotes de Recursos que Definem o Portlet.

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

Agora você está pronto para começar o Exercício 1.6: Decidindo qual API Utilizar.

Termos de Utilização | Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.