java avançado javaserver pages guilherme kely de melo oliveira [email protected] jobson ronan...
TRANSCRIPT
![Page 1: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/1.jpg)
Java Avançado
JavaServer Pages
Guilherme Kely de Melo [email protected]
Jobson Ronan Jeronimo da [email protected]
Material cedido por: Daniel Arraes [email protected]
![Page 2: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/2.jpg)
2
Java Server Pages - JSP
Separação do conteúdo estático e dinâmico. Independência de plataforma. Reuso de componentes. Funcionalmente equivalente aos Servlets. Embarca instruções de processamento no
resultado a ser apresentado. Facilidade de uso Maturidade da linguagem Java Facilidade de desenvolvimento
![Page 3: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/3.jpg)
3
Funcionamento do JSP (JSPEngine)
![Page 4: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/4.jpg)
4
Funcionamento do JSP (JSPEngine)
O navegador envia uma requisição para a página JSP. Se esta requisição é a primeira a este JSP então:
O container analisa o conteúdo do arquivo JSP. O contêiner gera o código fonte de um servlet baseado
no conteúdo do JSP. O compilador Java gera uma classe (.class) a partir do
código fonte do Servlet gerado no passo anterior. O Servlet correspondente ao JSP é instanciado e
iniciado (se necessário) O Servlet correspondente ao JSP atende a requisição
(método service(...)) .
![Page 5: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/5.jpg)
5
JSPEngine
Responsável por: Atender requisições de páginas JSP. Transformar uma página JSP requisitada em
um servlet. Executar o servlet para atender às requisições
JSP correspondentes.
![Page 6: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/6.jpg)
6
Componentes e Sintaxe JSP
Diretivas Declarações Scriptlets Comentários Expressões
![Page 7: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/7.jpg)
7
Diretivas
Instruções fornecidas ao JSPEngine para configuração do componente.
Se mantém válida para qualquer requisição enviada.
Empregadas nas fases de tradução e compilação Diretivas possíveis:
page include taglib
Sintaxe: <%@ diretiva nome_atrib_diretiva=“valor” %>
![Page 8: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/8.jpg)
8
Diretiva page
Controla a estrutura do Servlet correspondente ao JSP.
Pode ser declarada várias vezes, mas cada opção só pode aparecer apenas uma vez na página Exceto a opção import (livre).
![Page 9: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/9.jpg)
9
Diretiva page - Opções
import<%@ page import="java.util.Vector" %><%@ page import="java.util.*" %> <%@ page import="java.util.Vector,
ava.util.ArrayList" %> Similar ao import de Java.
session<%@ page session=“true” %> - Default<%@ page session=“false” %>
Controla quando um JSP participa ou não de Sessões. O valor false não é similar a getSession(false)
![Page 10: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/10.jpg)
10
Diretiva page - Opções
buffer<%@ page buffer=“sizekb” %><%@ page buffer=“none” %>
Especifica o tamanho do buffer usado pelo PrintWriter do JSP.
autoflush<%@ page autoflush=“true” %> - Default<%@ page autoflush=“false” %>
Controla se o buffer de saída será “esvaziado” automaticamente caso cheio.
![Page 11: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/11.jpg)
11
Diretiva page - Opções
contentType<%@ page contentType=“text/html”%>
Seta o content-type response header indicando o mime da resposta.
language<%@ page language=“Java”%> - única
suportada Indica a linguagem que está sendo usada.
![Page 12: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/12.jpg)
12
Diretiva page - Opções
errorPage<%@ page errorPage=“URL Relativa”%>
Indica que página deve ser processada caso uma exceção seja lançada. Tal página deve ter a opção isErrorPage setada para true.
isErrorPage<%@ page isErrorPage=“true”%> - <%@ page isErrorPage=“false”%> - Default
Habilita uma página a tratar exceções através do objeto implícito exception (visto mais adiante)
![Page 13: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/13.jpg)
13
Diretiva page - Opções
info<%@ page info=“mensagem”%>
Similar a getServletInfo().
extend<%@ page extends=“package.class”%>
Ajusta que classe o servlet gerado deve extender.
![Page 14: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/14.jpg)
14
Diretiva page - Opções
isThreadSafe<%@ page isThreadSafe=“true”%> - Default<%@ page isThreadSafe=“false”%>
Ajusta quando o servlet gerado implementará SingleThreadModel
![Page 15: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/15.jpg)
15
Diretiva include
Permite a inclusão de textos em tempo de tradução.
É possível usar a diretiva para incluir um cabeçalho padrão para todas as páginas:
<%@ include file="copyright.html" %>
![Page 16: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/16.jpg)
16
Diretiva taglib
Será abordada mais a frente.
![Page 17: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/17.jpg)
17
Scripting
Código Java embutido em uma página JSP.
Existem scriptings para: Expressões Declarações Scriptlets Comentários
![Page 18: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/18.jpg)
18
Expressões
Expressões válidas da sintaxe Java, avaliadas pelo Servlet e enviadas ao seu fluxo de saída.
Possui o mesmo efeito do método response.getWriter().println(expressão.toString()) .
Sintaxe:
<%= expressão %> Exemplo
<%= new java.util.Date()%>
![Page 19: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/19.jpg)
19
Declarações
Define um bloco com declarações de atributos e/ou métodos que podem ser acessados em toda a página JSP.
As regras para uma declaração válida são as mesmas de Java.
Sintaxe:
<%! declaração %>
![Page 20: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/20.jpg)
20
Declarações Exemplo:<%! private int id = 0; public String parseData(Date dt)
{ … }
%>
![Page 21: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/21.jpg)
21
Scriptlets
Permite a inserção de fragmentos de código Java, os quais serão executados sequencialmente.
Mapeado diretamente no método service(...).
Sintaxe:
<% scriptlet %>
![Page 22: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/22.jpg)
22
Scriptlets - Exemplo
<% if(Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM ) { %>
Está de manhã!<% } else { %> Que horas são?
<% } %>
![Page 23: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/23.jpg)
23
Comentários
<%-- cometário jsp--%> Não é enviado ao browser cliente
![Page 24: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/24.jpg)
24
Objetos Implícitos
Objetos que são acessíveis dentro de um bloco scriptlet ou de expressão.
Sem a necessidade de se declarar ou importar.
Objetos:
•out•request•response•session•exception
•application•pageContext•config•page (this)
![Page 25: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/25.jpg)
25
O Objeto out
Classe: javax.servlet.jsp.JspWriter Descrição: Usado para enviar
respostas para o cliente. Exemplo:
<% out.println(“Exemplo”);%>
![Page 26: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/26.jpg)
26
O Objeto request
Classe: javax.servlet.http.HttpServletRequest
Descrição: Referencia a requisição corrente, que causou a chamada ao serviço.
Exemplo:<% String numero =
request.getParameter(“numero”); out.println(“vc digitou o numero ” + numero);%>
![Page 27: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/27.jpg)
27
O Objeto response
Classe: javax.servlet.http.HttpServletResponse Descrição: Usado para mandar uma resposta ao
cliente. Permite enviar mensagens de erro, alterar códigos de status HTTP e headers em uma página JSP
Exemplo:<% response.setHeader("Pragma", "no-cache"); if (request.getProtocol().equals("HTTP/1.1")) { response.setHeader("Cache-Control", "no-
cache"); }%>
![Page 28: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/28.jpg)
28
O Objeto session
Classe: javax.servlet.http.HttpSession Descrição: Referencia a sessão do usuário.
Ausente quando <%@ page session="false" %>
Exemplo:<% Usuario user = (Usuario) session.getAttribute(“user”); if (user == null){ response.sendRedirect(“login.jsp”); }%>
![Page 29: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/29.jpg)
29
O Objeto exception
Classe: java.lang.Throwable Descrição: Usado para situações de erro.
Possui escopo de página e só está acessível se dito anteriormente<%@ page isErrorPage="true" %>
Exemplo:<I><%= exception.getMessage() %></I>.<PRE><% exception.printStackTrace(new
java.io.PrintWriter(out));%></PRE>
![Page 30: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/30.jpg)
30
O Objeto application
Classe: javax.servlet.servlet.ServletContext
Descrição: Referencia o contexto da aplicação Web.
Exemplo:<%
out.println(application.getRealPath(“/tmp”));%>
![Page 31: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/31.jpg)
31
Outros Objetos implícitos
page Equivalente ao “this”.
config Permite acesso a informações de configuração
do JSP. É do tipo javax.servlet.ServletConfig
pageContext Se refere ao ambiente da classe. Guarda referências à objetos implícitos. Provê métodos de leitura e escrita para
atributos em diferentes escopos.
![Page 32: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/32.jpg)
32
Prática 1
Escreva um JSP temperatura.jsp que imprima uma tabela HTML de conversão Celsius-Fahrenheit entre -40 e 100 graus Celsius com incrementos de 10 em 10 A fórmula é F = 9/5 C + 32
![Page 33: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/33.jpg)
33
Prática 1 (Cont.)
Altere o exercício anterior para que a página também apresente um campo de texto para entrada de temperatura em um formulário que envie os dados com POST.
Faça com que a própria página JSP receba a mensagem a) Identifique, no início, o método com
request.getMethod() (retorna POST ou GET, em maiúsculas).
b) Se o método for POST, mostre, em vermelho, antes da exibição do formulário, o texto: "x graus F = y graus C" onde x é o valor digitado pelo usuário e y é a resposta.
![Page 34: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/34.jpg)
34
Prática (extra)
Escreva uma página JSP novaMensagem.jsp que mostre um formulário na tela com dois campos: email e mensagem.
Escreva uma outra página gravarMensagem.jsp que receba dois parâmetros: email e mensagem e grave esses dois parâmetros na sessão do usuário.
Faça com que a primeira página aponte para a segunda.
Crie uma terceira página listarMensagens.jsp que mostre todas as mensagens gravadas na sessão até o momento.
![Page 35: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/35.jpg)
Ações
![Page 36: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/36.jpg)
36
Ações
Construídas em XML, possuem como objetivo controlar o comportamento do engenho JSP.
![Page 37: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/37.jpg)
37
Jsp:include
<jsp:include page="relative URL" flush="true" />
Inclui o recurso em tempo de requisição
![Page 38: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/38.jpg)
38
Jsp:forward
<jsp:forward page="relativeURL" />
Permite passar a requisição para outro recurso.
![Page 39: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/39.jpg)
39
Jsp:useBean
<jsp:useBean id=“nome“ class="package.class" type=“tipo da variável”/>
Combinada com as ações getProperty e setProperty, forma um meio limpo de trabalhar com classes de entidade em JSP´s.
![Page 40: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/40.jpg)
40
Jsp:useBean
<jsp:useBean id="primeTable" class="hall.NumberedPrimes" />
<jsp:setProperty name="primeTable" property="numPrimes" value=“123”/>
Considerações sobre o setPropety:1. Colocando ‘*’ no atributo property, seta-
se o bean mapeando os nomes dos parâmetros da requisição aos atributos do bean.
2. A conversão das strings passadas no atributo value para os tipos primitivos correspondentes é automática.
![Page 41: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/41.jpg)
41
Pratica 2
Use um JavaBean Mensagem, com propriedades email e mensagem para implementar o exercício extra anterior
Substitua todas as chamadas de new Mensagem() por <jsp:useBean> no escopo da sessão
Use <jsp:getProperty> para exibir os dados
Altere gravarMensagens para que use <jsp:forward> para despachar a requisição para uma página erro.jsp, caso o usuário deixe os campos do formulário em branco, e para listarMensagens.jsp se tudo funcionar corretamente
![Page 42: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/42.jpg)
Bibliotecas de Tags
![Page 43: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/43.jpg)
43
Bibliotecas de Tags
Podem ser personalizadas. Acesso a todos os objetos implícitos. Reuso de componentes no JSP. Podem se comunicar com outras tags. Diminuição de código Java nas páginas. Podem ser aninhadas em outras tags.
![Page 44: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/44.jpg)
44
Bibliotecas de Tags
Utilidades. Ex.: Pecorrer uma coleção montando uma
tabela. Manipular arquivos. Paginação de buscas.
![Page 45: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/45.jpg)
45
Componentes
Dois componentes em uma biblioteca de tags:
O descritor da biblioteca de tags (TLD).
Os manipuladores de tag.
![Page 46: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/46.jpg)
46
O Arquivo TLD
Um arquivo descritor de bibliotecas (TLD) é um documento XML que descreve a biblioteca.
Um TLD contém informações sobre a biblioteca como um todo, sobre cada tag contida na biblioteca e é usado pelo container JSP para validar essas tags.
![Page 47: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/47.jpg)
47
Manipuladores de tags
São objetos Java que executam a ação associada a uma tag personalizada.
Quando uma requisição é recebida pelo container JSP para uma página contendo tags personalizadas, a instância do manipulador da tag correspondente é obtida.
É necessário implementar uma interface apropriada dependendo do tipo de comportamento da tag
![Page 48: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/48.jpg)
48
Utilizando Tags
<%@ taglib uri=“/WEB-INF/alo.tld" prefix=“exemplo" %>
<html><head><title>JSP Page</title></head><body>
<exemplo:helloworld msg=“hello world!!”></ exemplo:helloworld>
</body></html>
![Page 49: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/49.jpg)
49
O Arquivo TLD: Exemplo
<xml version=“1.0” encoding=“ISSO-8859-1” ?><!DOCTYPE taglib PUBLIC “-//Sun Microsyste...” ... ><taglib>
<tlibversion>1.1</tlibversion><jspversion>2.0</jspversion><shortname>exemplo</shortname><tag>
<name>helloworld</name><tagclass>org.Exemplo</tagclass><bodycontent>JSP</bodycontent><attribute>
<name>msg</name><required>true</required><rtexprvalue>true</ rtexprvalue>
</attribute></tag>
</taglib>
![Page 50: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/50.jpg)
50
JSTL
JSP Standard Tag Library Provê um conjunto padrão de tags. Funcionalidades encapsuladas JSTL 1.0
CORE Acesso a base de dados Processamento XML Formatação e I18N
![Page 51: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/51.jpg)
51
JSTL: Core
Expressões Processamento condicional Iterações Acesso a recursos baseados em URL
cujos conteúdos podem ser incluídos ou processados pelo JSP. (não serão abordadas)
![Page 52: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/52.jpg)
52
Expressions Tags
out – Avalia uma expressão e escreve seu resultado no JspWriter corrente.
<c:out value="${sessionScope.cart.numberOfItems}"/> Expression Language JSTL EL implicit objects
![Page 53: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/53.jpg)
53
Expressions Tags
set – Seta o valor de um atributo em qualquer escopo do JSP (page, request, session, aplication).
<c:set var="foo" scope="session" value="..."/>
![Page 54: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/54.jpg)
54
Expressions Tags
remove – Remove um objeto em qualquer escopo do JSP.
<c:remove var=“cart" scope="session"/>
![Page 55: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/55.jpg)
55
Tags condicionais
if – Permite a execução condicional do corpo de acordo com a avaliação da expressão.
<c:if test=“${sessionScope.user != null}”>
... </c:if>
![Page 56: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/56.jpg)
56
Tags condicionais
choose – Permite a execução condicional através das tags when embarcadas (similar ao case). Se nenhuma condição for avaliada como true o corpo da tag otherwise será avaliado.
![Page 57: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/57.jpg)
57
Tags condicionais
<c:choose> <c:when test="${sessionScope.customer.category ==
'trial'}> ... </c:when> <c:when test="${sessionScope.customer.category ==
'member'}" > ... </c:when> <c:otherwise> ... </c:otherwise>
</c:choose>
![Page 58: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/58.jpg)
58
Tags condicionais
forEach – Permite a iteração em uma coleção de objetos.
<c:forEach var="item" items = "${sessionScope.cart.items}">
<tr> <td align="right" bgcolor="#ffffff"> <c:out value="${item.quantity}"/> </td> </tr></c:forEach>
![Page 59: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/59.jpg)
59
Paginação na Web
Não é uma tarefa fácil. As soluções podem aumentar
bastante o tráfego na rede, bem como consumir muito recursos do servidor de BD e aumentar o consumo de memória
![Page 60: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/60.jpg)
60
Paginação na Web
Solução: Reusar componentes aprovados para
tais situações.• Pager taglib• Display Taglib
![Page 61: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/61.jpg)
61
Pager taglib
Oferece todo o necessário para paginação de dados.
Poucos recursos de customização. Software Livre. Vem com vários exemplos. jsptags.com/tags/navigation/pager
![Page 62: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/62.jpg)
62
Display taglib
Originalmente para Perl. Apresenta as listagens em um visual
profissional (tabelas HTML). Software Livre. Recursos para formatação, processamento
de dados de saída [ordenação, agrupamento e exportação (excel, XML)].
E, obviamente, paginação de dados. displaytag.sourceforge.net
![Page 63: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/63.jpg)
JSTL Expression Language
![Page 64: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/64.jpg)
64
JSTL Expression Language
Expression language em consocio com taglibs, torna possivel acessar e manipular dados da aplicação sem ter que usar scriptlets ou request-time expressions.
<x:aTag att="<%= aName.getFoo().getBar() %>">
<x:aTag att="${aName.foo.bar}">
![Page 65: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/65.jpg)
65
JSTL Expression Language
Disponibiliza atributos de escopo como maneira padrão de comunicação entre lógica de negócio e páginas JSP.
Ex: escopo de sessão.
<c:if test="${sessionScope.cart.numberOfItems > 0}">
... </c:if>
![Page 66: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/66.jpg)
66
JSTL Expression Language
Responsável em lidar com expressões e literais. Expressões são cercadas por ${ }.
Qualquer valor que não está cercado por ${ } é tratado como um literal.
Ex:
<c:if test="${bean1.a < 3}" /> - Expressão
<c:if test="true" /> - Literal
![Page 67: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/67.jpg)
67
Atributos
Acessados por nome, com escopo opcional. Propriedades dos atributos são acessadas usando ..
Unifica o tratamento de . e [ ]. exp-a.exp-b equivale a exp-a[exp-b]. Considere a avaliação de exp-a e exp-b em value-a e value-b respectivamete
Se value-a for um Map, retorne value-a.get(value-b). Se value-a for uma Lista ou array, cast value-b em
inteiro e retorne value-a.get(value-b) ou Array.get(value-a, value-b).
Se value-a fou um JavaBean object, cast value-b para String, se value-b for uma propriedade “readable” de value-a, retorne a chamada ao getter.
![Page 68: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/68.jpg)
68
Atributos
A EL avalia um identificador procurando seu valor como um atributo de acordo com o comportamento de PageContext.findAttribute(String).
Ex: ${produto} irá procurar pelo atributo nomeado produto nos contextos page, request, session, application e irá retornar seu valor. Caso não ache, null é retornado.
Identificadores que coincidem com os objetos implícitos da EL (vide próximo slide) irão retornar tais objetos ao invés de atributos.
![Page 69: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/69.jpg)
69
Objetos implícitos.
pageScope – Um Map dos atributos do escopo da página com seus valores.
requestScope - Um Map dos atributos do escopo da requisição com seus valores.
sessionScope - Um Map dos atributos do escopo da sessão com seus valores.
applicationScope - Um Map dos atributos do escopo da aplicação com seus valores.
param – Um Map que mapeia nomes de parâmetros para uma String com o valor daquele parâmetro. (request.getParameter (String))
![Page 70: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/70.jpg)
70
Objetos implícitos.
paramValues – Um Map que mapeia nomes de parâmetros para um array de String com todos os valores daquele parâmetro. (request.getParameterValues(String))
header – Um Map que mapeia nomes de header para uma String.(request.getHeader(String))
headerValues - Um Map que mapeia nomes de headers para um array de String com todos os valores daquele header. (request.getHeaders(String))
cookie - Um Map que mapeia nomes de cookies para um Cookie. (request.getCookie(String))
initParam - Um Map que mapeia nomes para um parâmetro de inicialização. (config.getInitParameter(String))
![Page 71: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/71.jpg)
71
Objetos implícitos
Exemplos: <c:if test=“${param.id == 5}”> ... </c:if> <c:if test=“${sessionScope.user !=
null}”> ... </c:if>
![Page 72: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/72.jpg)
72
Literais.
Boolean: true e false Long: como em Java. Float: como em Java. String: com aspas simples e dupla. Null: null
![Page 73: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/73.jpg)
73
Operadores.
Aritiméticos: +, -, *, / e div, % e mod Lógicos: and, &&, or, ||, not, ! Relacionais: ==, eq, !=, ne, <, lt, >, gt, <=,
ge, >=, le. empty: Um operador prefixal que é usado para saber se algo é nulo ou vazio. Ex:
<c:if test=“${!empty sessionScope.user}”>
![Page 74: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/74.jpg)
74
Prática 3
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
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
![Page 75: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/75.jpg)
Criando TagLibs
![Page 76: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/76.jpg)
76
Tag Files - Vantagens
Reuso – os tag files permitem uma melhor customização de conteúdo, assim como o uso de nested tags.
Compatibilidade com tag handlers
Páginas JSP sem Scriptlet
Desenvolvimento rápido – Recompilação dinâmica dos tag files é suportada por alguns containers como tomcat 5.X
![Page 77: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/77.jpg)
77
Tag Files
<%@tag description=“Descrição da Tag" pageEncoding=“Padrão de codifficação“
bodycontent="empty | scriptless | tagdependent"
dynamic-attributes=“handlerDosAtributos" %> - similar a diretiva page das páginas JSP.
<%@attribute name=“NomeDoAtributo" required="true|flase“ type=“TipoDoDado” %> - descreve um atributo da tag, e se é obrigatório ou não.
<jsp:doBody/> - representa o que é definido entre a abertura e fechamento da tag.
![Page 78: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/78.jpg)
78
Exemplo de um Tag File
<%@tag description="Display logo" pageEncoding="UTF-8"%><%@taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core"%>
<%@attribute name="size" required="true"%><c:choose><c:when test="${size == 'large'}"><img src='logos/LogoLarge.gif' align='Center'></c:when><c:otherwise><img src='logos/LogoSmall.gif' align='Center'></c:otherwise></c:choose><jsp:doBody/>
![Page 79: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/79.jpg)
79
Usando um Tag File
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<html>
<head>
<title>Usando um Tag File</title>
</head>
<body>
<tags:logo size="large"/>
</body>
</html>
![Page 80: Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br Material cedido por: Daniel](https://reader031.vdocuments.site/reader031/viewer/2022020716/552fc142497959413d8df64d/html5/thumbnails/80.jpg)
80
Prática 4
Escreva um custom tag simples <pcc:tabela> que receba um String como parâmetro (texto) e imprima o String dentro de uma tabela HTML:O tag <pcc:tabela texto="Texto Recebido"/> deve produzir<table border="1"><tr><td>Texto Recebido</td></tr></table>
Crie mais dois atributos que definam cor-de-fundo e cor-do-texto para a tabela e o texto.
Escreva uma segunda versão do tag acima que aceite o texto entre os tags <pcc:tabela>Texto Recebido</pcc:tabela>