Top Banner
Java Server Pages Java Server Pages (JSPs) (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense
70

Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Apr 17, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Java Server Pages (JSPs)Java Server Pages (JSPs)

Carlos Bazilio

Depto de Ciência e TecnologiaPólo Universitário de Rio das Ostras

Universidade Federal Fluminense

Page 2: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

2

JSPs (JSPs (JavaServer PagesJavaServer Pages))

• São uma maneira mais confortável (comparado aos servlets) de se criar páginas web dinâmicas

• Aparentemente, podem ser encaradas como o oposto de servlets: servlets são classes Java gerando html, enquanto jsps são htmls com trechos de código Java

• Tecnicamente, são equivalentes: jsps são traduzidos pelo contêiner web em servlets equivalentes

Page 3: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

3

JSP (JSP (JavaServer PageJavaServer Page))

• Referência: “http://java.sun.com/javaee/5/docs/api/javax/servlet/jsp/package-summary.html”

Page 4: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

4

JSP - ExemploJSP - Exemplo

<html> <head> <title>JSP Básico</title> </head> <body> <h1>Um exemplo básico</h1> <% for (int i=1; i<7; i++) { out.println("<h" + i + ">Heading " + i + "</h" + i + ">"); } %> </body></html>

Page 5: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

5

JSP – Exercício 6JSP – Exercício 6

• Copie o arquivo .jsp do exemplo para dentro do diretório de sua aplicação no Tomcat;

• Chame a página digitando a url correspondente no browser: http://localhost:8080/<diretorio_aplicacao>/<arquivo>.jsp

Page 6: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

6

JSP – Exercício 6JSP – Exercício 6

• De forma a simplificar a manutenção, supondo que os exercícios feitos até então compõe uma aplicação web, defina um servlet que receberá e tratará as requisições enviadas pelo cliente.

Page 7: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

7

JSP – Ciclo de VidaJSP – Ciclo de Vida

• Podemos observar que, numa primeira chamada da página JSP, o browser demora um pouco para apresentar a resposta;

• Isto ocorre pois a página JSP precisa ser interpretada;

• Naturalmente, em chamadas sucessivas, o servlet não precisa ser gerado e o browser apresenta a resposta recebida mais rapidamente

Page 8: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

8

JSP – Processo de JSP – Processo de CompilaçãoCompilação

• Solicitação para um JSP é recebida pelo contêiner

• Existem compilações de servlet com um registro de data/hora posterior ao JSP de origem?– Se não, o contêiner traduz o JSP para um servlet

Java equivalente, compila o arquivo e instancia o servlet;

• O contêiner invoca jsp_service() para executar o servlet;

• A resposta é enviada ao cliente.

Page 9: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

9

JSP – Ciclo de VidaJSP – Ciclo de Vida

Page 10: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

10

JSP – Servlet GeradoJSP – Servlet Gerado

• No Tomcat, o código do servlet gerado pode ser encontrado no diretório <tomcat>/work;

• Do código gerado, podemos observar que a classe <arquivo>_jsp não herda de HttpServlet, mas sim de uma especialização do fabricante;

• O método _jspService() equivale ao método service() visto anteriormente;

• Ele representa o conteúdo da JSP traduzido

Page 11: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

11

JSP – Tipos de TagsJSP – Tipos de Tags

• Além das tags HTML, as seguintes tags podem ocorrer numa página JSP:

<% ... %> Tag de inserção de código Java <% int v = (int) (Math.random() * 10); %>

<%= ... %> Tag que gera o valor de uma expressão para ser exibido

<%= (Math.random() * 10) %>

<%! ... %> Tag de declaração. As declarações podem ser de variáveis instância ou métodos do servlet

<%! int v = (Math.random() * 10); %>

<%@ ... %> Tags para definição de diretivas: include, page e taglib

<%@ include file="formBasico.html" %>

Page 12: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

12

JSP - ComentáriosJSP - Comentários

<!-- ... --> Comentário copiado para a saída

<%! // ... %>

Comentários copiados para o código do servlet gerado

<%! /* ... */ %>

<%! /** ... */ %>

<% // ... %> e variantes acima

<%-- ... --%> Comentário JSP. Não é copiado nem para a saída, nem para o servlet.

Page 13: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

13

JSP – Exercício 7JSP – Exercício 7• Crie uma página JSP para exibir a saída

abaixo. Para tal declare uma variável que irá conter uma lista de valores a serem copiados para a saída do usuário.

Page 14: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

14

JSP – Variáveis Pré-JSP – Variáveis Pré-DefinidasDefinidas

• Auxiliam na criação de páginas JSP;• São usualmente chamadas de

objetos implícitos, pois podemos utilizá-las sem declará-las;

• Podemos encontrar estas declarações no início do método _jspService() (método do servlet gerado à partir de uma JSP).

Page 15: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

15

JSP – Variáveis Pré-JSP – Variáveis Pré-DefinidasDefinidas

application Implementa a interface javax.servlet.ServletContext. Corresponde ao escopo de aplicação.

config É um objeto da classe ServletConfig. Ou seja, permite acessar parâmetros como os de inicialização do servlet.

out Envia dados de saída de volta para o usuário. É utilizado apenas dentro de scriptlets.

pageContext Oferece métodos para recuperação dos outros objetos implícitos.

request Permite a obtenção de informações sobre o request.

response Permite a configuração de saída para o usuário.

session Fornece métodos para a manipulação de sessões.

Page 16: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

16

JSP – Exemplo com JSP – Exemplo com Variáveis Pré-definidasVariáveis Pré-definidas

<html><head><title>Basicão JSP</title></head> <body> <% String acessou = “sim”; session.setAttribute("statusBasicao", acessou); %> </body></html>…<html><head><title>Outro JSP</title></head> <body> <% if ((session.getAttribute("statusBasicao") != null) &&(session.getAttribute("statusBasicao").equals(“sim”))

out.println(session.getAttribute("statusBasicao")); else out.println("Basicao não executado"); %> </body></html>

Page 17: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

17

Diretivas JSP – Diretivas JSP – Exercício 8Exercício 8

• Mostre, numa página JSP, o valor do contador criado num servlet anteriormente. Para tal, o contador deve ter sido criado como atributo.

Page 18: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

18

JSP - DiretivasJSP - Diretivas

• São tags que fornecem ao contêiner informações sobre uma página JSP;

• Como citamos no slide Tipos de Tags, JSP possui 3 tipos de diretivas:– include– page– taglib

• As diretivas include têm a seguinte sintaxe:<%@ include file="<url_arquivo_incluido>" %>

Page 19: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

19

JSP – Exemplo de JSP – Exemplo de diretivasdiretivas

<%@ page contentType="text/html;charset=ISO-8859-1" errorPage="paginaerro.jsp" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html> <head> <title>Basicao JSP</title> </head> <body> <%@ include file=“saudacoes.html”%> <h1>Um exemplo basico</h1> <c:set var="indices" value="1, 2, 3, 4, 5" scope="page"/> <c:forEach items="${indices}" var="indice" varStatus="status"> <c:out value="<h${status.count}> Heading ${status.count} </h${status.count}>" /> </c:forEach> </body></html>

Page 20: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

20

JSP – Diretiva includeJSP – Diretiva include

• Arquivos incluídos também podem ser páginas JSP;

• Esta construção tem o inconveniente de, no caso de alteração de um arquivo incluído, os arquivos que o incluem precisam ter suas datas/horas modificadas para que a alteração seja refletida;

• Esse inconveniente é resolvido pela ação <jsp:include /> (vista adiante) que resolve os elos de inclusão dinamicamente.

Page 21: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

21

JSP – Diretiva pageJSP – Diretiva page

• Permite configurar propriedades de uma JSP;

• Estas propriedades são fornecidas como atributos (XML) da tag page;

Page 22: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

22

JSP – Diretiva pageJSP – Diretiva pageAlguns AtributosAlguns Atributos

Atributo Valor Descrição Valor Default

autoFlush true/false Define o comportamento quando o buffer está cheio. Esvazia automaticamente ou gera uma exceção quando o buffer estoura

true

buffer none/n KB Configura o tamanho do buffer de saída

8 KB

contentType tipo MIME Configura o tipo MIME text/html;charset=ISO-

8859-1

errorPage URL relativo Configura a JSP de erro

import Classes e interfaces a importar

Permite importação de pacotes Java padrão

Page 23: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

23

JSP – Diretiva pageJSP – Diretiva page

Atributo Valor Descrição Valor Default

isErrorPage true/false Indica se a página receberá exceções de outras páginas

false

isThreadSafe true/false Determina se o servlet gerado implementa a interface SingleThreadModel

true

session true/false Indica se a página atual precisa de informações de sessão

true

Page 24: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

24

JSP – Exemplo de JSP – Exemplo de diretivasdiretivas

<%@ page contentType="text/html;charset=ISO-8859-1" errorPage="erro.jsp" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html> <head> <title>Basicao JSP</title> </head> <body> <%@ include file=“saudacoes.html”%> <h1>Um exemplo basico</h1> <c:set var="indices" value="1, 2, 3, 4, 5" scope="page"/> <c:forEach items="${indices}" var="indice" varStatus="status"> <c:out value="<h${status.count}> Heading ${status.count} </h${status.count}>" /> </c:forEach> </body></html>

Page 25: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

25

JSP – Diretiva pageJSP – Diretiva page

• A combinação das diretivas include e page permite, por exemplo, o compartilhamento de recursos (cabeçalhos, rodapés, etc) numa aplicação;

• Pacotes comuns podem ser importados numa única página JSP, e incluída por outras.

Page 26: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

26

JSP – Diretiva taglibJSP – Diretiva taglib

• Mecanismo de extensão de tags;• Ou seja, permite a utilização de tags além das

pré-definidas (declaração, expressão, scriptlet e diretiva);

• Assim, podemos utilizar tags definidas por terceiros ou suas próprias tags personalizadas;

• JSTL é uma biblioteca de tags que implementa tarefas comuns e bem conhecidas, como iterações e condicionais; Visa minimizar o uso de código Java mesclado com código Html;

Page 27: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

27

JSP – Exemplo de JSP – Exemplo de diretivasdiretivas

<%@ page contentType="text/html;charset=ISO-8859-1" errorPage="paginaerro.jsp" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html> <head> <title>Basicao JSP</title> </head> <body> <%@ include file=“saudacoes.html”%> <h1>Um exemplo basico</h1> <c:set var="indices" value="1, 2, 3, 4, 5" scope="page"/> <c:forEach items="${indices}" var="indice" varStatus="status"> <c:out value="<h${status.count}> Heading ${status.count} </h${status.count}>" /> </c:forEach> </body></html>

Page 28: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

28

Diretivas JSP – Diretivas JSP – Exercício 9Exercício 9

• Implemente o exemplo de uso de diretivas apresentado. Para tal, copie a biblioteca de JSTL (jstl.jar e standard.jar) para dentro de um dos diretórios abaixo:– <tomcat5>\commom\lib– <tomcat6>\lib– <app>\WEB-INF\lib

Page 29: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

29

JSP – EL (Expression JSP – EL (Expression Language)Language)

• Outro recurso para especificação de páginas JSP; • Possui um conjunto de objetos implícitos próprio;• Contém conjunto abrangente de operadores;• Oferece acesso a coleções e propriedades aninhadas;• Sintaxe básica: ${ expressão em EL }• Pode ser utilizada tanto dentro de atributos de tags da

JSTL, quanto diretamente dentro de páginas;• Exemplos:

<p>1 é menor que 2: ${1<2}</p><p>6 é maior que 7: ${6 gt 7}</p><p>${cursos[‘petrobras’]}</p><p>${cursos.petrobras}</p><p>${applicationScope.statusBasicao}</p> // Idem para

sessionScope, requestScope, pageScope, param e paramValues

Page 30: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

30

JSP - ELJSP - EL

• Especificação nova no JSP 2.0;• Ou seja, não compatíveis com versões de

contêineres que não suportam esta versão;• Mecanismo de extensão através de métodos

estáticos (visto à seguir);• Através do web.xml podemos desativá-la:

<jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group>

Page 31: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

31

JSP – Ações PadrãoJSP – Ações Padrão

• Tags especiais disponíveis para uso em páginas JSP;

Page 32: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

32

JSP – Ações PadrãoJSP – Ações Padrão

<jsp:forward page=”URL” /> Permite o encaminhamento de uma solicitação para outro recurso dentro da mesma aplicação Web (diferente de redirecionamento). A página que encaminha não pode gerar nenhuma saída para o browser.

<jsp:include page=”URL” flush=”true/false” />

Permite a inclusão de recursos que são tratados dinamicamente (oposto da diretiva include). O atributo page indica a página a ser incluída, enquanto que o atributo flush indica se algum conteúdo no buffer antes da inclusão deve ser enviado ou não.

<jsp:useBean class=”CLASSE” id=”IDENT” scope=”ESCOPO” />

Permite o uso de JavaBeans dentro de uma JSP (classe Java comum, com construtor default e métodos get e set para atributos)

<jsp:getProperty name=”IDENT” property=”NOME_PROP”/>

É utilizado para acessar propriedades dentro de um Bean.

Page 33: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

33

JSP – Ações PadrãoJSP – Ações Padrão

<jsp:setProperty name=”IDENT” property=”NOME_PROP” value=”VALOR” />

É utilizado para configurar propriedades de um Bean.

<jsp:plugin type=”applet” code=”.CLASS” width=”VALOR” height=”VALOR” />

Permite a execução de um plugin, com possibilidade de instalação caso o navegador não o possua.

<jsp:params /> Conjunto de parâmetros a ser passado para um plugin.

<jsp:param name=”NOME” value=”VALOR” />

Formato de um parâmetro. Pode ser passado para um forward, um include ou dentro da tag params.

<jsp:fallback /> Mensagem a ser exibida quando um navegador não entende o código HTML gerado para o plugin.

Page 34: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

34

JSP – JavaBeansJSP – JavaBeans

<% CarroCompras carro = (CarroCompras)session.getAttribute("carrinho"); // Se o usuário não possui carro de compras if (carro == null) { carro = new CarroCompras(); session.setAttribute("carrinho", carro); }%>

<jsp:useBean id="carro" class=“pkg.CarroCompras" scope="session"/>

Page 35: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

35

JSP – JavaBeansJSP – JavaBeans

• Abordagem de desenvolvimento de componentes para JSP;

• Encapsulam a lógica do negócio;• Exemplos de uso:

– Acesso a dados de várias origens;– Validação de dados inseridos em formulários;

• Possui as vantagens do desenvolvimento baseado em componentes;

• Simplifica as páginas JSP através, por exemplo, da substituição de scriptlets de criação de objetos por tags de manipulação de beans (jsp:useBean, jsp:setProperty e jsp:getProperty);

Page 36: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

36

JSP – JavaBeansJSP – JavaBeans

• Aumento sensível de produção na utilização de formulários.

• Um bean é uma classe Java comum que respeita algumas convenções (em JSP):– Um construtor default (sem argumentos) deve

estar disponível;– Suas propriedades devem ser acessadas

através de métodos get e set;– Entretanto, é possível chamar os métodos de

um bean diretamente, dentro dos scriptlets;

Page 37: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

37

JSP – JavaBeansJSP – JavaBeans

• Observe que podemos ter uma propriedade sem termos um atributo de classe para ela; Basta oferecermos métodos get e/ou set;

• Formato dos métodos:– Para uma propriedade chamada prop,

poderemos ter os métodos <tipo_prop> getProp(); e void setProp(<tipo_prop>);

Page 38: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

38

Exercício 10Exercício 10

• Defina uma classe como um JavaBean (construtor default e métodos get e set públicos para as propriedades) para armazenar objetos com propriedades nome e url.

• Crie um arquivo .html que conterá o formulário com campos para o cadastro de favoritos.

• Crie um arquivo .jsp que tratará estas requisições. Este deve utilizar as tags de manipulação de beans.

• Uma lista de favoritos deve ser criada (atributo de sessão, por exemplo) e, para cada nova requisição, um novo item é inserido na lista.

Page 39: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

39

JSTL JSTL (JavaServer Pages (JavaServer Pages Standard Tag Library)Standard Tag Library)

• Uma biblioteca de tags visa minimizar o uso de código Java mesclado com código Html;

• JSTL prove tags para 5 grupos funcionais:– Tags Básicas (iteração, desvio de fluxo, saída, ..)– Tags para manipulação de documentos XML– Tags para internacionalização– Tags de acesso a banco de dados– Tags de funções (principalmente para manipulação

de strings)

Page 40: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

40

JSTL – Classes de TagsJSTL – Classes de Tags

Tipo URI Prefixo Exemplo

Core http://java.sun.com/jsp/jstl/core c <c:nomedatag />

XML http://java.sun.com/jsp/jstl/xml x <x:nomedatag />

Internacionalização http://java.sun.com/jsp/jstl/fmt fmt <fmt:nomedatag />

Banco de Dados http://java.sun.com/jsp/jstl/sql sql <sql:nomedatag />

Funções http://java.sun.com/jsp/jstl/functions

fn <fn:nomedatag />

Page 41: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

41

JSTLJSTL – Exemplo – Exemplo <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html> <head>Exemplo de Uso de tags JSP</head> <body> <h1>Lista de Codinomes</h1> <table border="1"> <c:set var="nomes" value="Bazílio, Instrutor, Carlos, Fulano"

scope="page"/> <tr><th>Codinome</th><th>Preferência</th></tr> <c:forEach var="codinome" items="${nomes}"

varStatus="status"> <tr><td><c:out value="${codinome}"/></td>

<td><c:out value="${status.count}"/></td></tr> </c:forEach> </table> </body></html>

Page 42: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

42

JSTL - CoreJSTL - Core

• Ações Básicas Gerais– <c:out value=“expressão” />

• Semelhante a tag de expressão JSP;• O conteúdo pode ser estático ou dinâmico (composto de EL);

– <c:set var=“nome_da_variável” value=“expressão” [scope=“page | request | session | application”] />

• Define uma variável com o valor da expressão fornecida em algum escopo;

• O escopo default é o page;– <c:catch [var=“nome_da_exceção”] />

• Utilizada para capturar exceções geradas pelo código JSP englobado;

• Estas exceções não são tratadas pelo mecanismo de página de erros de JSP.

• var armazenará o conteúdo da exceção gerada.

Page 43: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

43

JSTL - CoreJSTL - Core

• Ações Básicas Condicionais– <c:if test=“condição_de_teste” [var=“nome_da_variável”]

[scope=“page | request | session | application”] />• Corresponde ao if das linguagens de programação;• Esta ação pode ter o valor do seu teste armazenado na variável

var, do escopo fornecido;

– <c:choose />• Corresponde ao switch, para agrupamento de sentenças case;

– <c:when test=“condição_de_teste” />• Corresponde à uma sentença case;

– <c:otherwise />• Ação padrão a ser executada quando nenhuma ação when for

tomada.

Page 44: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

44

JSTL - CoreJSTL - Core

• Ações Básicas de Iteração– <c:forEach items=“collection” [var=“nome_da_variável”]

[varStatus=“nome_da_variável_status”] [begin=“início”] [end=“fim”] [step=“passo”] />

• Corresponde ao for das linguagens de programação;• Itera sobre coleções em geral;• varStatus contém informações sobre o índice numa iteração;

– <c:forTokens items=“string_tokens” delims=“delimitadores” [var=“nome_da_variável”] [varStatus=“nome_da_variável_status”] [begin=“início”] [end=“fim”] [step=“passo”] />

• Análoga a classe StringTokenizer;• A string fornecida é subdividida em tokens de acordo com os

delimitadores fornecidos.

Page 45: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

45

JSTL - CoreJSTL - Core

• Ações Básicas de Iteração– <c:import url=“recurso” [context=“contexto”] [var=“variável”]

[scope=“escopo”] [charEncoding=“codificação”] />• Análogo à ação padrão <jsp:include />;• Entretanto, permite a utilização de urls absolutas; ou seja, conteúdo

fora da própria aplicação;– <c:param name=“nome_parâmetro” value=“valor_parâmetro” />

• Utilizado para criação de parâmetros de solicitação para URLs pelas ações c:import, c:url e c:redirect;

– <c:redirect url=“recurso” [context=“contexto”]/>• Necessário quando se deseja abortar o processamento da JSP

corrente; Frequentemente utilizado em situações de erro;– <c:url />

• Útil na regravação de URL com ID de sessão do cliente;• Necessário quando cookies estão desabilitados;

Page 46: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

46

JSTL – Classes de TagsJSTL – Classes de Tags

Tipo URI Prefixo Exemplo

Core http://java.sun.com/jsp/jstl/core c <c:nomedatag />

XML http://java.sun.com/jsp/jstl/xml x <x:nomedatag />

Internacionalização http://java.sun.com/jsp/jstl/fmt fmt <fmt:nomedatag />

Banco de Dados http://java.sun.com/jsp/jstl/sql sql <sql:nomedatag />

Funções http://java.sun.com/jsp/jstl/functions

fn <fn:nomedatag />

Page 47: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

47

JSTL - XMLJSTL - XML

• Ações Básicas– Expressões de manipulação que utilizam a linguagem XPath;

• Exemplos:• $variable : procura por um atributo chamado variable no contexto

de página. Equivale a pageContext.findAttribute(“variable”)• $applicationScope$variable : procura por um atributo chamado

variable no contexto de aplicação (idem para sessionScope, pageScope, requestScope e param);

– <x:parse xml=“documento_XML” var=“nome_variável” [scope=“escopo”] />

• Percorre um documento XML;• Não faz validação frente a esquemas ou DTDs;• O atributo xml deverá conter uma variável, cujo conteúdo foi

importado através de uma url de um xml (<c:import/>)

Page 48: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

48

JSTL - XMLJSTL - XML

• Ações Básicas– <x:out select=“expressão_xpath” [escapeXML=“{true | false}”] />

• Após a chamada da ação parse, está ação permite a extração de partes do documento XML à partir de expressões XPath;

– <x:set var=“nome_variável” select=“expressão_xpath” [scope=“escopo”] />

• Permite armazenar o resultado de uma consulta XPath para futura utilização;

• A variável utilizada pode ser definida em qualquer dos escopos vistos anteriormente;

• Ações de Fluxo de Controle– <x:if />, <x:choose /> <x:when /> <x:otherwise /> <x:forEach />– Similares às tags da biblioteca básica;– Atributo chamado select é utilizado sempre que referenciamos o

documento XML.

Page 49: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

49

JSTL – Exercício 11JSTL – Exercício 11

• Escolha algum canal de informações XML (feed) de sua preferência e gera uma página similar à seguinte página:

Page 50: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

50

JSTL – Exercício 11JSTL – Exercício 11

• Para tal geração, é necessário os seguintes passos:– Copiar a biblioteca Xalan (XML) para ser acessível

pela aplicação– Processar o XML da seguinte maneria:

• Escolha o canal RSS de sua preferência• Importe este link para a sua aplicação: <c:import />• Processe-o como um documento XML: <x:parse />• Percorra o documento para gerar a saída: <x:forEach />

Page 51: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

51

JSTLJSTL

• Internacionalização (I18N)– Oferece funções de internacionalização (localidade) e

formatação de datas e números;• Banco de Dados

– Tags para consultas a banco de dados;– Naturalmente, só devem ser utilizadas em protótipos

ou aplicações simples;– Para aplicações corporativas, esses dados devem

estar encapsulados em componentes JavaBeans;• Funções

– Basicamente oferece funções para a manipulação de strings;

Page 52: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

52

JSP – Mecanismo de JSP – Mecanismo de ExtensãoExtensão

• Incorporação de novas ações e funções que podem ser utilizadas em páginas JSP;

• Permite ampliar a separação entre os papéis do programador e do webdesigner:– O programador encapsula código Java em tags e funções EL;– O webdesigner só precisa compreender a semântica de tags e

funções e terá um tempo maior para implementar a apresentação;

• Tipos de extensão:– Novas funções para expressões EL;– Ações personalizadas;

• Ambos necessitam de 3 tarefas:– Implementação em Java da função/ação;– Criação do arquivo .tld (Tag Library Descriptor);– Atualização do descritor de implantação.

Page 53: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

53

JSP – Extensão de JSP – Extensão de Funções ELFunções EL

• A implementação em Java é fornecida através de um método Java public static;

package helloPackage;

public class ELFunctions {public static String sayHello () {

return new String("Hello from EL !!");}

}

Page 54: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

54

JSP – Extensão de JSP – Extensão de Funções EL – TLDFunções EL – TLD

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

version="2.0">

<description>Hello library</description>

<display-name>Hello Tags</display-name>

<tlib-version>1.1</tlib-version>

<short-name>h</short-name>

<uri>hello_url</uri>

<function>

<name>SayHello</name>

<function-class>helloPackage.ELFunctions</function-class>

<function-signature>java.lang.String sayHello()</function-signature>

</function> …

Page 55: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

55

JSP – Extensão de JSP – Extensão de Funções EL – “web.xml”Funções EL – “web.xml”

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4">

...

<taglib>

<taglib-uri>hello_url</taglib-uri>

<taglib-location>/WEB-INF/hello.tld</taglib-location>

</taglib>

</web-app>

Page 56: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

56

JSP – Extensão de JSP – Extensão de Funções ELFunções EL

<%@ taglib uri="hello_url" prefix="h" %>

<html>

<head>Exemplo de Uso de tags JSP</head>

<body>

<p>${h:SayHello()}</p>

</body>

</html>

Page 57: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

57

Exercício 12Exercício 12

• Implemente a extensão apresentada.

Page 58: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

58

JSP – Extensão de TagsJSP – Extensão de Tags

<%@ taglib uri="hello_url" prefix="h" %>

<html>

<head>Exemplo de Uso de tags JSP</head>

<body>

<p><h:tagqq quant=“5”></h:tagqq></p>

</body>

</html>

Alo mundo!!!Alo mundo!!!Alo mundo!!!Alo mundo!!!Alo mundo!!!

HTML

Page 59: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

59

JSP – Extensão de TagsJSP – Extensão de Tags

• Passos para geração do servlet:– Após o uso de uma tag <myprefix:mytag />,

busca-se, à partir de myprefix, a uri correspondente na página onde a mytag é usada (diretiva taglib);

– O descritor de implantação (“web.xml”) contém a associação entre a uri e o descritor da biblioteca (arquivo .tld);

– O arquivo .tld contém, para cada tag, a classe que implementa essa tag; Ou seja, conterá a classe que implementa mytag.

Page 60: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

60

JSP – Extensão de Tags JSP – Extensão de Tags – “web.xml”– “web.xml”

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4">

...

<taglib>

<taglib-uri>hello_url</taglib-uri>

<taglib-location>/WEB-INF/hello.tld</taglib-location>

</taglib>

</web-app>

Page 61: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

61

JSP – Extensão de TagsJSP – Extensão de Tags

• Passos para geração do servlet:– Após o uso de uma tag <myprefix:mytag />,

busca-se, à partir de myprefix, a uri correspondente na página onde a mytag é usada (diretiva taglib);

– O descritor de implantação (“web.xml”) contém a associação entre a uri e o descritor da biblioteca (arquivo .tld);

– O arquivo .tld contém, para cada tag, a classe que implementa essa tag; Ou seja, conterá a classe que implementa mytag.

Page 62: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

62

JSP – Extensão de Tags JSP – Extensão de Tags – TLD– TLD

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">

… <short-name>h</short-name>

<uri>hello_url</uri>

<tag>

<name>tagqq</name>

<tag-class>helloPackage.TagQQ</tag-class>

<body-content>empty</body-content>

<attribute>

<name>quant</name>

<rtexprvalue>true</rtexprvalue>

</attribute></tag></taglib>

JSPscriptless

tagdependent

Page 63: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

63

JSP – Extensão de TagsJSP – Extensão de Tags

• Para criação de tags personalizadas é preciso definir uma classe que implemente uma das interfaces, ou estenda uma das classes abaixo:

Page 64: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

64

JSP – Extensão de Tags JSP – Extensão de Tags – Implementação– Implementação

package helloPackage;import java.io.IOException;import javax.servlet.jsp.tagext.TagSupport;import javax.servlet.jsp.JspException;

public class TagQQ extends TagSupport {public int doStartTag () throws JspException {

try {pageContext.getOut().print(“Alo mundo!!!");

}catch (IOException e) {

System.out.println("Erro em TagQQ");throw new JspException(e);

}return SKIP_BODY;

}}

Page 65: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

65

JSP – Extensão de Tags JSP – Extensão de Tags – Constantes– Constantes

Constante Significado

EVAL_BODY_INCLUDE

Retornado pelo método doStartTag(), indica que o conteúdo do corpo da tag deve ser avaliado e colocado na saída.

EVAL_PAGE Retornado pelo método doEndTag(), indica que o restante da JSP deve ser processada.

SKIP_BODY Os métodos doStartTag() e doAfterBody() podem retornar esse valor para indicar que o corpo deve ser pulado.

SKIP_PAGE Valor que pode ser retornado pelo método doEndTag() para indicar que o restante da página deve ser pulado.

Page 66: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

66

Exercício 13Exercício 13

• Implemente uma biblioteca de tags que para atender aos seguintes usos numa página JSP:

<mybib:add nome=“nome_da_url” url=“url”/>• Adiciona o nome e a url a um objeto, com escopo de

aplicação, que guarda urls (alguma coleção, provavelmente criada por você para armazenar os pares).

<mybib:link pos=“posicao”/>• Retorna um link na forma <a href=“url”>nome</a>,

onde url e nome estão armazenados no objeto citado acima, na posição posicao.

• Para este exercício, inclua no projeto o .jar que contém a definição das extensões de tag: (<tomcat>\common\lib\jsp-api.jar)

Page 67: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

67

Exercício 13Exercício 13

• A aplicação deve implementar os tratadores de tag e criar telas para cadastro de favoritos e para a listagem destes favoritos.

Page 68: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

68

JSP – Extensão de Tags – JSP – Extensão de Tags – Simple TagsSimple Tags - JSP 2.0 - JSP 2.0

• À partir da JSP 2.0, o desenvolvimento de tags personalizadas se tornou bem mais simples;

• Basicamente, precisamos fazer 3 tarefas:– Criar um diretório chamado tags, abaixo do diretório

WEB-INF (“WEB-INF/tags”), que conterá arquivos com extensão .tag para a definição das tags;

– Criar arquivos .tag para cada tag a ser utilizada; estes arquivos poderão utilizar tags como JSTL e JavaBeans, mas não poderão conter scriptlets;

– Uso das tags definidas, numa JSP, com a definição do parâmetro tagdir na diretiva taglib.

Page 69: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

69

JSP – Extensão de Tags JSP – Extensão de Tags – JSP 2.0 – hello.tag– JSP 2.0 – hello.tag

<%@ tag pageEncoding="ISO-8859-1" body-content="empty" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ attribute name="vezes" required="true" %>

<c:forEach begin="1" end="${vezes}"> <c:out value="Alô você !!!"/></c:forEach>

Page 70: Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

70

JSP – Extensão de Tags JSP – Extensão de Tags – JSP 2.0 – basico.jsp– JSP 2.0 – basico.jsp

<%@ taglib tagdir="/WEB-INF/tags" prefix="tag2" %><html> <head> <title>Basicao JSP</title> </head> <body> <tag2:hello vezes="3"/> </body></html>