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

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

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

Apresentações semelhantes


Apresentação em tema: "Java Server Pages (JSPs) Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense."— Transcrição da apresentação:

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

2 2 JSPs (JavaServer Pages) São uma maneira mais confortável (comparado aos servlets) de se criar páginas web dinâmicas Aparentemente, podem ser encaradas como o oposto de servlets: servlets são classes Java gerando html, enquanto jsps são htmls com trechos de código Java Tecnicamente, são equivalentes: jsps são traduzidos pelo contêiner web em servlets equivalentes

3 3 JSP (JavaServer Page) Referência: x/servlet/jsp/package-summary.html

4 4 JSP - Exemplo JSP Básico Um exemplo básico <% for (int i=1; i<7; i++) { out.println(" Heading " + i + " "); } %>

5 5 JSP – Exercício 6 Copie o arquivo.jsp do exemplo para dentro do diretório de sua aplicação no Tomcat; Chame a página digitando a url correspondente no browser: /.jsp /.jsp

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

7 7 JSP – Ciclo de Vida Podemos observar que, numa primeira chamada da página JSP, o browser demora um pouco para apresentar a resposta; Isto ocorre pois a página JSP precisa ser interpretada; Naturalmente, em chamadas sucessivas, o servlet não precisa ser gerado e o browser apresenta a resposta recebida mais rapidamente

8 8 JSP – Processo de Compilação Solicitação para um JSP é recebida pelo contêiner Existem compilações de servlet com um registro de data/hora posterior ao JSP de origem? –Se não, o contêiner traduz o JSP para um servlet Java equivalente, compila o arquivo e instancia o servlet; O contêiner invoca jsp_service() para executar o servlet; A resposta é enviada ao cliente.

9 9 JSP – Ciclo de Vida

10 10 JSP – Servlet Gerado No Tomcat, o código do servlet gerado pode ser encontrado no diretório /work; Do código gerado, podemos observar que a classe _jsp não herda de HttpServlet, mas sim de uma especialização do fabricante; O método _jspService() equivale ao método service() visto anteriormente; Ele representa o conteúdo da JSP traduzido

11 11 JSP – Tipos de Tags Além das tags HTML, as seguintes tags podem ocorrer numa página JSP: Tag de inserção de código Java Tag que gera o valor de uma expressão para ser exibido Tag de declaração. As declarações podem ser de variáveis instância ou métodos do servlet Tags para definição de diretivas: include, page e taglib

12 12 JSP - Comentários Comentário copiado para a saída Comentários copiados para o código do servlet gerado e variantes acima Comentário JSP. Não é copiado nem para a saída, nem para o servlet.

13 13 JSP – Exercício 7 Crie uma página JSP para exibir a saída abaixo. Para tal declare uma variável que irá conter uma lista de valores a serem copiados para a saída do usuário.

14 14 JSP – Variáveis Pré- Definidas Auxiliam na criação de páginas JSP; São usualmente chamadas de objetos implícitos, pois podemos utilizá-las sem declará-las; Podemos encontrar estas declarações no início do método _jspService() (método do servlet gerado à partir de uma JSP).

15 15 JSP – Variáveis Pré- Definidas applicationImplementa a interface javax.servlet.ServletContext. Corresponde ao escopo de aplicação. configÉ um objeto da classe ServletConfig. Ou seja, permite acessar parâmetros como os de inicialização do servlet. outEnvia dados de saída de volta para o usuário. É utilizado apenas dentro de scriptlets. pageContextOferece métodos para recuperação dos outros objetos implícitos. requestPermite a obtenção de informações sobre o request. responsePermite a configuração de saída para o usuário. sessionFornece métodos para a manipulação de sessões.

16 16 JSP – Exemplo com Variáveis Pré-definidas Basicão JSP <% String acessou = sim; session.setAttribute("statusBasicao", acessou); %> … Outro JSP <% if ((session.getAttribute("statusBasicao") != null) && (session.getAttribute("statusBasicao").equals(sim)) out.println(session.getAttribute("statusBasicao")); else out.println("Basicao não executado"); %>

17 17 Diretivas JSP – Exercício 8 Mostre, numa página JSP, o valor do contador criado num servlet anteriormente. Para tal, o contador deve ter sido criado como atributo.

18 18 JSP - Diretivas São tags que fornecem ao contêiner informações sobre uma página JSP; Como citamos no slide Tipos de Tags, JSP possui 3 tipos de diretivas: –include –page –taglib As diretivas include têm a seguinte sintaxe: " %>

19 19 JSP – Exemplo de diretivas Basicao JSP Um exemplo basico Heading ${status.count} " />

20 20 JSP – Diretiva include Arquivos incluídos também podem ser páginas JSP; Esta construção tem o inconveniente de, no caso de alteração de um arquivo incluído, os arquivos que o incluem precisam ter suas datas/horas modificadas para que a alteração seja refletida; Esse inconveniente é resolvido pela ação (vista adiante) que resolve os elos de inclusão dinamicamente.

21 21 JSP – Diretiva page Permite configurar propriedades de uma JSP; Estas propriedades são fornecidas como atributos (XML) da tag page;

22 22 JSP – Diretiva page Alguns Atributos AtributoValorDescriçãoValor Default autoFlushtrue/falseDefine o comportamento quando o buffer está cheio. Esvazia automaticamente ou gera uma exceção quando o buffer estoura true buffernone/n KBConfigura o tamanho do buffer de saída 8 KB contentTypetipo MIMEConfigura o tipo MIMEtext/html; charset=ISO errorPageURL relativoConfigura a JSP de erro importClasses e interfaces a importar Permite importação de pacotes Java padrão

23 23 JSP – Diretiva page AtributoValorDescriçãoValor Default isErrorPagetrue/falseIndica se a página receberá exceções de outras páginas false isThreadSafetrue/falseDetermina se o servlet gerado implementa a interface SingleThreadModel true sessiontrue/falseIndica se a página atual precisa de informações de sessão true

24 24 JSP – Exemplo de diretivas Basicao JSP Um exemplo basico Heading ${status.count} " />

25 25 JSP – Diretiva page A combinação das diretivas include e page permite, por exemplo, o compartilhamento de recursos (cabeçalhos, rodapés, etc) numa aplicação; Pacotes comuns podem ser importados numa única página JSP, e incluída por outras.

26 26 JSP – Diretiva taglib Mecanismo de extensão de tags; Ou seja, permite a utilização de tags além das pré-definidas (declaração, expressão, scriptlet e diretiva); Assim, podemos utilizar tags definidas por terceiros ou suas próprias tags personalizadas; JSTL é uma biblioteca de tags que implementa tarefas comuns e bem conhecidas, como iterações e condicionais; Visa minimizar o uso de código Java mesclado com código Html;

27 27 JSP – Exemplo de diretivas Basicao JSP Um exemplo basico Heading ${status.count} " />

28 28 Diretivas JSP – Exercício 9 Implemente o exemplo de uso de diretivas apresentado. Para tal, copie a biblioteca de JSTL (jstl.jar e standard.jar) para dentro de um dos diretórios abaixo: – \commom\lib – \lib – \WEB-INF\lib

29 29 JSP – EL (Expression Language) Outro recurso para especificação de páginas JSP; Possui um conjunto de objetos implícitos próprio; Contém conjunto abrangente de operadores; Oferece acesso a coleções e propriedades aninhadas; Sintaxe básica: ${ expressão em EL } Pode ser utilizada tanto dentro de atributos de tags da JSTL, quanto diretamente dentro de páginas; Exemplos: 1 é menor que 2: ${1 6 é maior que 7: ${6 gt 7} ${cursos[petrobras]} ${cursos.petrobras} ${applicationScope.statusBasicao} // Idem para sessionScope, requestScope, pageScope, param e paramValues

30 30 JSP - EL Especificação nova no JSP 2.0; Ou seja, não compatíveis com versões de contêineres que não suportam esta versão; Mecanismo de extensão através de métodos estáticos (visto à seguir); Através do web.xml podemos desativá-la: *.jsp true

31 31 JSP – Ações Padrão Tags especiais disponíveis para uso em páginas JSP;

32 32 JSP – Ações Padrão Permite o encaminhamento de uma solicitação para outro recurso dentro da mesma aplicação Web (diferente de redirecionamento). A página que encaminha não pode gerar nenhuma saída para o browser. Permite a inclusão de recursos que são tratados dinamicamente (oposto da diretiva include). O atributo page indica a página a ser incluída, enquanto que o atributo flush indica se algum conteúdo no buffer antes da inclusão deve ser enviado ou não. Permite o uso de JavaBeans dentro de uma JSP (classe Java comum, com construtor default e métodos get e set para atributos) É utilizado para acessar propriedades dentro de um Bean.

33 33 JSP – Ações Padrão É utilizado para configurar propriedades de um Bean. Permite a execução de um plugin, com possibilidade de instalação caso o navegador não o possua. Conjunto de parâmetros a ser passado para um plugin. Formato de um parâmetro. Pode ser passado para um forward, um include ou dentro da tag params. Mensagem a ser exibida quando um navegador não entende o código HTML gerado para o plugin.

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

35 35 JSP – JavaBeans Abordagem de desenvolvimento de componentes para JSP; Encapsulam a lógica do negócio; Exemplos de uso: –Acesso a dados de várias origens; –Validação de dados inseridos em formulários; Possui as vantagens do desenvolvimento baseado em componentes; Simplifica as páginas JSP através, por exemplo, da substituição de scriptlets de criação de objetos por tags de manipulação de beans (jsp:useBean, jsp:setProperty e jsp:getProperty);

36 36 JSP – JavaBeans Aumento sensível de produção na utilização de formulários. Um bean é uma classe Java comum que respeita algumas convenções (em JSP): –Um construtor default (sem argumentos) deve estar disponível; –Suas propriedades devem ser acessadas através de métodos get e set; –Entretanto, é possível chamar os métodos de um bean diretamente, dentro dos scriptlets;

37 37 JSP – JavaBeans Observe que podemos ter uma propriedade sem termos um atributo de classe para ela; Basta oferecermos métodos get e/ou set; Formato dos métodos: –Para uma propriedade chamada prop, poderemos ter os métodos getProp(); e void setProp( );

38 38 Exercício 10 Defina uma classe como um JavaBean (construtor default e métodos get e set públicos para as propriedades) para armazenar objetos com propriedades nome e url. Crie um arquivo.html que conterá o formulário com campos para o cadastro de favoritos. Crie um arquivo.jsp que tratará estas requisições. Este deve utilizar as tags de manipulação de beans. Uma lista de favoritos deve ser criada (atributo de sessão, por exemplo) e, para cada nova requisição, um novo item é inserido na lista.

39 39 JSTL (JavaServer Pages Standard Tag Library) Uma biblioteca de tags visa minimizar o uso de código Java mesclado com código Html; JSTL prove tags para 5 grupos funcionais: –Tags Básicas (iteração, desvio de fluxo, saída,..) –Tags para manipulação de documentos XML –Tags para internacionalização –Tags de acesso a banco de dados –Tags de funções (principalmente para manipulação de strings)

40 40 JSTL – Classes de Tags TipoURIPrefixoExemplo Corehttp://java.sun.com/jsp/jstl/corec XMLhttp://java.sun.com/jsp/jstl/xmlx Internacionalizaçãohttp://java.sun.com/jsp/jstl/fmtfmt Banco de Dadoshttp://java.sun.com/jsp/jstl/sqlsql Funçõeshttp://java.sun.com/jsp/jstl/functionsfn

41 41 JSTL – Exemplo Exemplo de Uso de tags JSP Lista de Codinomes Codinome Preferência

42 42 JSTL - Core Ações Básicas Gerais – Semelhante a tag de expressão JSP; O conteúdo pode ser estático ou dinâmico (composto de EL); – Define uma variável com o valor da expressão fornecida em algum escopo; O escopo default é o page; – Utilizada para capturar exceções geradas pelo código JSP englobado; Estas exceções não são tratadas pelo mecanismo de página de erros de JSP. var armazenará o conteúdo da exceção gerada.

43 43 JSTL - Core Ações Básicas Condicionais – Corresponde ao if das linguagens de programação; Esta ação pode ter o valor do seu teste armazenado na variável var, do escopo fornecido; – Corresponde ao switch, para agrupamento de sentenças case; – Corresponde à uma sentença case; – Ação padrão a ser executada quando nenhuma ação when for tomada.

44 44 JSTL - Core Ações Básicas de Iteração – Corresponde ao for das linguagens de programação; Itera sobre coleções em geral; varStatus contém informações sobre o índice numa iteração; – Análoga a classe StringTokenizer; A string fornecida é subdividida em tokens de acordo com os delimitadores fornecidos.

45 45 JSTL - Core Ações Básicas de Iteração – Análogo à ação padrão ; Entretanto, permite a utilização de urls absolutas; ou seja, conteúdo fora da própria aplicação; – Utilizado para criação de parâmetros de solicitação para URLs pelas ações c:import, c:url e c:redirect; – Necessário quando se deseja abortar o processamento da JSP corrente; Frequentemente utilizado em situações de erro; – Útil na regravação de URL com ID de sessão do cliente; Necessário quando cookies estão desabilitados;

46 46 JSTL – Classes de Tags TipoURIPrefixoExemplo Corehttp://java.sun.com/jsp/jstl/corec XMLhttp://java.sun.com/jsp/jstl/xmlx Internacionalizaçãohttp://java.sun.com/jsp/jstl/fmtfmt Banco de Dadoshttp://java.sun.com/jsp/jstl/sqlsql Funçõeshttp://java.sun.com/jsp/jstl/functionsfn

47 47 JSTL - XML Ações Básicas –Expressões de manipulação que utilizam a linguagem XPath; Exemplos: $variable : procura por um atributo chamado variable no contexto de página. Equivale a pageContext.findAttribute(variable) $applicationScope$variable : procura por um atributo chamado variable no contexto de aplicação (idem para sessionScope, pageScope, requestScope e param); – Percorre um documento XML; Não faz validação frente a esquemas ou DTDs; O atributo xml deverá conter uma variável, cujo conteúdo foi importado através de uma url de um xml ( )

48 48 JSTL - XML Ações Básicas – Após a chamada da ação parse, está ação permite a extração de partes do documento XML à partir de expressões XPath; – Permite armazenar o resultado de uma consulta XPath para futura utilização; A variável utilizada pode ser definida em qualquer dos escopos vistos anteriormente; Ações de Fluxo de Controle –, –Similares às tags da biblioteca básica; –Atributo chamado select é utilizado sempre que referenciamos o documento XML.

49 49 JSTL – Exercício 11 Escolha algum canal de informações XML (feed) de sua preferência e gera uma página similar à seguinte página:

50 50 JSTL – Exercício 11 Para tal geração, é necessário os seguintes passos: –Copiar a biblioteca Xalan (XML) para ser acessível pela aplicação –Processar o XML da seguinte maneria: Escolha o canal RSS de sua preferência Importe este link para a sua aplicação: Processe-o como um documento XML: Percorra o documento para gerar a saída:

51 51 JSTL Internacionalização (I18N) –Oferece funções de internacionalização (localidade) e formatação de datas e números; Banco de Dados –Tags para consultas a banco de dados; –Naturalmente, só devem ser utilizadas em protótipos ou aplicações simples; –Para aplicações corporativas, esses dados devem estar encapsulados em componentes JavaBeans; Funções –Basicamente oferece funções para a manipulação de strings;

52 52 JSP – Mecanismo de Extensão Incorporação de novas ações e funções que podem ser utilizadas em páginas JSP; Permite ampliar a separação entre os papéis do programador e do webdesigner: –O programador encapsula código Java em tags e funções EL; –O webdesigner só precisa compreender a semântica de tags e funções e terá um tempo maior para implementar a apresentação; Tipos de extensão: –Novas funções para expressões EL; –Ações personalizadas; Ambos necessitam de 3 tarefas: –Implementação em Java da função/ação; –Criação do arquivo.tld (Tag Library Descriptor); –Atualização do descritor de implantação.

53 53 JSP – Extensão de Funções EL A implementação em Java é fornecida através de um método Java public static; package helloPackage; public class ELFunctions { public static String sayHello () { return new String("Hello from EL !!"); }

54 54 JSP – Extensão de Funções EL – TLD Hello library Hello Tags 1.1 h hello_url SayHello helloPackage.ELFunctions java.lang.String sayHello() …

55 55 JSP – Extensão de Funções EL – web.xml ... hello_url /WEB-INF/hello.tld

56 56 JSP – Extensão de Funções EL Exemplo de Uso de tags JSP ${h:SayHello()}

57 57 Exercício 12 Implemente a extensão apresentada.

58 58 JSP – Extensão de Tags Exemplo de Uso de tags JSP Alo mundo!!! HTML

59 59 JSP – Extensão de Tags Passos para geração do servlet: –Após o uso de uma tag, busca-se, à partir de myprefix, a uri correspondente na página onde a mytag é usada (diretiva taglib); –O descritor de implantação (web.xml) contém a associação entre a uri e o descritor da biblioteca (arquivo.tld); –O arquivo.tld contém, para cada tag, a classe que implementa essa tag; Ou seja, conterá a classe que implementa mytag.

60 60 JSP – Extensão de Tags – web.xml ... hello_url /WEB-INF/hello.tld

61 61 JSP – Extensão de Tags Passos para geração do servlet: –Após o uso de uma tag, busca-se, à partir de myprefix, a uri correspondente na página onde a mytag é usada (diretiva taglib); –O descritor de implantação (web.xml) contém a associação entre a uri e o descritor da biblioteca (arquivo.tld); –O arquivo.tld contém, para cada tag, a classe que implementa essa tag; Ou seja, conterá a classe que implementa mytag.

62 62 JSP – Extensão de Tags – TLD … h hello_url tagqq helloPackage.TagQQ empty quant true JSP scriptless tagdependent

63 63 JSP – Extensão de Tags Para criação de tags personalizadas é preciso definir uma classe que implemente uma das interfaces, ou estenda uma das classes abaixo:

64 64 JSP – Extensão de Tags – Implementação package helloPackage; import java.io.IOException; import javax.servlet.jsp.tagext.TagSupport; import javax.servlet.jsp.JspException; public class TagQQ extends TagSupport { public int doStartTag () throws JspException { try { pageContext.getOut().print(Alo mundo!!!"); } catch (IOException e) { System.out.println("Erro em TagQQ"); throw new JspException(e); } return SKIP_BODY; }

65 65 JSP – Extensão de Tags – Constantes ConstanteSignificado EVAL_BODY_INCL UDE Retornado pelo método doStartTag(), indica que o conteúdo do corpo da tag deve ser avaliado e colocado na saída. EVAL_PAGERetornado pelo método doEndTag(), indica que o restante da JSP deve ser processada. SKIP_BODYOs métodos doStartTag() e doAfterBody() podem retornar esse valor para indicar que o corpo deve ser pulado. SKIP_PAGEValor que pode ser retornado pelo método doEndTag() para indicar que o restante da página deve ser pulado.

66 66 Exercício 13 Implemente uma biblioteca de tags que para atender aos seguintes usos numa página JSP: Adiciona o nome e a url a um objeto, com escopo de aplicação, que guarda urls (alguma coleção, provavelmente criada por você para armazenar os pares). Retorna um link na forma nome, onde url e nome estão armazenados no objeto citado acima, na posição posicao. Para este exercício, inclua no projeto o.jar que contém a definição das extensões de tag: ( \common\lib\jsp-api.jar)

67 67 Exercício 13 A aplicação deve implementar os tratadores de tag e criar telas para cadastro de favoritos e para a listagem destes favoritos.

68 68 JSP – Extensão de Tags – Simple Tags - JSP 2.0 À partir da JSP 2.0, o desenvolvimento de tags personalizadas se tornou bem mais simples; Basicamente, precisamos fazer 3 tarefas: –Criar um diretório chamado tags, abaixo do diretório WEB-INF (WEB-INF/tags), que conterá arquivos com extensão.tag para a definição das tags; –Criar arquivos.tag para cada tag a ser utilizada; estes arquivos poderão utilizar tags como JSTL e JavaBeans, mas não poderão conter scriptlets; –Uso das tags definidas, numa JSP, com a definição do parâmetro tagdir na diretiva taglib.

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

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


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

Apresentações semelhantes


Anúncios Google