Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira [email protected] Jobson Ronan...

80
Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira [email protected] Jobson Ronan Jeronimo da Silva [email protected] Material cedido por: Daniel Arraes Pereira [email protected]

Transcript of Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira [email protected] Jobson Ronan...

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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>