SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
J550

Tag Libraries
e JSTL
Helder da Rocha (helder@acm.org)
www.argonavis.com.br

1
Custom tags
JSP com JavaBeans fornecem um meio de diminuir código Java
da página, mas não totalmente
Designers de página ainda têm que usar elementos de script para
loops e lógica condicional (getProperty e setProperty não bastam)
Nem sempre os JavaBeans são suficientes para encapsular toda a
lógica da aplicação

A especificação prevê a criação de elementos XML
personalizados (custom tags) para resolver essas limitações
Organizados em bibliotecas (taglibs)
Cada biblioteca tem seu próprio namespace

Taglibs são declaradas no início de cada página ...
<%@taglib uri="http://abc.com/ex" prefix="exemplo"%>

... e usadas em qualquer lugar
<exemplo:dataHoje />

produz

namespace
Tuesday, May 5, 2002 13:13:13 GMT-03

2
Como usar custom tags
A URI usada para identificar o prefixo de um custom
tag não precisa ser real (e apontar para um local)
Serve apenas como identificador
Ligação entre a especificação da biblioteca (arquivo TLD)
e o identificador é feito no arquivo web.xml
<web-app>
...
<taglib>
<taglib-uri>http://abc.com/ex</taglib-uri>
<taglib-location>
/WEB-INF/mytaglib.tld
</taglib-location>
Este é o deployment
</taglib>
descriptor do Taglib.
</web-app>
Localização real!

3
Exemplo de arquivo TLD
<?xml version="1.0" ?>
<!DOCTYPE taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>exemplo</short-name>
<uri>http://abc.com/ex</uri>

Sugestão de prefixo
(autor de página pode
escolher outro na hora)
URI identifica o prefixo.
(autor de página tem que
usar exatamente esta URI)

<tag>
<name>dataHoje</name>
<tag-class>exemplos.DateTag</tag-class>
<description>Data de hoje</description>
</tag>
</taglib>

4
Exemplos de Custom Tags
Veja exemplos/cap11/taglibs/
Vários diferentes exemplos de custom tags (de [6])
Código fonte em taglib/src/taglibdemo/*.java
Páginas exemplo em src/*Test.jsp (6 exemplos)
1. Configure build.properties, depois, monte o WAR com:
> ant build

2. Copie o WAR para o diretório webapps do Tomcat
> ant deploy

3. Execute os tags, acessando as páginas via browser:
http://localhost:porta/mut/

Veja também exemplos/cap12/mvc/hellojsp_2/
Aplicação MVC que usa custom tags
5
JSP Standard Tag Library
Esforço de padronização do JCP: JSR-152
Baseado no Jakarta Taglibs (porém bem menor)

Oferece dois recursos
Conjunto padrão de tags básicos (Core, XML, banco de
dados e internacionalização)
Linguagem de expressões do JSP 1.3

Oferece mais controle ao autor de páginas sem
necessariamente aumentar a complexidade
Controle sobre dados sem precisar escrever scripts
Estimula a separação da apresentação e lógica
Estimula o investimento em soluções MVC
6
Como usar JSTL
1. Fazer o download da última versão do site da Sun
2. Copiar os JARs das bibliotecas desejadas para o
diretório WEB-INF/lib/ da sua aplicação Web e os
arquivos TLD para o diretório WEB-INF/
3. Declarar cada taglib e associá-la com seu TLD no
deployment descriptor web.xml.
4. Incluir em cada página que usa os tags:
<%@ taglib uri="uri_da_taglib"
prefix="prefixo" %>

5. Usar os tags da biblioteca com o prefixo definido
no passo anterior
<prefixo:nomeTag atributo="..."> ...
</prefixo:nomeTag>

7
Quatro bibliotecas de tags
Core library: tags para condicionais, iterações, urls, ...
<%@ taglib uri="http://java.sun.com/jstl/ea/core"
prefix="c" />
Exemplo: <c:if test="..." ... >...</c:if>

XML library: tags para processamento XML
<%@ taglib uri="http://java.sun.com/jstl/ea/xml"
prefix="x" />
Exemplo: <x:parse>...</x:parse>

Internationalization library
<%@ taglib uri="http://java.sun.com/jstl/ea/fmt"
prefix="fmt" />
Exemplo: <fmt:message key="..." />

SQL library
<%@ taglib uri="http://java.sun.com/jstl/ea/sql"
prefix="sql" />
Exemplo: <sql:update>...</sql:update>

8
Linguagem de expressões
Permite embutir em atributos expressões dentro de
delimitadores ${...}
Em vez de request.getAttribute("nome")
${nome}
Em vez de bean.getPessoa().getNome()
${bean.pessoa.nome}

Suporta operadores aritméticos, relacionais e binários
Converte tipos automaticamente
<tag item="${request.valorNumerico}" />

Valores default
<tag value="${abc.def}" default="todos" />

9
Principais ações
Suporte à impressão da linguagem expressões
<c:out value="${pessoa.nome}" />

Expressões condicionais
<c:if test="${pessoa.idade &gt;= 18}">
<a href="adultos.html">Entrar</a>
</c:if>
<c:choose>
<c:when test="${dia.hora == 13}">
<c:out value="${mensagemEspecial}" />
</c:when>
<c:otherwise>
<c:out value="${mensagemPadrao}" />
</c:otherwise>
</c:choose>

Iteração
<c:forEach items="${pessoas}" var="p" varStatus="s">
<c:out value="${s.count}"/>. <c:out value="${p}"/>
</c:forEach>

10
Internacionalização, XML e SQL
Ler propriedade de ResourceBundle
<fmt:message key="chave.do.bundle" />

Operações diretas em banco de dados
<sql:query dataSource="${dsn}">
SELECT...</sql:query>
<sql:transaction>, <sql:update>,

etc.

Operações com XML
Uso de expressões XPath em tags JSTL para XML
Ações XML: <x:out>, <x:set>, <x:if>, <x:choose>,
<x:forEach> (atributo select contém expr. XPath)
<x:parse> Processa XML usando DOM ou filtro SAX
<x:transform> Realiza transformação XSLT.
11
Exercícios
1. Inclua a taglib exemplo.tld em uma de suas
aplicações e use o tag dataHoje
O tag está dentro de exemplo.jar que deve ser copiado
para o diretório lib de sua aplicação

2. Instalar tags do JSTL
Instale a biblioteca JSTL na sua aplicação, copiando os
JARs e TLDs para os locais exigidos
Veja a documentação e os tags disponíveis

3. Use os tags de lógica <if> e <forEach> para
remover as expressões condicionais e iterações das
páginas da aplicação de mensagens
12
helder@acm.org

argonavis.com.br
13

Más contenido relacionado

La actualidad más candente

Java Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsJava Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsEduardo Mendes
 
Engenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galoEngenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galoGuilhermePetrosky
 
Introdução à programação para web com Java - Módulo 01: Conexão com bamco de...
Introdução à programação para web com Java -  Módulo 01: Conexão com bamco de...Introdução à programação para web com Java -  Módulo 01: Conexão com bamco de...
Introdução à programação para web com Java - Módulo 01: Conexão com bamco de...Professor Samuel Ribeiro
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Tomcat e Aplicações Web
Tomcat e Aplicações WebTomcat e Aplicações Web
Tomcat e Aplicações Webelliando dias
 
Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Eduardo Mendes
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Boas práticas com jpa 2 e hibernate flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate flisol 2012Frederico Maia Arantes
 
Java 8 para o dia a dia
Java 8 para o dia a diaJava 8 para o dia a dia
Java 8 para o dia a diaRicardo Faria
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 

La actualidad más candente (20)

Java Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsJava Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e Taglibs
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
jsp-intro
jsp-introjsp-intro
jsp-intro
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Anotações do mapeamento OR
Anotações do mapeamento ORAnotações do mapeamento OR
Anotações do mapeamento OR
 
Engenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galoEngenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galo
 
Introdução à programação para web com Java - Módulo 01: Conexão com bamco de...
Introdução à programação para web com Java -  Módulo 01: Conexão com bamco de...Introdução à programação para web com Java -  Módulo 01: Conexão com bamco de...
Introdução à programação para web com Java - Módulo 01: Conexão com bamco de...
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Tomcat e Aplicações Web
Tomcat e Aplicações WebTomcat e Aplicações Web
Tomcat e Aplicações Web
 
JSPs Etiquetas
JSPs EtiquetasJSPs Etiquetas
JSPs Etiquetas
 
Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Java 08
Java 08Java 08
Java 08
 
Boas práticas com jpa 2 e hibernate flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate flisol 2012
 
Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)
 
Contextos
ContextosContextos
Contextos
 
Java 8 para o dia a dia
Java 8 para o dia a diaJava 8 para o dia a dia
Java 8 para o dia a dia
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 

Similar a Tag Libraries e JSTL

xDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletxDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletDenis L Presciliano
 
Revisao Geral
Revisao GeralRevisao Geral
Revisao GeralOscar
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationMario Sergio
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordtchandy
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6danielfcampos
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotationeduardo dias
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.Rogério Napoleão Jr.
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010Eder Magalhães
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Vinicius Pulgatti
 

Similar a Tag Libraries e JSTL (20)

Como criar Custom Tags
Como criar Custom TagsComo criar Custom Tags
Como criar Custom Tags
 
Tag Libraries
Tag LibrariesTag Libraries
Tag Libraries
 
xDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletxDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdoclet
 
Revisao Geral
Revisao GeralRevisao Geral
Revisao Geral
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web Application
 
JSP: Introdução Parte 1
JSP: Introdução Parte 1JSP: Introdução Parte 1
JSP: Introdução Parte 1
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.
 
Apache Struts
Apache StrutsApache Struts
Apache Struts
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010
 
Introducao logica2
Introducao logica2Introducao logica2
Introducao logica2
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
J530 14 xdoclet
J530 14 xdocletJ530 14 xdoclet
J530 14 xdoclet
 

Más de Denis L Presciliano

Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsDenis L Presciliano
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsDenis L Presciliano
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteDenis L Presciliano
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoDenis L Presciliano
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Denis L Presciliano
 
Configuração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntConfiguração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntDenis L Presciliano
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em JavaDenis L Presciliano
 

Más de Denis L Presciliano (20)

Funmentos de Objetos Remotos
Funmentos de Objetos RemotosFunmentos de Objetos Remotos
Funmentos de Objetos Remotos
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Classes internas
Classes internasClasses internas
Classes internas
 
Entrada e Saída
Entrada e SaídaEntrada e Saída
Entrada e Saída
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Interfaces e Porlimosfismo
Interfaces e PorlimosfismoInterfaces e Porlimosfismo
Interfaces e Porlimosfismo
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Como criar classes e objetos
Como criar classes e objetosComo criar classes e objetos
Como criar classes e objetos
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
 
Configuração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntConfiguração do ambiente JEdit + Ant
Configuração do ambiente JEdit + Ant
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Introdução a tecnologia Java
Introdução a tecnologia JavaIntrodução a tecnologia Java
Introdução a tecnologia Java
 
Fundamentos de Sockets
Fundamentos de SocketsFundamentos de Sockets
Fundamentos de Sockets
 
J530 15 workshop
J530 15 workshopJ530 15 workshop
J530 15 workshop
 

Tag Libraries e JSTL

  • 1. J550 Tag Libraries e JSTL Helder da Rocha (helder@acm.org) www.argonavis.com.br 1
  • 2. Custom tags JSP com JavaBeans fornecem um meio de diminuir código Java da página, mas não totalmente Designers de página ainda têm que usar elementos de script para loops e lógica condicional (getProperty e setProperty não bastam) Nem sempre os JavaBeans são suficientes para encapsular toda a lógica da aplicação A especificação prevê a criação de elementos XML personalizados (custom tags) para resolver essas limitações Organizados em bibliotecas (taglibs) Cada biblioteca tem seu próprio namespace Taglibs são declaradas no início de cada página ... <%@taglib uri="http://abc.com/ex" prefix="exemplo"%> ... e usadas em qualquer lugar <exemplo:dataHoje /> produz namespace Tuesday, May 5, 2002 13:13:13 GMT-03 2
  • 3. Como usar custom tags A URI usada para identificar o prefixo de um custom tag não precisa ser real (e apontar para um local) Serve apenas como identificador Ligação entre a especificação da biblioteca (arquivo TLD) e o identificador é feito no arquivo web.xml <web-app> ... <taglib> <taglib-uri>http://abc.com/ex</taglib-uri> <taglib-location> /WEB-INF/mytaglib.tld </taglib-location> Este é o deployment </taglib> descriptor do Taglib. </web-app> Localização real! 3
  • 4. Exemplo de arquivo TLD <?xml version="1.0" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>exemplo</short-name> <uri>http://abc.com/ex</uri> Sugestão de prefixo (autor de página pode escolher outro na hora) URI identifica o prefixo. (autor de página tem que usar exatamente esta URI) <tag> <name>dataHoje</name> <tag-class>exemplos.DateTag</tag-class> <description>Data de hoje</description> </tag> </taglib> 4
  • 5. Exemplos de Custom Tags Veja exemplos/cap11/taglibs/ Vários diferentes exemplos de custom tags (de [6]) Código fonte em taglib/src/taglibdemo/*.java Páginas exemplo em src/*Test.jsp (6 exemplos) 1. Configure build.properties, depois, monte o WAR com: > ant build 2. Copie o WAR para o diretório webapps do Tomcat > ant deploy 3. Execute os tags, acessando as páginas via browser: http://localhost:porta/mut/ Veja também exemplos/cap12/mvc/hellojsp_2/ Aplicação MVC que usa custom tags 5
  • 6. JSP Standard Tag Library Esforço de padronização do JCP: JSR-152 Baseado no Jakarta Taglibs (porém bem menor) Oferece dois recursos Conjunto padrão de tags básicos (Core, XML, banco de dados e internacionalização) Linguagem de expressões do JSP 1.3 Oferece mais controle ao autor de páginas sem necessariamente aumentar a complexidade Controle sobre dados sem precisar escrever scripts Estimula a separação da apresentação e lógica Estimula o investimento em soluções MVC 6
  • 7. Como usar JSTL 1. Fazer o download da última versão do site da Sun 2. Copiar os JARs das bibliotecas desejadas para o diretório WEB-INF/lib/ da sua aplicação Web e os arquivos TLD para o diretório WEB-INF/ 3. Declarar cada taglib e associá-la com seu TLD no deployment descriptor web.xml. 4. Incluir em cada página que usa os tags: <%@ taglib uri="uri_da_taglib" prefix="prefixo" %> 5. Usar os tags da biblioteca com o prefixo definido no passo anterior <prefixo:nomeTag atributo="..."> ... </prefixo:nomeTag> 7
  • 8. Quatro bibliotecas de tags Core library: tags para condicionais, iterações, urls, ... <%@ taglib uri="http://java.sun.com/jstl/ea/core" prefix="c" /> Exemplo: <c:if test="..." ... >...</c:if> XML library: tags para processamento XML <%@ taglib uri="http://java.sun.com/jstl/ea/xml" prefix="x" /> Exemplo: <x:parse>...</x:parse> Internationalization library <%@ taglib uri="http://java.sun.com/jstl/ea/fmt" prefix="fmt" /> Exemplo: <fmt:message key="..." /> SQL library <%@ taglib uri="http://java.sun.com/jstl/ea/sql" prefix="sql" /> Exemplo: <sql:update>...</sql:update> 8
  • 9. Linguagem de expressões Permite embutir em atributos expressões dentro de delimitadores ${...} Em vez de request.getAttribute("nome") ${nome} Em vez de bean.getPessoa().getNome() ${bean.pessoa.nome} Suporta operadores aritméticos, relacionais e binários Converte tipos automaticamente <tag item="${request.valorNumerico}" /> Valores default <tag value="${abc.def}" default="todos" /> 9
  • 10. Principais ações Suporte à impressão da linguagem expressões <c:out value="${pessoa.nome}" /> Expressões condicionais <c:if test="${pessoa.idade &gt;= 18}"> <a href="adultos.html">Entrar</a> </c:if> <c:choose> <c:when test="${dia.hora == 13}"> <c:out value="${mensagemEspecial}" /> </c:when> <c:otherwise> <c:out value="${mensagemPadrao}" /> </c:otherwise> </c:choose> Iteração <c:forEach items="${pessoas}" var="p" varStatus="s"> <c:out value="${s.count}"/>. <c:out value="${p}"/> </c:forEach> 10
  • 11. Internacionalização, XML e SQL Ler propriedade de ResourceBundle <fmt:message key="chave.do.bundle" /> Operações diretas em banco de dados <sql:query dataSource="${dsn}"> SELECT...</sql:query> <sql:transaction>, <sql:update>, etc. Operações com XML Uso de expressões XPath em tags JSTL para XML Ações XML: <x:out>, <x:set>, <x:if>, <x:choose>, <x:forEach> (atributo select contém expr. XPath) <x:parse> Processa XML usando DOM ou filtro SAX <x:transform> Realiza transformação XSLT. 11
  • 12. Exercícios 1. Inclua a taglib exemplo.tld em uma de suas aplicações e use o tag dataHoje O tag está dentro de exemplo.jar que deve ser copiado para o diretório lib de sua aplicação 2. Instalar tags do JSTL Instale a biblioteca JSTL na sua aplicação, copiando os JARs e TLDs para os locais exigidos Veja a documentação e os tags disponíveis 3. Use os tags de lógica <if> e <forEach> para remover as expressões condicionais e iterações das páginas da aplicação de mensagens 12