A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Java Avançado JavaServer Pages Material cedido por:

Apresentações semelhantes


Apresentação em tema: "Java Avançado JavaServer Pages Material cedido por:"— Transcrição da apresentação:

1 Java Avançado JavaServer Pages Material cedido por:
Daniel Arraes Pereira Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira Jobson Ronan Jeronimo da Silva

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

3 Funcionamento do JSP (JSPEngine)

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(...)) .

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.

6 Componentes e Sintaxe JSP
Diretivas Declarações Scriptlets Comentários Expressões

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” %>

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).

9 Diretiva page - Opções import session
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)

10 Diretiva page - Opções buffer autoflush
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.

11 Diretiva page - Opções contentType language
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.

12 Diretiva page - Opções errorPage isErrorPage
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)

13 Diretiva page - Opções info extend <%@ page info=“mensagem”%>
Similar a getServletInfo(). extend page extends=“package.class”%> Ajusta que classe o servlet gerado deve extender.

14 Diretiva page - Opções isThreadSafe
page isThreadSafe=“true”%> - Default page isThreadSafe=“false”%> Ajusta quando o servlet gerado implementará SingleThreadModel

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" %>

16 Diretiva taglib Será abordada mais a frente.

17 Scripting Código Java embutido em uma página JSP.
Existem scriptings para: Expressões Declarações Scriptlets Comentários

18 Expressões <%= new java.util.Date()%>
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()%>

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 %>

20 Declarações Exemplo: <%! private int id = 0;
public String parseData(Date dt) { … } %>

21 Scriptlets <% scriptlet %>
Permite a inserção de fragmentos de código Java, os quais serão executados sequencialmente. Mapeado diretamente no método service(...). Sintaxe: <% scriptlet %>

22 Scriptlets - Exemplo <% if(Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM ) { %> Está de manhã! <% } else { %> Que horas são? <% } %>

23 Comentários Não é enviado ao browser cliente
<%-- cometário jsp--%> Não é enviado ao browser cliente

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)

25 O Objeto out Classe: javax.servlet.jsp.JspWriter
Descrição: Usado para enviar respostas para o cliente. Exemplo: <% out.println(“Exemplo”); %>

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); %>

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"); } %>

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”); } %>

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>

30 O Objeto application Classe: javax.servlet.servlet.ServletContext
Descrição: Referencia o contexto da aplicação Web. Exemplo: <% out.println(application.getRealPath(“/tmp”)); %>

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.

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

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.

34 Prática (extra) Escreva uma página JSP novaMensagem.jsp que mostre um formulário na tela com dois campos: e mensagem. Escreva uma outra página gravarMensagem.jsp que receba dois parâmetros: 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.

35 Ações

36 Ações Construídas em XML, possuem como objetivo controlar o comportamento do engenho JSP.

37 Jsp:include Inclui o recurso em tempo de requisição
<jsp:include page="relative URL" flush="true" /> Inclui o recurso em tempo de requisição

38 Jsp:forward Permite passar a requisição para outro recurso.
<jsp:forward page="relativeURL" /> Permite passar a requisição para outro recurso.

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.

40 Jsp:useBean Considerações sobre o setPropety:
<jsp:useBean id="primeTable" class="hall.NumberedPrimes" /> <jsp:setProperty name="primeTable" property="numPrimes" value=“123”/> Considerações sobre o setPropety: Colocando ‘*’ no atributo property, seta-se o bean mapeando os nomes dos parâmetros da requisição aos atributos do bean. A conversão das strings passadas no atributo value para os tipos primitivos correspondentes é automática.

41 Pratica 2 Use um JavaBean Mensagem, com propriedades 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

42 Bibliotecas de Tags

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.

44 Bibliotecas de Tags Utilidades. Ex.:
Pecorrer uma coleção montando uma tabela. Manipular arquivos. Paginação de buscas.

45 Componentes Dois componentes em uma biblioteca de tags:
O descritor da biblioteca de tags (TLD). Os manipuladores de tag.

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.

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

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>

49 O Arquivo TLD: Exemplo <xml version=“1.0” encoding=“ISSO ” ?> <!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>

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

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)

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

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="..."/>

54 Expressions Tags remove – Remove um objeto em qualquer escopo do JSP.
<c:remove var=“cart" scope="session"/>

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>

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.

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>

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>

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

60 Paginação na Web Solução:
Reusar componentes aprovados para tais situações. Pager taglib Display Taglib

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

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

63 JSTL Expression Language

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}">

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>

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

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.

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.

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))

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))

71 Objetos implícitos Exemplos:
<c:if test=“${param.id == 5}”> ... </c:if> <c:if test=“${sessionScope.user != null}”> ... </c:if>

72 Literais. Boolean: true e false Long: como em Java.
Float: como em Java. String: com aspas simples e dupla. Null: null

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}”>

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

75 Criando TagLibs

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

77 Tag Files 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. 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.

78 Exemplo de um Tag File description="Display logo" pageEncoding="UTF-8"%> prefix="c" uri=" 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/>

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>

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>


Carregar ppt "Java Avançado JavaServer Pages Material cedido por:"

Apresentações semelhantes


Anúncios Google