Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Programação Servidor em Sistemas Web Slides da Disciplina Prof. Rômulo Alencar romulo.alencar@live.estacio.br Prof. Rômulo Alencar Programação Servidor em Sistemas Web 2 Conteúdo ❑ Parte I – XML ➥ XML ➥ XML Schema ❑ Parte II – Tecnologias Lado Servidor ➥ Protocolo HTTP ➥ Aplicações Web ➥ Servlets ➥ Java Server Pages ➥ JSP Tag ❑ Parte III – Acesso a Dados ➥ JDBC ➥ JPA ❑ Parte IV – Padrões de Projeto Web ➥ Padrões de Projeto ➥ Data Access Object ➥ Data Transfer Object ➥ MVC ➥ Front Controller ❑ Parte V – Web Services ➥ Web Services ➥ SOAP ➥ Metro Prof. Rômulo Alencar Programação Servidor em Sistemas Web 3 XML Parte I Prof. Rômulo Alencar Programação Servidor em Sistemas Web 4 XML ❑ Histórico ➥ O grande fluxo de informação requer a estruturação dos dados ➥ A linguagem SGML foi criada em 1986 ➫ Flexível para estruturar todo tipo de informação mas também muito complexa ➥ HTML é simples (por isso popular) mas de propósito específico ➥ XML uniu a flexibilidade de SGML à simplicidade de HMTL ➥ O padrão de XML é regido pelo World Wide Web Consortium ➫ http://www.w3c.org Prof. Rômulo Alencar Programação Servidor em Sistemas Web 5 XML ❑ Introdução ➥ O XML em si não faz nada em especial ➫ Projetado para transportar e armazenar dados ➥ Corresponde a um texto simples ➫ Aplicações podem ler o XML para manipular as tags numa forma especial ➥ Não há tags pré-definidas ➫ Pode-se definir suas próprias tags Prof. Rômulo Alencar Programação Servidor em Sistemas Web 6 XML ❑ Introdução ➥ Estrutura não-ambígua ➫ A formatação de um XML não permite ambigüidade quanto à interpretação de nomes, ordem ou hierarquia de elementos ➥ Forte checagem de erros ➫ São definidas regras mínimas de sintaxe (XML bem formado) ➫ É permitida a criação de modelos (gramáticas) usados na validação de documentos XML Prof. Rômulo Alencar Programação Servidor em Sistemas Web 7 XML ❑ Organização dos Dados ➥ É necessário organizar os dados para: ➫ Que sejam legíveis por máquinas e por humanos ➫ Definir a estrutura dos dados junto com os valores ➫ Mostrar claramente os relacionamentos hierárquicos entre os dados ➫ Separar os dados da estrutura de apresentação ➫ Usar padrões abertos e flexíveis Prof. Rômulo Alencar Programação Servidor em Sistemas Web 8 XML ❑ XML x HTML XML HTML • Projetado para transportar e armazenar dados • Foco no valor (conteúdo) do dado • Inexistência de tags pré-definidas • Projetado para exibir dados • Foco na aparência do dado • Tags pré-definidas Prof. Rômulo Alencar Programação Servidor em Sistemas Web 9 XML ❑ Organização dos Dados ➥ Exemplo 1 – Sistema de Varejo ➥ Exemplo 2 – Sistema Bancário 06/03/2008 4 XML Projetado para transportar e armazenar dados Foco no quê é o dado Inexistência de tags pré-definidas Projetado para exibir dados Foco na aparência dos dados Tags pré-definidas 7 XML HTML XML x HTML Exemplo 1 – Interpretação do Varejo Exemplo 2 – Interpretação do Sistema Bancário Organização dos Dados XML 0 7 8 9 1 0 0 1 0 0 0 1 0 3 0 0 0 0 0 0 0 0 4 5 7 Código do produto Dígito Preço R$ 4,57 0 7 8 9 1 0 0 1 0 0 0 1 0 3 0 0 0 0 0 0 0 0 4 5 7 Código da operação Data da operação 01/10/89 Número da conta Valor da operação US$ 10.300,00 06/03/2008 4 XML Projetado para transportar e armazenar dados Foco no quê é o dado Inexistência de tags pré-definidas Projetado para exibir dados Foco na aparência dos dados Tags pré-definidas 7 XML HTML XML x HTML Exemplo 1 – Interpretação do Varejo Exemplo 2 – Interpretação do Sistema Bancário Organização dos Dados XML 0 7 8 9 1 0 0 1 0 0 0 1 0 3 0 0 0 0 0 0 0 0 4 5 7 Código do produto Dígito Preço R$ 4,57 0 7 8 9 1 0 0 1 0 0 0 1 0 3 0 0 0 0 0 0 0 0 4 5 7 Código da operação Data da operação 01/10/89 Número da conta Valor da operação US$ 10.300,00 Prof. Rômulo Alencar Programação Servidor em Sistemas Web 10 XML ❑ Organização dos Dados ➥ Exemplo 1 XML HTML <Produto> <CodigoAutomacao> <Cod>0789100100010</Cod> <Digito>3</Digito> </CodigoAutomacao> <Preco>4,57</Preco> </Produto> <table> <tr> <td>Codigo</td> <td>Preco</td> </tr> <tr> <td>0789100100010-3</td> <td>R$ 4,57</td> </tr> </table> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 11 XML ❑ Organização dos Dados ➥ Exemplos 1 e 2 em XML Exemplo 1 Exemplo 2 <Produto> <CodigoAutomacao> <Cod>0789100100010</Cod> <Digito>3</Digito> </CodigoAutomacao> <Preco Moeda="R$">4,57</Preco> </Produto> <Transacao> <Operacao>07</Operacao> <DtOp Format="DD/MM/AAAA"> 01/10/1987 </Dt Op> <Valor Moeda="US$"> 10.300,00 </Valor> <Conta>000475</Conta> </Transacao> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 12 XML ❑ Sintaxe ➥ Declaração XML <?xml version="1.0" ?> ➥ Comentário <!-- Comentário ... --> ➥ Elemento raiz (root) <Produto> ➥ Sub-elemento <Cod>07891001000103</Cod> ➥ Elemento vazio <Custo /> ➥ Atributo <Preco Moeda="R$">4,57</Preco> </Produto> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 13 XML ❑ Sintaxe ➥ Declaração XML ➫ Declara informações sobre o tipo de documento processado ➱ <?xml nome1="valor1" nome2="valor2"?> ➫ Atributos ➱ version: define a versão da especificação XML usada ➱ encoding: define a codificação de caracteres usados ➧ Exemplo: UTF-8, UTF-16 Prof. Rômulo Alencar Programação Servidor em Sistemas Web 14 XML ❑ Documento Bem Formado ➥ Qualquer documento XML deve seguir regras básicas de formatação para que seja considerado “bem formado” ➥ Regras para um documento XML bem formado: ➫ Um documento tem só um elemento raiz ➫ Os nomes das tags de início e fim de elementos têm que combinar ➫ Elementos aninhados corretamente ➫ Valores dos atributos entre aspas ➫ Não existem atributos repetidos no mesmo elemento Prof. Rômulo Alencar Programação Servidor em Sistemas Web 15 XML ❑ Documento Válido ➥ Um documento XML apenas “bem formado” tem pouca utilidade ➫ Não há especificação sobre quais tags podem ser usadas e para que servem ➫ Não há verificação caso se digite uma tag no local errado, com atributos errados ou mesmo com erro de digitação ➥ XML permite uma forma de descrever o modelo ou gramática de um XML ➥ Um documento XML será considerado “válido” se obedecer todas as regras do seu modelo Prof. Rômulo Alencar Programação Servidor em Sistemas Web 16 XML ❑ Modelo ➥ O modelo XML define uma gramática da estrutura do documento ➫ DTD ➫ XML Schema ➥ Cada domínio de dados pode possuir uma gramática ➥ Existem hoje áreas com gramáticas de XML bem definidas, por exemplo: ➫ OFX (Open Financial Exchange) ➫ Chemical Markup Language Prof. Rômulo Alencar Programação Servidor em Sistemas Web 17 XML ❑ Validação ➥ A gramática permite validação automática dos documentos ➥ Motivação ➫ Validação da gramática e da consistência de documentos XML a serem processados ➫ Necessidade de processamento de documentos XML bem formados e com gramática correta ➫ Garantia da correta interpretação de um XML por ambas as partes envolvidas no seu envio e recepção Prof. Rômulo Alencar Programação Servidor em Sistemas Web 18 XML ❑ Validação ➥ Um parser usa o DTD ou XML Schema para validar as regras definidas no documento XML em questão 06/03/2008 10 Um parser usa o DTD ou Schema para validar as regras definidas no documento XML em questão Validação 19 XML Schema Documento XML Parser Processamento OK Documento XML Estrutura do XML Tags Que tags são permitidos Que tags filhas são requeridas ou opcionais Se a ordem ou a quantidade de elementos é importante Que tipos de conteúdo são permitidos Atributos Que atributos são requeridos ou opcionais Quais são os tipos de dados dos atributos Se existem valores default para os atributos O Que Pode Ser Validado? 20 XML Prof. Rômulo Alencar Programação Servidor em Sistemas Web 19 XML ❑ O que pode ser validado? ➥ Estrutura do XML ➫ Tags ➱ Que tags são permitidos ➱ Que tags filhas são requeridas ou opcionais ➱ Se a ordem ou a quantidade de elementos é importante ➱ Que tipos de conteúdo são permitidos ➫ Atributos ➱ Que atributos são requeridos ou opcionais ➱ Quais são os tipos de dados dos atributos ➱ Se existem valores default para os atributos Prof. Rômulo Alencar Programação Servidor em Sistemas Web 20 XML Schema ❑ Introdução ➥ Descreve a estrutura de um XML ➥ Também conhecido como XML Schema Definition (XSD) ➥ Escrito no próprio XML ➫ Mais poderoso que um DTD Prof. Rômulo Alencar Programação Servidor em Sistemas Web 21 XML Schema ❑ Exemplo XML (Note.xml) XML Schema (Note.xsd) <?xml version="1.0"?> <!--Deve-se referenciar o Schema--> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body> Don't forget me this weekend! </body> </note> <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 22 XML Schema ❑ Características ➥ Define: ➫ Elementos e atributos que podem aparecer em um documento ➫ Define quais elementos são filhos, o número deles e a ordem em que aparecem ➫ Define se um elemento é vazio ou pode incluir texto ➫ Define tipos de dados para elementos e atributos, além de valores fixos e default Prof. Rômulo Alencar Programação Servidor em Sistemas Web 23 XML Schema ❑ Criação de um Schema 06/03/2008 13 XML Schema 25 Exemplo – Criação de um Schema <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> </xs:schema> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <?xml version="1.0"?> Versão do XML Elementos deste xml vêm do namespace http://www3.org/2001/XMLSchema e devem ser prefixados com xs: Início sempre com o elemento schema Elementos definidos neste schema (note, to, heading, body) vem do namespace http://www.w3schools.com Indica o namespace padrão Indica que elementos utilizados neste documento XML devem ser qualificados com o namespace Note.xsd XML Schema 26 Exemplo – Referenciando o Schema em um XML <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> </note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> <?xml version="1.0"?> Versão do XML Indica o namespace padrão Schema instance Indica o namespace e a localização do namespace Note.xml Prof. Rômulo Alencar Programação Servidor em Sistemas Web 24 XML Schema ❑ Referenciando o Schema em um XML 06/03/2008 13 XML Schema 25 Exemplo – Criação de um Schema <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> </xs:schema> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <?xml version="1.0"?> Versão do XML Elementos deste xml vêm do namespace http://www3.org/2001/XMLSchema e devem ser prefixados com xs: Início sempre com o elemento schema Elementos definidos neste schema (note, to, heading, body) vem do namespace http://www.w3schools.com Indica o namespace padrão Indica que elementos utilizados neste documento XML devem ser qualificados com o namespace Note.xsd XML Schema 26 Exemplo – Referenciando o Schema em um XML <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> </note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> <?xml version="1.0"?> Versão do XML Indica o namespace padrão Schema instance Indica o namespace e a localização do namespace Note.xml Prof. Rômulo Alencar Programação Servidor em Sistemas Web 25 XML Schema ❑ Elementos ➥ Os elementos de um esquemas podem ser subdivididos em dois tipos ➫ Simples ➱ Elementos que contém apenas texto ➱ Não pode conter outros elementos ou outros atributos ➫ Complexos ➱ Elemento que contém outros elementos ou atributos Prof. Rômulo Alencar Programação Servidor em Sistemas Web 26 XML Schema ❑ Elementos Simples ➥ Sintaxe ➫ <xs:element name="xxx" type="yyy"/> ➱ xxx: nome do elemento ➱ yyy: tipo de dado ➫ Tipos de dados ➱ xs:string ➱ xs:decimal ➱ xs:integer ➱ xs:boolean ➱ xs:date ➱ xs:time Prof. Rômulo Alencar Programação Servidor em Sistemas Web 27 XML Schema ❑ Exemplos de definição de elementos Elementos no XML Definição em XML Schema <lastname>Bastos</lastname> <age>36</age> <dateborn>1970-03-27</dateborn> <xs:element name="lastname" type="xs:string"/> <xs:element name="age" type="xs:integer"/> <xs:element name="dateborn" type="xs:date"/> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 28 XML Schema ❑ Elementos Simples ➥ Valor Default ➫ Pode-se especificar um valor default para um elemento quando o mesmo não for especificado ➫ Exemplo: ➱ <xs:element name="color" type="xs:string" default="red"/> ➥ Valor Fixo ➫ Pode-se especificar um valor fixo para um elemento, o qual não pode ser alterado ➫ Exemplo: ➱ <xs:element name="color" type="xs:string" fixed="red"/> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 29 XML Schema ❑ Elementos Complexos ➥ Há quatro tipos de elementos complexos, que também podem ter atributos: 06/03/2008 15 Valor Default Pode-se especificar um valor default para um elemento quando o mesmo não for especificado Exemplo: Valor Fixo Pode-se especificar um valor fixo para um elemento, o qual não pode ser alterado Exemplo: Elementos Simples 29 XML Schema Há quatro tipos de elementos complexos que podem também ter atributos: 1. Elementos vazios 2. Elementos que contêm apenas outros elementos 3. Elementos que contêm apenas texto 4. Elementos que contêm texto e outros elementos Elementos Complexos 30 XML Schema Prof. Rômulo Alencar Programação Servidor em Sistemas Web 30 XML Schema ❑ Elementos Complexos ➥ Tipo 1 06/03/2008 16 Elementos Complexos – Tipo 1 31 XML Schema Elementos Complexos – Tipo 2 32 XML Schema Prof. Rômulo Alencar Programação Servidor em Sistemas Web 31 XML Schema ❑ Elementos Complexos ➥ Tipo 2 06/03/2008 16 Elementos Complexos – Tipo 1 31 XML Schema Elementos Complexos – Tipo 2 32 XML Schema Prof. Rômulo Alencar Programação Servidor em Sistemas Web 32 XML Schema ❑ Elementos Complexos ➥ Tipo 3 06/03/2008 17 Elementos Complexos – Tipo 3 33 XML Schema Elementos Complexos – Tipo 4 34 XML Schema Prof. Rômulo Alencar Programação Servidor em Sistemas Web 33 XML Schema ❑ Elementos Complexos ➥ Tipo 4 06/03/2008 17 Elementos Complexos – Tipo 3 33 XML Schema Elementos Complexos – Tipo 4 34 XML Schema Prof. Rômulo Alencar Programação Servidor em Sistemas Web 34 XML Schema ❑ Elementos Complexos ➥ A ordem dos sub-elementos de um elemento complexo deve ser controlada utilizando os indicadores ➫ xs:sequence ➱ Os sub-elementos devem aparecer exatamente na ordem indicada ➫ xs:all ➱ Os sub-elementos podem aparecer em qualquer ordem ➫ xs:choice ➱ Apenas um dos sub-elementos informado pode aparecer Prof. Rômulo Alencar Programação Servidor em Sistemas Web 35 XML Schema ❑ Quantidade de ocorrências ➥ A quantidade de ocorrências de elementos (simples ou complexos) ou de ordens (sequence, all, choice) pode ser controlada com os atributos minOccurs (quantidade mínima) e maxOccurs (quantidade máxima) ➥ Exemplos: ➫ <xs:element name="telefone" minOccurs="2" maxOccurs="5"> ➱ O elemento telefone deverá ter de 2 a 5 repetições. ➫ <xs:sequence minOccurs="5" maxOccurs="10"> ➱ A sequência inteira de elementos deverá se repetir de 5 a 10 vezes. ➫ <xs:element name="conjuge" minOccurs="0" maxOccurs="1"> ➱ O elemento conjuge poderá não existir. Caso exista, não pode se repetir. Prof. Rômulo Alencar Programação Servidor em Sistemas Web 36 XML Schema ❑ Quantidade de ocorrências ➥ Observarções ➫ Quando não informados, considera-se o valor “1” para cada limite ➱ <xs:element name="conjuge" minOccurs="0"> ➧ O efeito é o mesmo de antes, pois a quantidade máxima de ocorrências, já que não foi informada, é 1. ➫ Para informar quantidade ilimitada, deve-se utilizar o valor especial “unbounded” ➱ <xs:element name="endereco" maxOccurs="unbounded"/> ➧ O elemento endereco deve aparecer ao menos uma vez e pode se repetir indefinidamente. Prof. Rômulo Alencar Programação Servidor em Sistemas Web 37 XML Schema ❑ Atributos ➥ Sintaxe ➫ <xs:attribute name="xxx" type="yyy"/> ➱ xxx: nome do elemento ➱ yyy: tipo de dado ➫ Exemplos de elementos no XML: ➱ <lastname lang="EN">Smith</lastname> ➫ Exemplo de definição de atributo: ➱ <xs:attribute name="lang" type="xs:string"/> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 38 XML Schema ❑ Atributos ➥ Exemplos ➫ Valor Default ➱ <xs:attribute name="lang" type="xs:string" default="EN"/> ➫ Valor Fixo ➱ <xs:attribute name="lang" type="xs:string" fixed="EN"/> ➫ Atributo requerido ➱ <xs:attribute name="lang" type="xs:string" use="required"/> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 39 TECNOLOGIAS LADO SERVIDOR Parte II Prof. Rômulo Alencar Programação Servidor em Sistemas Web 40 Protocolo HTTP ❑ O que um browser faz? ➥ O clique em um link ou submissão de um formulário a partir de um browser faz com que o mesmo efetue três tarefas: 1. Requisite uma página ao servidor web ➱ O servidor busca a página procurada e a envia ao browser 2. Receba a página enviada como resposta pelo servidor web 3. Exiba a página na janela do browser ➥ Como é efetuada a troca de informações entre o browser e o servidor web? Prof. Rômulo Alencar Programação Servidor em Sistemas Web 41 Protocolo HTTP ❑ Introdução ➥ HyperText Transfer Protocol ➫ Protocolo para comunicação de hipertextos entre browsers e servidores web ➫ Protocolo stateless ➱ Uma requisição executada não tem conhecimento das requisições anteriores ➫ Dois tipos de mensagem: request e response ➫ Cada página web carregada no browser pode disparar dezenas de requisições HTTP: html, figuras, estilo, etc 19/02/2008 5 Protocolo HTTP Introdução HyperText Transfer Protocol Protocolo para comunicação de hipertextos entre browsers e servidores web Protocolo stateless Uma requisição executada não tem conhecimento das requisições anteriores Dois tipos de mensagem: request e response Cada página web carregada no browser pode disparar dezenas de requisições HTTP: html, figuras, estilo, etc Browser Servidor Web Requisição HTTP Resposta HTTP Processamento da requisição 3 2 1 Protocolo HTTP Introdução Prof. Rômulo Alencar Programação Servidor em Sistemas Web 42 Protocolo HTTP ❑ Introdução 19/02/2008 5 Protocolo HTTP Introdução HyperText Transfer Protocol Protocolo para comunicação de hipertextos entre browsers e servidores web Protocolo stateless Uma requisição executada não tem conhecimento das requisições anteriores Dois tipos de mensagem: request e response Cada página web carregada no browser pode disparar dezenas de requisições HTTP: html, figuras, estilo, etc Browser Servidor Web Requisição HTTP Resposta HTTP Processamento da requisição 3 2 1 Protocolo HTTP Introdução Prof. Rômulo Alencar Programação Servidor em Sistemas Web 43 Protocolo HTTP ❑ Requisição ➥ Uma requisição HTTP é composta por: ➫ Linha de descrição da requisição ➫ Zero ou mais linhas de cabeçalho ➫ O conteúdo (corpo) 19/02/2008 6 Protocolo HTTP Requisição Uma requisição HTTP é composta por: Linha de descrição da requisição Zero ou mais linhas de cabeçalho O conteúdo (corpo) Descrição Cabeçalho Conteúdo Requisição HTTP Protocolo HTTP Requisição – Descrição A descrição da requisição possui os seguintes dados: Método de requisição (em geral GET ou POST) URI do recurso solicitado Versão do protocolo usada Exemplo de linha de descrição da requisição: GET /index.html HTTP/1.1 Método URI do recurso Versão do protocolo Descrição Prof. Rômulo Alencar Programação Servidor em Sistemas Web 44 Protocolo HTTP ❑ A descrição da requisição possui os seguintes dados: ➥ Método de requisição (em geral GET ou POST) ➥ URI do recurso solicitado ➥ Versão do protocolo usada ❑ Exemplo de linha de descrição da requisição: 19/02/2008 6 Protocolo HTTP Requisição Uma requisição HTTP é composta por: Linha de descrição da requisição Zero ou mais linhas de cabeçalho O conteúdo (corpo) Descrição Cabeçalho Conteúdo Requisição HTTP Protocolo HTTP Requisição – Descrição A descrição da requisição possui os seguintes dados: Método de requisição (em geral GET ou POST) URI do recurso solicitado Versão do protocolo usada Exemplo de linha de descrição da requisição: GET /index.html HTTP/1.1 Método URI do recurso Versão do protocolo Descrição Prof. Rômulo Alencar Programação Servidor em Sistemas Web 45 Protocolo HTTP ❑ Métodos de Requisição GET POST • Envia dados através da URI <uri>?dados • Um exemplo de um site que usa GET para enviar informações: http://www.google.com/search?q=servlets • Envia os dados para o servidor como um fluxo de bytes • Dados não aparecem na URL • Útil para grandes formulários em que a informação não deve ser exibida na URL (senhas, por exemplo) • Desvantagem: usuário não pode fazer bookmarks da URL Prof. Rômulo Alencar Programação Servidor em Sistemas Web 46 Protocolo HTTP ❑ O cabeçalho de uma requisição é formado por pares atributos valores separados por dois pontos 19/02/2008 7 Protocolo HTTP Requisição – Descrição – Métodos Envia dados através da URI (tamanho limitado) <uri>?dados Um exemplo de um site que usa GET para enviar informações: http://www.google.com/search?q=unifor Envia os dados para o servidor como um fluxo de bytes Dados não aparecem na URL Útil para grandes formulários a informação não deve ser exibida na URL (senhas, por exemplo) Desvantagem – usuário não pode fazer bookmarks da URL GET POST Protocolo HTTP Requisição – Cabeçalho O cabeçalho de uma requisição é formado por pares atributos valores separados por dois ponto Accept:text/html,text/xml User-Agent:Mozilla/4.0 Accept-Language:pt-br Indica tipos aceitos como resposta Indica o tipo de browser usado pelo cliente Indica a linguagem de preferência do cliente Cabeçalho Prof. Rômulo Alencar Programação Servidor em Sistemas Web 47 Protocolo HTTP ❑ Conteúdo da Requisição ➥ O corpo da requisição é usado para levar ao servidor dados associados à requisição 19/02/2008 8 Protocolo HTTP Requisição – Conteúdo O corpo da requisição é usado para levar ao servidor dados associados à requisição Accept:text/html,text/xml User-Agent:Mozilla/4.0 Accept-Language:pt-br GET /index.html HTTP/1.0 DADOS Conteúdo Protocolo HTTP Resposta Para cada requisição HTTP o servidor sempre envia uma resposta HTTP (mesmo com erros na requisição) Uma resposta HTTP é composta por: Linha de resumo da resposta Zero ou mais linhas de cabeçalho O conteúdo solicitado Linha de resumo Cabeçalho Conteúdo Resposta HTTP Prof. Rômulo Alencar Programação Servidor em Sistemas Web 48 Protocolo HTTP ❑ Resposta da Requisição ➥ Para cada requisição HTTP o servidor sempre envia uma resposta HTTP (mesmo com erros na requisição) ➥ Uma resposta HTTP é composta por: ➫ Linha de resumo da resposta ➫ Zero ou mais linhas de cabeçalho ➫ O conteúdo solicitado 19/02/2008 8 Protocolo HTTP Requisição – Conteúdo O corpo da requisição é usado para levar ao servidor dados associados à requisição Accept:text/html,text/xml User-Agent:Mozilla/4.0 Accept-Language:pt-br GET /index.html HTTP/1.0 DADOS Conteúdo Protocolo HTTP Resposta Para cada requisição HTTP o servidor sempre envia uma resposta HTTP (mesmo com erros na requisição) Uma resposta HTTP é composta por: Linha de resumo da resposta Zero ou mais linhas de cabeçalho O conteúdo solicitado Linha de resumo Cabeçalho Conteúdo Resposta HTTP Prof. Rômulo Alencar Programação Servidor em Sistemas Web 49 Protocolo HTTP ❑ A linha de resumo da resposta possui os seguintes dados: ➥ Versão do protocolo usado ➥ Código do status ➥ Texto de explicação do status ❑ Exemplo de linha de resumo da resposta: 19/02/2008 9 Protocolo HTTP Resposta – Linha de Resumo A linha de resumo da resposta possui os seguintes dados: Versão do protocolo usado Código do status Texto de explicação do status Exemplo de linha de resumo da resposta: HTTP/1.1 200 OK Versão do Protocolo Código de Status Texto do Status Linha de Resumo Protocolo HTTP Resposta – Linha de Resumo – Status Alguns exemplos de status de resposta: 200 OK – A requisição foi bem sucedida 400 Bad Request – O servidor não pode entender a requisição 401 Unauthorized – O dado requisitado não foi autorizado 404 Not Found – Servidor não encontrou o dado requisitado Prof. Rômulo Alencar Programação Servidor em Sistemas Web 50 Protocolo HTTP ❑ Alguns exemplos de status de resposta: ➥ 200 OK – A requisição foi bem sucedida ➥ 400 Bad Request – O servidor não pode entender a requisição ➥ 401 Unauthorized – O dado requisitado não foi autorizado ➥ 404 Not Found – Servidor não encontrou o dado requisitado ❑ O cabeçalho da resposta possui informações extras sobre o resultado e o servidor ❑ O corpo possui os dados requisitados (ex: arquivo HTML) Prof. Rômulo Alencar Programação Servidor em Sistemas Web 51 Protocolo HTTP ❑ Resumo 19/02/2008 10 Protocolo HTTP Resposta – Cabeçalho e Conteúdo O cabeçalho da resposta possui informações extra sobre o resultado e o servidor O corpo possui os dados da requisição (ex: arquivo HTML) Protocolo HTTP Resumo Prof. Rômulo Alencar Programação Servidor em Sistemas Web 52 Aplicações Web ❑ Introdução ➥ No inicio da Web os servidores não forneciam serviços, apenas conteúdo estático: ➫ HTML, imagens, áudio ... ➥ Surgiu a necessidade de páginas dinâmicas, com capacidade de processar serviços ➥ Tecnologias de processamento no cliente: ➫ Applet, JavaScript, Flash ... ➥ Tecnologias de processamento no servidor: ➫ CGI, ASP, PHP, Servlets e JSP Prof. Rômulo Alencar Programação Servidor em Sistemas Web 53 Aplicações Web ❑ Para que processamento no servidor? ➥ Capacidade de processamento ➫ GoogleEarth, Google ... ➥ Capacidade de armazenamento e indexação ➫ YouTube, Google ... ➥ Compartilhamento de informação ➫ Redes sociais, blogs, podcasts ... ➥ Execução de transações seguras à distância ➫ Submarino, Americanas ... ➥ Disponibilização de serviços centralizados ➫ Banco do Brasil, Receita Federal ... Prof. Rômulo Alencar Programação Servidor em Sistemas Web 54 Aplicações Web ❑ Histórico ➥ CGI – Common Gateway Interface ➫ Surgiu como única alternativa de criação de páginas processadas no lado servidor 11/03/2008 2 Para que processamento no servidor? Capacidade de processamento GoogleEarth, Google … Capacidade de armazenamento e indexação YouTube, Google … Compartilhamento de informação Orkut, Blogs, PodCasts … Execução de transações seguras à distância Submarino, Americanas … Disponibilização de serviços centralizados Banco do Brasil, Receita Federal …. Introdução Aplicações Web 3 CGI – Common Gateway Interface Surgiu como única alternativa de criação de páginas processadas no lado servidor Histórico 4 Aplicações Web Prof. Rômulo Alencar Programação Servidor em Sistemas Web 55 Aplicações Web ❑ Histórico ➥ CGI – Common Gateway Interface ➫ Para cada cliente um novo processo é executado ➫ A escalabilidade era um dos principais problemas de CGI 11/03/2008 3 CGI – Common Gateway Interface Para cada cliente um novo processo é executado A escalabilidade era um dos principais problemas de CGI Histórico 5 Aplicações Web Servlets são o correspondente Java à tecnologia CGI Programas servidor Java que recebe requisições e gera respostas HTTP É a porta de entrada para uma aplicação Web implementada em Java Executa dentro de um Servlet Container na máquina servidora O Que São? 6 Servlets Prof. Rômulo Alencar Programação Servidor em Sistemas Web 56 Servlets ❑ O Que São? ➥ Servlets são o correspondente Java à tecnologia CGI ➫ Programa servidor Java que recebe requisições e gera respostas HTTP ➫ É a porta de entrada para uma aplicação Web implementada em Java ➫ Executa dentro de um Servlet Container na máquina servidora Prof. Rômulo Alencar Programação Servidor em Sistemas Web 57 Servlets ❑ Vantagens ➥ Eficiência ➫ Servlets são baseados em pool de threads ➥ Portabilidade ➫ Implementação em Java permite portabilidade ➥ Orientação a objetos ➫ Permite a implementação de aplicação Web totalmente orientada a objetos ➥ Custo ➫ Diversos containers gratuitos ➥ Tecnologia ➫ Acesso fácil a todas as tecnologias Java Prof. Rômulo Alencar Programação Servidor em Sistemas Web 58 Servlets ❑ Modelo ➥ Os Servlet são processados em threads, evitando o problema de escalabilidade de CGI: 11/03/2008 4 Eficiência Servlets são baseados em pool de threads Portabilidade Implementação em Java permite portabilidade Orientação a objetos Permite a implementação de aplicação Web totalmente orientada a objetos Custo Diversos containers gratuitos Tecnologia Acesso fácil a todas tecnologias Java (JDBC, EJB ...) Vantagens 7 Servlets Os Servlet são processados em threads, evitando o problema de escalabilidade de CGI: Modelo 8 Servlets Prof. Rômulo Alencar Programação Servidor em Sistemas Web 59 Servlets ❑ Aplicações Web Java ➥ Aplicação acessada através de um Browser ➥ Formada por Servlets, JSP, bibliotecas, classes de negócio e conteúdo estático (HTML, GIF, JPG,...) ❑ Para executar uma aplicação Web com Servlet é necessário um Servlet Container ❑ Servlet Container: ➥ Implementação de ambiente para execução de Servlet e JSP ➥ Responsável pelo ciclo de vida de um Servlet Prof. Rômulo Alencar Programação Servidor em Sistemas Web 60 Servlets ❑ Servidores Web ➥ Servidores Web são aplicações de gerenciamento de conteúdo capazes de processar rapidamente requisições ➥ Exemplos de Web Servers: ➫ Apache ➫ Microsoft Internet Server (MS-IIS) ➫ Netscape-Enterprise 11/03/2008 5 Aplicações Web Java Aplicação acessada através de um Browser Formada por Servlets, JSP, bibliotecas, classes de negócio e conteúdo estático (HTML,GIF,JPG,...) Para executar uma aplicação Web com Servlet é necessário um Servlet Container Servlet Container: Implementação de ambiente para execução de Servlet e JSP Responsável pelo ciclo de vida de um Servlet Aplicação Web 9 Servlets Servidores Web são aplicações de gerenciamento de conteúdo capazes de processar rapidamente requisições Exemplos de Web Servers: Apache Microsoft Internet Server (MS-IIS) Netscape-Enterprise Servidores Web 10 Servlets Web Browser Cliente Servidor kj abscja sndklas alsjcnlaskc lknasclk ascascascaa scsc scsascsacasc HTML HTTP Request HTTP Request HTTP Response HTTP Response Prof. Rômulo Alencar Programação Servidor em Sistemas Web 61 Servlets ❑ Servlet Containers ➥ Servlet Containers são aplicações capazes de executar e gerenciar os Servlets HTTP ➥ ExemplosdeServletContainers: ➫ Tomcat ➫ Jetty ➫ Resin 11/03/2008 6 Servidor Servlet Container Servlet container são aplicações capazes de executar e gerenciar os Servlets Exemplos de Servlet Containers: Tomcat Jetty Resin Servlet Containers 11 Servlets Web Browser Cliente kj abscja sndklas alsjcnlaskc lknasclk ascascascaa scsc scsascsacasc HTML HTTP Request HTTP Response Servlet Tomcat é um servidor open source desenvolvido no projeto Jakarta. É “reference implementation” para as especificações Servlet e JSP. Robusto: utilizado tanto para desenvolvimento quanto em servidores. Integração com várias IDEs (Ex: Eclipse) Tomcat 12 Servlets http://tomcat.apache.org/ Prof. Rômulo Alencar Programação Servidor em Sistemas Web 62 Servlets ❑ API ➥ Coleção de classes e interfaces usadas na implementação de uma aplicação com Servlet ➫ javax.servlet ➫ javax.servlet.http ➫ javax.servlet.jsp ➫ javax.servlet.annotation ➥ Esconde do desenvolvedor detalhes que são resolvidos pelo Servlet Container ➫ Como o Servlet é carregado e executado ➫ Execução de mútiplas requisições paralelas ➫ Implementação do protocolo HTTP ➥ Tecnologia de programação server-side portável ➫ A API Servlet é uma especificação da Sun na linguagem Java, atualmente na versão 3.0 Prof. Rômulo Alencar Programação Servidor em Sistemas Web 63 Servlets ❑ API import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value="/Hello", name="HelloWorld") public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello World!!!</h1>"); out.println("</body></html>"); out.close(); } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 64 Servlets ❑ API import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value="/Hello", name="HelloWorld") public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello World!!!</h1>"); out.println("</body></html>"); out.close(); } } Importando as classes usadas no Servlet Prof. Rômulo Alencar Programação Servidor em Sistemas Web 65 Servlets ❑ API import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value="/Hello", name="HelloWorld") public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello World!!!</h1>"); out.println("</body></html>"); out.close(); } } Atribuindo uma URL e um nome (opcional) ao Servlet Prof. Rômulo Alencar Programação Servidor em Sistemas Web 66 Servlets ❑ API import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value="/Hello", name="HelloWorld") public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello World!!!</h1>"); out.println("</body></html>"); out.close(); } } Para implementar um Servlet, herdar da classe HttpServlet Prof. Rômulo Alencar Programação Servidor em Sistemas Web 67 Servlets ❑ API import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value="/Hello", name="HelloWorld") public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello World!!!</h1>"); out.println("</body></html>"); out.close(); } } Método que atende a uma requisição GET Prof. Rômulo Alencar Programação Servidor em Sistemas Web 68 Servlets ❑ API import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value="/Hello", name="HelloWorld") public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello World!!!</h1>"); out.println("</body></html>"); out.close(); } } Especifica o tipo da resposta e obtém um Writer para escrevê-la Prof. Rômulo Alencar Programação Servidor em Sistemas Web 69 Servlets ❑ API import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value="/Hello", name="HelloWorld") public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello World!!!</h1>"); out.println("</body></html>"); out.close(); } } Escreve a resposta e fecha o Writer Prof. Rômulo Alencar Programação Servidor em Sistemas Web 70 Servlets ❑ Execução ➥ Para executar um Servlet é necessário instalá-lo no Servlet container, dentro de um contexto de aplicação Web ➥ Uma aplicação Web é composta por: ➫ Um diretório público (contexto da aplicação) ➱ Arquivos de acesso publico (html, gif, applet ...) ➫ O arquivo WEB-INF\web.xml ➱ Descritor da aplicação web ➫ O diretório WEB-INF\classes ➱ Classes da aplicação web ➫ O diretório WEB-INF\lib ➱ Bibliotecas usadas pela aplicação web Prof. Rômulo Alencar Programação Servidor em Sistemas Web 71 Servlets ❑ Execução ➥ Para executar o Servlet criado é preciso: ➫ Criar um contexto para a aplicação Web ➫ Compilar a classe HelloWorld.java e copiar a classe gerada (HelloWorld.class) para WEB-INF\classes ➫ Escrever o arquivo de configuração web.xml e copiar para WEB-INF ➫ Inicializar o Servlet Container e chamar o Servlet a partir de um browser ➥ Esse trabalho é facilitado pelo uso de ferramentas de desenvolvimento (IDEs) Prof. Rômulo Alencar Programação Servidor em Sistemas Web 72 Servlets ❑ Protocolo HTTP ➥ Em uma aplicação Web o cliente envia uma requisição através de um método do protocolo HTTP ➥ O servidor responde à requisição, retornando uma resposta HTTP ➥ A classe HttpServlet é o objeto Java capaz e receber as requisições HTTP e implementar um serviço Web 18/03/2008 1 Prof. Rafael Garcia Barbosa – API Servlets – Passagem de Parâmetros Aula 9 Em uma aplicação Web o cliente envia uma requisição através de um método do protocolo HTTP O servidor responde à requisição, retornando uma resposta HTTP A classe HttpServlet é o objeto Java capaz e receber as requisições HTTP e implementar um serviço Web Protocolo HTTP 2 API Servlets Prof. Rômulo Alencar Programação Servidor em Sistemas Web 73 Servlets ❑ Classe HttpServlet ➥ Para se implementar um Servlet, deve-se sobrescrever os métodos herdados da classe HttpServlet: protected void doXXX(HttpServletRequest request, HttpServletResponse response) ➥ Pode-se implementar o doXXX para os métodos de requisições HTTP: ➫ GET, POST, HEAD, DELETE, PUT ... ➫ Os métodos GET e POST são usados em aplicações Web ➥ Para cada requisição o container gera objetos que representam a requisição e a resposta e passam sua referência para o Servlet Prof. Rômulo Alencar Programação Servidor em Sistemas Web 74 Servlets ❑ Requisição – Protocolo HTTP ➥ Ao realizar uma requisição para um servidor o cliente (browser) envia informações: GET /index.jsp HTTP/1.0 User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows 95) Accept: image/gif, image/jpeg, text/*, */* ➥ Uma requisição pode conter também parâmetros: ➫ GET: Parâmetros são enviados na URL ➫ POST: Parâmetros são enviados no corpo da requisição Prof. Rômulo Alencar Programação Servidor em Sistemas Web 75 Servlets ❑ Requisição – Classe HttpServletRequest ➥ Classe que encapsula dados da requisição HTTP passada pelo container ao Servlet ➥ Para obter os parâmetros da requisição: public String getParameter(String name) public String[] getParameterValues(String name) public Enumeration getParameterNames() ➥ Para obter informações gerais da requisição: public String getRequestURL() public String getHeader(String name) Prof. Rômulo Alencar Programação Servidor em Sistemas Web 76 Servlets ❑ Requisição – Exemplo ➥ Os parâmetros que são enviados ao Servlet são passados em formulários HTML: <html> <head><title> Servlet Java Teste </title></head> <body> <form action="paramServlet" method = "GET"> <p>Nome: <input type="text" size="20" name="nome"/></p> <p>E-mail: <input type="text" size="20" name="email"/></p> <p>Password: <input type="password" size="20" name="pass"/></p> <p><input type="submit" value="Registro"/></p> </form> </body> </html> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 77 Servlets ❑ Requisição – Exemplo ➥ Código-fonte do Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value="/paramServlet") public class ParametroServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body><ul>"); out.println("<li>Param 1:" + request.getParameter("nome")); out.println("<li>Param 2:" + request.getParameter("email")); out.println("<li>Param 3:" + request.getParameter("pass")); out.println("</ul></body></html>"); out.close(); } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 78 Servlets ❑ Requisição – Exemplo 18/03/2008 4 Os parâmetros que são enviados ao Servlet são passados em formulários html Requisição – Exemplo de Servlet com Parâmetros 7 API Servlets <html> <head> <title> Servlet Java Teste </title> </head> <body> <form action=“paramServlet” method = “GET”> <p> Nome: <input type=“text” size=“20” name=“nome” /></p> <p> E-mail: <input type=“text” size=“20” name=“email” /></p> <p> Password: <input type=“password” size=“20” name=“pass” /> <p><input type=“submit” value=“Registro” /></p> </form> </body> </html> Requisição – Exemplo de Servlet com Parâmetros 8 API Servlets 18/03/2008 5 Requisição – Exemplo de Servlet com Parâmetros 9 API Servlets import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ParametroServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><BODY><UL>"); out.println( "<LI> Param 1:"+request.getParameter("nome")); out.println( "<LI> Param 2:"+request.getParameter("email")); out.println( "<LI> Param 3:"+request.getParameter("pass")); out.println("</UL></BODY></HTML>"); out.close(); } } Nomes dados aos elementos de input do formulário HTML. Requisição – Exemplo de Servlet com Parâmetros 10 API Servlets • Param 1: Jose • Param 2: ze@google.com • Param 3: maria Prof. Rômulo Alencar Programação Servidor em Sistemas Web 79 Servlets ❑ Requisição – Exemplo 18/03/2008 6 Requisição – Exemplo de Servlet com Parâmetros 11 API Servlets Requisição – Exemplo de Servlet com Parâmetros 12 API Servlets public class ParametrosServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<HTML><H1 ALIGN=CENTER> Parametros da requisição </H1>" + "<TABLE BORDER=1 ALIGN=CENTER>" + "<TR><TD>Nome do parametro</TD>" + <TD>Valor do parametro</TD></TR>"); //Recupera o nome de todos os parametros Enumeration names = request.getParameterNames(); //Relaciona cada uma dos parametros com seu valor while (names.hasMoreElements()) { String paramName = (String) names.nextElement(); out.println("<TR><TD>" + paramName + "</TD>"); out.println("<TD>"+ request.getParameter(paramName) +"</TD></TR>"); } out.println("</TABLE></BODY></HTML>"); } } ze@google.com Prof. Rômulo Alencar Programação Servidor em Sistemas Web 80 Servlets ❑ Exemplo public class ParametrosServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<html><h1 align=center> Parametros da requisição </h1>" + "<table border=1 align=center>" + "<tr><td>Nome do parametro</td>" + "<td>Valor do parametro</td></tr>"); //Recupera o nome de todos os parametros Enumeration names = request.getParameterNames(); //Relaciona cada uma dos parametros com seu valor while (names.hasMoreElements()) { String paramName = (String) names.nextElement(); out.println("<tr><td>" + paramName + "</td>"); out.println("<td>"+ request.getParameter(paramName) +"</td></tr>"); } out.println("</table></body></html>"); } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 81 Servlets ❑ Requisição – Exemplo 18/03/2008 7 Requisição – Exemplo de Servlet com Parâmetros 13 API Servlets A resposta a uma requisição HTTP possui status e possível conteúdo: Alguns códigos de resposta HTTP: 200 Æ Sucesso no atendimento da requisição 404 Æ Recurso não existe no servidor 405 Æ Método não autorizado Resposta – Protocolo HTTP 14 API Servlets HTTP/1.0 200 OK Date: Saturday, 23-May-00 03:25:12 GMT Server: Tomcat Web Server/3.2 MIME-version: 1.0 Content-type: text/html Content-length: 1029 Last-modified: Thursday, 7-May-00 12:15:35 GMT Prof. Rômulo Alencar Programação Servidor em Sistemas Web 82 Servlets ❑ Resposta – Protocolo HTTP ➥ A resposta a uma requisição HTTP possui status e possível conteúdo: HTTP/1.0 200 OK Date: Saturday, 23-May-00 03:25:12 GMT Server: Tomcat Web Server/3.2 MIME-version: 1.0 Content-type: text/html Content-length: 1029 Last-modified: Thursday, 7-May-00 12:15:35 GMT ➥ Alguns códigos de resposta HTTP ➫ 200: Sucesso no atendimento da requisição ➫ 404: Recurso não existe no servidor ➫ 405: Método não autorizado Prof. Rômulo Alencar Programação Servidor em Sistemas Web 83 Servlets ❑ Resposta – Classe HttpServletResponse ➥ Classe que encapsula dados da resposta HTTP ➥ Possui métodos para obter Stream ou Writer para escrever o resultado para o usuário: public PrintWriter getWriter() public ServletOutputStream getOutputStream() ➥ Permite especificar o tipo de resultado: public void setContentType(String type) ➫ O tipo de resultado deve ser um tipo MIME: ➱ text/html, image/gif, application/jar ... ➫ Se o contentType não for definido será assumido o tipo “text/html” Prof. Rômulo Alencar Programação Servidor em Sistemas Web 84 Servlets ❑ Resposta – Classe HttpServletResponse import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello World!!!</h1>"); out.println("</body></html>"); out.close(); } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 85 Servlets ❑ Resposta – Gerando Respostas de Erro ➥ Muitos dos erros da comunicação HTTP são tratados pelo container e retornados ao cliente (browser): ➫ Exemplo: 404: Not found ➥ Quando ocorrem erros internos da aplicação o desenvolvedor deve informa ́-los ao cliente ➥ A API Servlet possui mecanismos para notificar o cliente no caso de erros na execução de uma requisição Prof. Rômulo Alencar Programação Servidor em Sistemas Web 86 Servlets ❑ Resposta – Gerando Respostas de Erro ➥ A classe HttpServletResponse possui os métodos: ➫ void sendError(int ecode) ➱ Indica o código HTTP do erro ocorrido ➫ void sendError(int ecode, String msg) ➱ Indica o código HTTP do erro ocorrido e uma mensagem ➥ A classe HttpServletResponse possui constantes que representam códigos de erro do protocolo HTTP ➫ Exemplos: ➱ SC_INTERNAL_SERVER_ERROR ➧ Indica que houve um erro interno no servidor ➱ SC_FORBIDDEN ➧ Indica que a requisição foi negada pelo servidor Prof. Rômulo Alencar Programação Servidor em Sistemas Web 87 Servlets ❑ Resposta – Gerando Respostas de Erro public class TransferenciaServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int origem = Integer.parseInt(req.getParameter("origem")); int destino = Integer.parseInt(req.getParameter("destino")); double valor = Double.parseDouble(req.getParameter("valor")); // Recuperanco as contas do BD Conta c1 = recuperaContaBD(origem); Conta c2 = recuperaContaBD(destino); if (c1.getSaldo() < valor) { // Se houver erro na trasnferência informar ao cliente response.sendError(HttpServletResponse.SC_FORBIDDEN); } else { c1.debitar(valor); c2.creditar(valor); } } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 88 Servlets ❑ Resposta – Gerando Respostas de Erro ➥ Os erros HTTP passados pelo servidor são mostrados pelo browser ➫ Erro SC_NOT_FOUND (404) 18/03/2008 10 Resposta – Gerando Respostas de Erro 19 API Servlets public class TransferenciaServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { int origem = Integer.parseInt(req.getParameter("origem")); int destino = Integer.parseInt(req.getParameter("destino")); double valor = Double.parseDouble(req.getParameter("valor")); // Recuperanco as contas do BD Conta c1 = recuperaContaBD(origem); Conta c2 = recuperaContaBD(destino); if (c1.getSaldo() < valor) { // Se houver erro na trasnferência informar ao cliente response.sendError(HttpServletResponse.SC_FORBIDDEN); } else { c1.debitar(valor); c2.creditar(valor); } } } Os erro HTTP passados pelo servidor são mostrados pelo Browser Erro SC_NOT_FOUND (404) Resposta – Gerando Respostas de Erro 20 API Servlets Prof. Rômulo Alencar Programação Servidor em Sistemas Web 89 Servlets ❑ Resposta – Gerando Respostas de Erro 18/03/2008 11 Resposta – Gerando Respostas de Erro 21 API Servlets Web Browser HTTP request HTTP response 403 SC_FORBIDDEN Servlet Container Server www.xyz.com TransferenciaServlet O servidor manda o erro 403 para o cliente ERRO: 403 Para tornar a aplicação mais amigável, os erros da aplicação podem ser redirecionar para páginas especificadas pelo desenvolvedor A especificação do redirecionamento é feita no arquivos web.xml através da tag <error-page> Resposta – Gerando Respostas de Erro 22 API Servlets Prof. Rômulo Alencar Programação Servidor em Sistemas Web 90 Servlets ❑ Resposta – Gerando Respostas de Erro ➥ Para tornar a aplicação mais amigável, os erros da aplicação podem ser redirecionar para páginas especificadas pelo desenvolvedor ➥ A especificação do redirecionamento é feita no arquivo web.xml através da tag ➫ <error-page> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 91 Servlets ❑ Resposta – Gerando Respostas de Erro ➥ web.xml <web-app> ... <error-page> <error-code>403</error-code> <location>/errorpages/semfundos.html</location> </error-page> <error-page> <exception-type>java.sql.SQLException</exception-type> <location>/errorpages/erroBD.html</location> </error-page> </web-app> Prof. Rômulo Alencar Programação Servidor em Sistemas Web 92 Servlets ❑ Resposta – Gerando Respostas de Erro 18/03/2008 13 Resposta – Gerando Respostas de Erro 25 API Servlets Web Browser HTTP response Servlet Container Server www.xyz.com TransferenciaServlet O servidor manda a página indicada para o erro 403 ERRO: 403 semfundos.html HTTP request Desenvolva a Aplicação Web abaixo: Ao informar a data de nascimento e o sistema indica quais dias da semana irá cair o seu aniversário nos próximos 10 anos Caso a data seja inválida a aplicação deve encaminhar o usuário para uma HTML informando que a data é inválida (utilize mapeamento de páginas de erro no web.xml) 26 Exercícios Ano Dia Idade 2004 Seg 27 2005 Ter 28 2006 Qua 29 2007 Qui 30 2008 Sab 31 2009 Dom 32 2010 Seg 33 2011 Ter 34 2012 Qui 35 2013 Sex 36 Prof. Rômulo Alencar Programação Servidor em Sistemas Web 93 Servlets ❑ Ciclo de Vida ➥ Introdução ➫ A API Servlet foi pensada para desenvolvimento de aplicações cliente-servidor genéricas, não apenas HTTP ➫ Um Servlet é uma classe que representa o servidor, cuja instância é capaz de prover um serviço para o cliente ➫ O Servlet HTTP, representado pela classe HttpServlet, é a implementação do protocolo HTTP sobre a API Servlet ➱ pacote javax.servlet.http Prof. Rômulo Alencar Programação Servidor em Sistemas Web 94 Servlets ❑ Ciclo de Vida ➥ Introdução ➫ O Servlet genérico GenericServlet é independete de protocolo ➫ A JEE fornece a implementação Servlet para o protocolo HTTP ➫ Outros protocolos para comunicação cliente- servidor podem ser implementados 25/03/2008 2 A API Servlet foi pensada para desenvolvimento de aplicações cliente-servidor genéricas, não apenas HTTP Um Servlet é uma classe que representa o servidor, cuja instância é capaz de prover um serviço para o cliente O Servlet HTTP, representado pela classe HttpServlet, é a implementação do protocolo HTTP sobre a API Servlet pacote javax.servlet.http Introdução 3 Ciclo de Vida Ciclo de Vida O Servlet genérico GenericServlet é independete de protocolo A JEE fornece a implementação Servlet para o protocolo HTTP Outros protocolos para comunicação cliente- servidor podem ser implementados 4 Introdução Prof. Rômulo Alencar Programação Servidor em Sistemas Web 95 Servlets ❑ Ciclo de Vida ➥ Classe GenericServlet ➫ A classe GenericServlet possui os métodos: ➱ public void init() ➧ Chamado quando o Servlet é criado pelo container ➱ public void service(ServletRequest request, ServletResponse response) ➧ Chamado cada vez que um cliente requisita serviço ➱ public void destroy() ➧ Chamado quando o Servlet é destruído pelo container ➫ A classe HttpServlet implementa o método service(): ➱ Executa os método doGet() e doPost() de acordo com o tipo de requisição realizada Prof. Rômulo Alencar Programação Servidor em Sistemas Web 96 Servlets ❑ Ciclo de Vida ➥ Etapas ➫ As instâncias dos Servlet são controladas pelo container, que cria e destrói as instâncias de acordo com a demanda ➫ Se os Servlets são criados e controlados pelo container como podem trocar dados e trabalhar colaborativamente? 25/03/2008 3 A classe GenericServlet possui os métodos: public void init( ) Chamado quando o Servlet é criado pelo container public void service(ServletRequest req, ServletResponse res) Chamado cada vez que um cliente requisita serviço public void destroy( ) Chamado quando o Servlet é destruído pelo container A classe HttpServlet implementa o método service( ): Executa os método doGet( ) e doPost( ) de acordo com o tipo de requisição realizada Classe GenericServlet 5 Ciclo de Vida As instâncias dos Servlet são controladas pelo container, que cria e destrói as instâncias de acordo com a demanda de serviço: Se os Servlets são criados e controlados pelo container como podem trocar dados e trabalhar colaborativamente? Etapas 6 Ciclo de Vida Prof. Rômulo Alencar Programação Servidor em Sistemas Web 97 Servlets ❑ Redirecionamento ➥ Motivação ➫ Um recurso bastante útil no controle de fluxo de uma aplicação Web é o redirecionamento ➱ Através do redirecionamento é possível compartilhar informações ➫ Redirecionar significa encaminhar uma requisição para outra URL ➫ A classe HttpServletResponse possui um método que redireciona o browser: ➱ void sendRedirect(String location) ➫ Pode ser redirecionado para qualquer recurso, estático (HTML) ou dinâmico (Servlet), mesmo externo à aplicação Prof. Rômulo Alencar Programação Servidor em Sistemas Web 98 Servlets ❑ Redirecionamento ➥ sendRedirect public class CadastroUsuarioServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); try { String nome = request.getParameter("nome"); String email = request.getParameter("email"); int idade = Integer.parseInt(request.getParameter("idade")); UsuarioDAO uDao = new UsuarioDAO(); Usuario u = new Usuario(nome, email, idade); uDao.registra(u); response.sendRedirect("sucesso.html"); } catch (Exception ex) { response.sendRedirect("cadastroFalhou.html"); } } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 99 Servlets ❑ Redirecionamento ➥ sendRedirect ➫ O método sendRedirect retorna para o browser código HTTP solicitando nova requisição 25/03/2008 5 SendRedirect 9 Redirecionamento public class CadastroUsuarioServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); try { String nome = request.getParameter("nome"); String email = request.getParameter("email"); int idade =Integer.parseInt(request.getParameter("idade")); UsuarioDAO uDao = new UsuarioDAO(); Usuario u = new Usuario(nome, email, idade); uDao.registra(u); response.sendRedirect("sucesso.html"); } catch (Exception ex) { response.sendRedirect("cadastroFalhou.html"); } } } O método sendRedirect retorna para o browser código HTTP solicitando nova requisição SendRedirect 10 Redirecionamento Web Browser HTTP request HTTP response redirect=successo.html Servlet Container Server www.xyz.com Servlet successo.html HTTP request HTTP response Nova requisição deve ser realizada Prof. Rômulo Alencar Programação Servidor em Sistemas Web 100 Servlets ❑ Redirecionamento ➥ sendRedirect ➫ Vantagem ➱ Pode redirecionar para outro servidor ou aplicação Web ➫ Problemas do uso do sendRedirect: ➱ Será mais lento já que envolve nova requisição do Browser ➱ Parâmetros e atributos da requisição são perdidos ➫ Solução: ➱ Existe outra forma de redirecionar sem o cliente fazer uma nova requisição ➱ Um Servlet pode delegar uma requisição através da classe: ➧ javax.servlet.RequestDispatcher Prof. Rômulo Alencar Programação Servidor em Sistemas Web 101 Servlets ❑ Redirecionamento ➥ RequestDispatcher ➫ A classe ServletRequest pode ser usada para obter um dispatcher: ➱ public RequestDispatcher getRequestDispatcher(String path) ➫ O RequestDispatcher possui os métodos: ➱ void forward(ServletRequest request, ServletResponse response) ➧ Redireciona em definitivo para o Servlet/JSP indicado ➱ void include(ServletRequest reqquest, ServletResponse response) ➧ Inclui na resposta o conteúdo gerado pelo Servlet/JSP indicado. Prof. Rômulo Alencar Programação Servidor em Sistemas Web 102 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Forward public class ListaUsuarioServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); try{ UsuarioDAO uDao = new UsuarioDAO(); List users = uDao.lista(); out.println("<html><body>"); out.println("<table border=\"1\">"); for(int i = 0; i< users.size(); i++) { Usuario u = (Usuario) users.get(i); out.println("<tr><td>" + u.getNome() + "</td>"); out.println("<td>" + u.getEmail() + "</td>"); out.println("<td>" + u.getIdade() + "</td></tr>"); } out.println("</table></body></html>"); } catch(Exception ex) { out.println("<h1>Erro</h1>"); } } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 103 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Forward ➫ O Servlet ListaUsuarioServlet pode ser utilizado para realizar uma listagem simples dos usuários: 25/03/2008 8 O Servlet ListaUsuarioServlet pode ser utilizado para realizar uma listagem simples dos usuários: RequestDispatcher – Forward – Ex Listar Usuários 15 Redirecionamento Web Browser HTTP request HTTP response Servlet Container Server www.xyz.com ListaUsuarioServlet HMTL RequestDispatcher – Forward – Ex Cadastrar Usuário 16 Redirecionamento Prof. Rômulo Alencar Programação Servidor em Sistemas Web 104 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Forward public class CadastroUsuarioServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { String nome = request.getParameter("nome"); String email = request.getParameter("email"); int idade = Integer.parseInt(request.getParameter("idade")); UsuarioDAO uDao = new UsuarioDAO(); Usuario u = new Usuario(nome,email,idade); uDao.registra(u); RequestDispatcher rd = request.getRequestDispatcher("/ListaUsuarioServlet"); rd.forward(request, response); } catch(Exception ex) { response.sendRedirect("cadastroFalhou.html"); } } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 105 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Forward ➫ Quando o RequestDispatcher é utilizado, o redirecionamento é transparente para o cliente: 25/03/2008 9 RequestDispatcher – Forward – Ex Cadastrar Usuário 17 Redirecionamento public class CadastroUsuarioServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{ String nome = request.getParameter("nome"); String email = request.getParameter("email"); int idade = Integer.parseInt(request.getParameter("idade")); UsuarioDAO uDao = new UsuarioDAO(); Usuario u = new Usuario(nome,email,idade); uDao.registra(u); // RequestDispatcher para o Servlet que lista os usuarios… RequestDispatcher rd = request.getRequestDispatcher("/ListaUsuarioServlet" ); //Encaminhando a requisição … rd.forward( request, response ); } catch(Exception ex) { response.sendRedirect("cadastroFalhou.html"); } } } Quando o RequestDispatcher é utilizado, o redirecionamento é transparente para o cliente: RequestDispatcher – Forward – Ex Cadastrar Usuário 18 Redirecionamento Web Browser HTTP request HTTP response Servlet Container Server www.xyz.com CadastroUsuarioServlet ListaUsuarioServlet HMTL forward Prof. Rômulo Alencar Programação Servidor em Sistemas Web 106 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Forward ➫ A implementação de um Servlet de busca poderia reaproveitar a listagem de usuários: 25/03/2008 10 Implementar nova funcionalidade de busca de usuário por nome: RequestDispatcher – Forward – Ex Buscar Usuário 19 Redirecionamento A implementação de um Servlet de busca poderia reaproveitar a listagem de usuários: RequestDispatcher – Forward – Ex Buscar Usuário 20 Redirecionamento Web Browser HTTP request HTTP response Servlet Container Server www.xyz.com BuscaUsuarioServlet ListaUsuarioServlet HMTL forward CadastraUsuarioServlet Prof. Rômulo Alencar Programação Servidor em Sistemas Web 107 Servlets ❑ Redirecionamento ➥ Na API Servlet, é possível disponibilizar informações na requisição como atributos ➥ Os atributos são manipulados pelos métodos da classe HttpServletRequest: ➫ public void setAttribute(String nome, Object o) ➱ Insere novo atributo ➫ public Object getAttribute(String nome) ➱ Recupera um atributo ➫ public void removeAttribute(String nome) ➱ Remove um atributo ➥ Os atributos disponibilizados na requisição são acessíveis a todos os Servlets que participam da requisição Prof. Rômulo Alencar Programação Servidor em Sistemas Web 108 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Forward public class BuscaUsuarioServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{ String nome = request.getParameter("nome"); UsuarioDAO uDao = new UsuarioDAO(); List users = uDao.busca(nome); RequestDispatcher rd = request.getRequestDispatcher("/ListaUsuarioServlet"); request.setAttribute("usuarios", users); rd.forward( request, response ); } catch(Exception ex) { out.println("<h1>Erro</h1>"); } } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 109 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Forward public class ListaUsuarioServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { PrintWriter out = response.getWriter(); List users = (List) request.getAttribute("usuarios"); try{ if(users == null) { UsuarioDAO uDao = new UsuarioDAO(); users = uDao.lista(); } ... } catch(Exception ex) { out.println("<h1>Erro</h1>"); } } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 110 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Forward ➫ BuscaUsuarioServlet disponibiliza a lista de usuários para ListaUsuarioServlet: 25/03/2008 13 BuscaUsuarioServlet disponibiliza a lista de usuários para ListaUsuarioServlet: RequestDispatcher – Forward – Ex Buscar Usuário 25 Redirecionamento Web Browser HTTP request HTTP response Servlet Container Server www.xyz.com BuscaUsuarioServlet ListaUsuarioServlet HMTL forward usuarios RequestDispatcher – Include 26 Redirecionamento public class ListaUsuarioServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) { response.setContentType("text/html"); PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); RequestDispatcher rd = request.getRequestDispatcher("/Menu.html" ); rd.include( request, response ); out.println( “Meu nome é Rafael Barbosa” ); rd = request.getRequestDispatcher("/Bottom.html" ); rd.include( request, response ); } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 111 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Include public class ListaUsuarioServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) { response.setContentType("text/html"); PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); RequestDispatcher rd = request.getRequestDispatcher("/Menu.html"); rd.include(request, response); out.println("Meu nome é João da Silva"); rd = request.getRequestDispatcher("/Bottom.html"); rd.include(request, response); } } Prof. Rômulo Alencar Programação Servidor em Sistemas Web 112 Servlets ❑ Redirecionamento ➥ RequestDispatcher – Include 25/03/2008 14 RequestDispatcher – Include 27 Redirecionamento Web Browser HTTP request HTTP response Servlet Container Server www.xyz.com ListaUsuarioServlet HMTL Menu.html kj abscja alsjcnlaskc ascascasc scsascsac include Bottom.html Implemente um servlet (CriacaoServlet) que cria um arraylist contendo clientes (nome, idade, telefone, email), adiciona-o como atributo da requisição e redireciona para um outro servlet (ExibicaoServlet) Implemente um segundo servlet (ExibicaoServlet) que obtém o arraylist definido pelo primeiro servlet e exibe-o em uma página Durante a criação da página, inclua dois arquivos (header.html e footer.html) 28 Exercício Prof. Rômulo Alencar Programação Servidor em Sistemas Web 113 Servlets ❑ Sessões ➥ Gerenciamento ➫ HTTP é um protocolo stateless, ou seja, não mantém estado das requisições ➫ Após cada requisição o servidor desconecta e “esquece” que o cliente existe ➫ Carregar uma página envolve várias requisições, cada requisição é um evento independente 27/03/2008 2 HTTP é um protocolo stateless, ou seja, não mantém estado das requisições Após cada requisição o servidor desconecta e “esquece” que o cliente existe Carregar uma página envolve várias requisições, cada requisição é um evento independente Gerenciamento 3 Sessões Muitas vezes é necessário gerenciar as várias submissões/navegação de um usuário Exemplo típico: carrinho de compras no www.submarino.com.br Conclusão: É necessário criar um mecanismo para identificar e agrupar várias interações do usuário com a aplicação Web. Gerenciamento 4 Sessões Prof. Rômulo Alencar Programação Servidor em Sistemas Web 114 Servlets ❑ Sessões ➥ Gerenciamento ➫ Muitas vezes é necessário gerenciar as várias submissões/navegação de um usuário ➫ Exemplo típico: carrinho de compras no www.submarino.com.br ➫ Conclusão: É necessário criar um mecanismo para identificar e agrupar várias interações do usuário com a aplicação Web. Prof. Rômulo Alencar Programação Servidor em Sistemas Web 115 Servlets ❑ Sessões ➥ Gerenciamento ➫ Os servlet containers facilitam o gerenciamento de sessões ➫ Uma sessão é um agrupamento de requisições de um único usuário, na qual pode-se armazenar informações sobre esse usuário 27/03/2008 3 Os servlet containers facilitam o gerenciamento de sessões Uma sessão é um agrupamento de requisições de um único usuário, na qual pode-se armazenar informações sobre esse usuário Gerenciamento 5 Sessões A classe HttpSession representa a sessão a qual pertence uma requisição Uma sessão pode ser vista como uma área da memória reservada para um usuário Cada usuário possuirá sua própria sessão, que é representada por uma instância de HttpSession Para obter a sessão usar os métodos de HttpServletRequest: public HttpSession getSession( ) O container é responsável pela criação das sessões de cada usuário e pelo seu gerenciamento Classe HttpSession 6 Sessões Prof. Rômulo Alencar Programação Servidor em Sistemas Web 116 Servlets ❑ Sessões ➥ Classe HttpSession ➫ A classe HttpSession representa a sessão à qual pertence uma requisição ➫ Uma sessão pode ser vista como uma área da memória reservada para um usuário ➫ Cada usuário possuirá sua própria sessão, que é representada por uma instância de HttpSession ➫ Para obter a sessão usar os métodos de HttpServletRequest: ➱ public HttpSession getSession() ➫ O container é responsável pela criação das sessões de cada usuário e pelo seu gerenciamento Prof. Rômulo Alencar Programação Servidor em Sistemas Web 117 Servlets ❑ Sessões ➥ Classe HttpSession – Métodos ➥ Para armazenar objetos na sessão, usar os métodos de HttpSession: ➫ public void setAttribute(String nome, Object o) ➱ Insere novo atributo ➫ public Object getAttribute(String nome) ➱ Recupera um atributo ➫ public void removeAttribute(String nome) ➱ Remove um atributo OBS: O gerenciamento das sessões pelo container pode envolver serialização, por isso é recomendado que os objetos inseridos na sessão implementem a interface java.io.Serializable Prof. Rômulo Alencar Programação Servidor em Sistemas Web 118 Servlets ❑ Sessões ➥ Exemplo – Carrinho de Compras ➫ Permite adicionar produtos ao carrinho de compras: 27/03/2008 4 Para armazenar objetos na sessão, usar os métodos de HttpSession: public void setAttribute(String nome, Object o) Insere novo atributo public Object getAttribute(String nome) Recupera um atributo public void removeAttribute(String nome) Remove um atributo Classe HttpSession – Métodos 7 Sessões OBS: O gerenciamento das sessões pelo container pode envolver serialização, por isso é recomendado que os objetos inseridos na sessão implementem a interface java.io.Serializable Permite adicionar produtos ao carrinho de compras: Exemplo – Carrinho de Compras 8 Sessões Prof. Rômulo Alencar Programação Servidor em Sistemas Web 119 Servlets ❑ Sessões ➥ Exemplo – Carrinho de Compras public class CarrinhoServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response)
Compartilhar