Buscar

Programacao Servidor em Sistemas Web - Slides 2015.2

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)

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais