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

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

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

Apresentações semelhantes


Apresentação em tema: "Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira Jobson Ronan Jeronimo da Silva Material cedido por: Daniel."— Transcrição da apresentação:

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

2 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 3 Funcionamento do JSP (JSPEngine)

4 4  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 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 6 Componentes e Sintaxe JSP  Diretivas  Declarações  Scriptlets  Comentários  Expressões

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

8 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 9 Diretiva page - Opções  import  Similar ao import de Java.  session - Default  Controla quando um JSP participa ou não de Sessões. O valor false não é similar a getSession(false)

10 10 Diretiva page - Opções  buffer  Especifica o tamanho do buffer usado pelo PrintWriter do JSP.  autoflush - Default  Controla se o buffer de sa í da ser á “ esvaziado ” automaticamente caso cheio.

11 11 Diretiva page - Opções  contentType  Seta o content-type response header indicando o mime da resposta.  language - ú nica suportada  Indica a linguagem que est á sendo usada.

12 12 Diretiva page - Opções  errorPage  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 - - Default  Habilita uma p á gina a tratar exce ç ões atrav é s do objeto impl í cito exception (visto mais adiante)

13 13 Diretiva page - Opções  info  Similar a getServletInfo().  extend  Ajusta que classe o servlet gerado deve extender.

14 14 Diretiva page - Opções  isThreadSafe - Default  Ajusta quando o servlet gerado implementar á SingleThreadModel

15 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:

16 16 Diretiva taglib  Será abordada mais a frente.

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

18 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.to String()).  Sintaxe:  Exemplo

19 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:

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

21 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:

22 22 Scriptlets - Exemplo Est á de manhã! Que horas são?

23 23 Comentários  Não é enviado ao browser cliente

24 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 25 O Objeto out  Classe: javax.servlet.jsp.JspWriter  Descrição: Usado para enviar respostas para o cliente.  Exemplo: <% out.println(“Exemplo”); %>

26 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 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 28 O Objeto session  Classe: javax.servlet.http.HttpSession  Descrição: Referencia a sessão do usuário. Ausente quando  Exemplo: <% Usuario user = (Usuario) session.getAttribute(“user”); if (user == null){ response.sendRedirect(“login.jsp”); } %>

29 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  Exemplo:. <% exception.printStackTrace(new java.io.PrintWriter(out)); %>

30 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 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 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 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 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 36 Ações  Construídas em XML, possuem como objetivo controlar o comportamento do engenho JSP.

37 37 Jsp:include  Inclui o recurso em tempo de requisição

38 38 Jsp:forward  Permite passar a requisição para outro recurso.

39 39 Jsp:useBean  Combinada com as ações getProperty e setProperty, forma um meio limpo de trabalhar com classes de entidade em JSP´s.

40 40 Jsp:useBean  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.

41 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 no escopo da sessão  Use para exibir os dados  Altere gravarMensagens para que use 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 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 44 Bibliotecas de Tags  Utilidades. Ex.:  Pecorrer uma coleção montando uma tabela.  Manipular arquivos.  Paginação de buscas.

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

46 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 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 48 Utilizando Tags JSP Page

49 49 O Arquivo TLD: Exemplo exemplo helloworld org.Exemplo JSP msg true

50 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 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 52 Expressions Tags  out – Avalia uma expressão e escreve seu resultado no JspWriter corrente.  Expression Language  JSTL EL implicit objects

53 53 Expressions Tags  set – Seta o valor de um atributo em qualquer escopo do JSP (page, request, session, aplication).

54 54 Expressions Tags  remove – Remove um objeto em qualquer escopo do JSP.

55 55 Tags condicionais  if – Permite a execução condicional do corpo de acordo com a avaliação da expressão....

56 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 57 Tags condicionais

58 58 Tags condicionais  forEach – Permite a iteração em uma coleção de objetos.

59 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 60 Paginação na Web  Solução:  Reusar componentes aprovados para tais situações. Pager taglib Display Taglib

61 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 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 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. ">

65 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. 0}">...

66 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: - Expressão - Literal

67 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 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 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 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 71 Objetos implícitos  Exemplos: ...

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

73 73 Operadores.  Aritiméticos: +, -, *, / e div, % e mod  Lógicos: and, &&, or, ||, not, !  Relacionais: ==, eq, !=, ne,, gt, =, le. empty: Um operador prefixal que é usado para saber se algo é nulo ou vazio.  Ex:

74 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 e para remover as expressões condicionais e iterações das páginas da aplicação de mensagens

75 Criando TagLibs

76 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 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.  - descreve um atributo da tag, e se é obrigatório ou não.  - representa o que é definido entre a abertura e fechamento da tag.

78 78 Exemplo de um Tag File

79 79 Usando um Tag File Usando um Tag File

80 80 Prática 4  Escreva um custom tag simples que receba um String como parâmetro (texto) e imprima o String dentro de uma tabela HTML: O tag deve produzir Texto Recebido  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 Texto Recebido


Carregar ppt "Java Avançado JavaServer Pages Guilherme Kely de Melo Oliveira Jobson Ronan Jeronimo da Silva Material cedido por: Daniel."

Apresentações semelhantes


Anúncios Google