10/7/2010
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
[email protected]
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
1
Objetivos







Fornecer uma visão geral do funcionamento de sistemas na Web e os
protocolos envolvidos
Introduzir o paradigma da programação para a Internet
Conceituar as arquiteturas de 2, 3 e n camadas, apresentando as
diferenças e, principalmente, as vantagens que elas oferecem;
Qualificar profissionais para o desenvolvimento de aplicações voltadas
para a Internet/Intranet e que sejam disponibilizadas através de um
browser
Apresentar padrões de projeto para melhor estruturação dos sistemas na
web;
Apresentar as tecnologias mais empregadas no desenvolvimento de
sistemas para web, inclusive com o uso de frameworks;
Introduzir conceitos de segurança associados ao uso de sistemas na
web.
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
2
1
10/7/2010
Ementa











Aspectos históricos da Internet.
Sistemas Multimídia.
Análise de tendências.
O desenvolvimento de projetos em WEB. Linguagens e ambientes de
Concepção de projeto de sistemas multimídia interativos na WEB.
Projeto gráfico avançado para WEB.
Inovações de projeto e utilização de ferramentas.
Famílias de linguagens para produção em WEB.
Animação gráfica para WEB. Principais conceitos de programação
dinâmica para a Web
Web.
Desenvolvimento de aplicação dinâmica.
Aplicações multi-camadas.
Aplicações WEB server side e client side.
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
3
Programa

Introdução aos sistemas Web



Aplicações WEB



Internet: um resumo histórico
O ambiente web: o protocolo HTTP
Sistemas Estáticos x Dinâmicos
Tecnologias para desenvolvimento de sistemas dinâmicos na Web: CGI,ASP, Servlets,
JSP, PHP, outras
Plataforma Java




Java EE
Camadas em Aplicações Distribuídas
Arquitetura JAVA EE
Web Contêiner
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
4
2
10/7/2010
Programa

Servlets








Aplicações Web Utilizando Servlets
Apache Tomcat
Arquitetura MVC para WEB
Operações e API Java
Estrutura Aplicação Web
Armazenamento e Recuperação de Informações
Cokies, Filtros e Listeners
JavaServer Pages





Scripts e Expressões
Objetos Implícitos
JSP Expression Language
Diretivas, Ações Padrão e Java Beans
JSP Standard Tag Library
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
5
Programa

Struts







Principais Componentes (Struts2)
Setup Aplicação
Actions
Validacao
Interceptors
JavaScript e AJAX
Realização e apresentação de um projeto para Web
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
6
3
10/7/2010
Bibliografia Básica

Básica


Marty Hall e Larry Brown; Core Servlets e JavaServer Pages - Vol. 1 – Tecnologias
Core, ISBN 8573934328, 632 p, 1a ed, Ciência Moderna, 2005
Mark Szolkowski e Nick Todd. Javaserver Pages
p,
g - O Guia do Desenvolvedor, 648 p
ISBN 85-352-1324-4, Campus
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
7
Bibliografia Complementar













DEITEL, H. M.; DEITEL P. Ajax, Rich Internet applications e desenvolvimento Web para
programadores. São Paulo : Prentice Hall, 2008.
GONÇALVES, E. Desenvolvendo aplicações Web com JSP, Servlets, JavaServer Faces, Hibernate,
EJB 3 Persistence e AJAX. Rio de Janeiro : Ciência Moderna, 2007.
HORSTMANN, C.; CONELL, G. Core Java 2: Advanced Features. 7. ed. Prentice Hall, 2006. v. 2.
ALUR, DEEPAK;CRUPI, JOHN;MALKS, DAN. Core J2EE Patterns. Campus-Elsevier. 2004.
ARNOLD, K.; GOSLING, J. The java programming language. 4. ed. Addison-Wesley, 2006.
BAUER , CHRISTIAN; KING, GAVIN. Hibernate em Ação. Ciência Moderna, 2005. ISBN:
8573934042.
BAUER , CHRISTIAN; KING, GAVIN. Java Persistance com Hibernate. Ciência Moderna, 2007.
ISBN: 9788573936148.
DEITEL, H. M.; DEITEL P. J. Java: como programar. 6. ed. Pearson, 2005.
FALKNER, J.; JONES, K. W. Servlets and JavaServer Pages: The J2EE Technology Web Tier.
Pearson Education, 2004.
GALBRAITH, B.; HAAN, P.; LAVANDOWSKA, L.; PANDURANGA, S. N; PERRUMAL, K; SGARBI,
E.K. Beginning Jsp 2.0: Build Web Applications Using Jsp, Java, and Struts. Wrox Press, 2003
HUSTED, T.; DUMOULIN, C.; FRANCISCUS, G. Struts em Ação. Ciência Moderna, 2004.
METSKER , S. J. Padrões de Projeto em Java. Bookman.2004. ISBN: 8536304111
WELLING, Luke & THOMSON, Laura. PHP e MySQL: desenvolvimento web. Rio de Janeiro:
Campus, 2005.
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
8
4
10/7/2010
Avaliação

Provas – Teóricas



Primeira Prova – 25 Pontos
Segunda Prova – 25 Pontos
Observações


Avaliações sem consulta
Trabalho Interdisciplinar


Laboratório – 10 pontos
Final – 40 pontos
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
9
INTERNET







Grande conjunto de redes de computadores interligadas pelo
mundo.
Começou como uma rede interligando Universidades no E.U.A
A partir de 1993 a Internet começou a ser explorada
comercialmente.
Não existem nenhum gerenciamento centralizado, cada usuário
ou empresa administra sua rede e esta se conectada à
INTERNET.
Comunicação entre as várias redes segue um protocolo
padrão(TCP/IP)
Backbones dão suporte principal à INTERNET.
Backbones são linhas alta capacidade de tráfego de
informação. Sustentados por governos e grandes empresas
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
10
5
10/7/2010
INTERNET – COMO FUNCIONA




Cada servidor (Host) possui um endereço único na Internet. Este endereço é
conhecido como IP. Ex: 200.17.210.65
Os IP’s são distribuídos pelo Network Information Center (NIC) e no Brasil
são repassados pela FAPESP
Cada endereço acima pode ser escrito com letras da seguinte forma:
www.ufu.br; www.fagen.ufu.br; www.uol.com.br; ftp.microsoft.com.br;
www.facic.ufu.br
Ao solicitar alguma informação o endereço de destino deve ser informado
200.17.210.65
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
11
INTERNET – SERVIÇOS


Servidores de INTERNET podem oferecer vários tipos de
serviços (Mais utilizados - WEB; E-MAIL; FTP)
WEB (WWW – World Wide Web)






P i i l serviço.
i
P
lti ídi (Texto;
(T t Imagem;
I
S
Principal
Possuii recursos multimídia
Som
e Vídeo)
Informações estão contidas em sites
Em um site é possível saltar de um ponto para outro utilizando
“hiperlinks”
Cada site possui seu URL (Uniform Resource Locator, localizador
uniforme de recursos) Ex.: http://www.ufu.br;
g
http://ww.uol.com.br; http://facic.ufu.br
http://www.fagen.ufu.br;
Endereços (domínios) são criados de acordo com o tipo de
utlização: .com (comércio); .gov (governo); .edu (universidades –
normalmente as brasileiras não utilizam); .mil (militar); .org
(organizações sem fins lucrativos)
Endereços terminam com nacionalidade: brasil (br); japão (jp);
portugal (pt); E.U.A (não possuem);
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
12
6
10/7/2010
Internet
A Internet não é uma rede
 Conjunto de diferentes redes interligadas que
tili am um
m mesmo conj
nto de protocolos a fim de
utilizam
conjunto
oferecer serviços comuns
 Serviços




FTP
E-mail
WEB
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
13
Protocolo HTTP
Protocolo utilizando na Web
 Realiza o transporte de conteudo entre o navegador
ser idor Web
e o servidor
 Protocolo descreve o pedido (request) e a resposta
(response)
 Seu entendimento é um requisito na programação
para a Internet

Programação para Internet
Flávio de Oliveira Silva, M.Sc.
14
7
10/7/2010
HTTP Requests
Estrutura Geral

Um pedido Http contém a estrutura abaixo
ESTRUTURA
EXEMPLO
Metodo URI Versao
Header Geral
Header Pedido
Header Conteudo
Conteudo

Método – Indica comando a ser enviado para o servidor.





Valores possíveis (HTTP 1.1): GET, POST, HEAD, PUT, LINK, UNLINK, DELETE,
OPTIONS
Nem todos os comandos podem ser respondidos por um servidor web
URI (Uniform Resource Indication) – Descrição única do conteúdo na Web
Versão – Versão do protocolo utilizada


POST / HTTP/1.1
Connection: Keep-Alive
Host: www.site.com.br
Content-type: txt/html
query=book
HTTT/1.1 ou HTTP/1.0
Headers – Informações adicionais que são enviadas após o comando
Conteudo – Informação que pode ser enviada pelo cliente e é recebida pelo
servidor
Programação para Internet
15
Flávio de Oliveira Silva, M.Sc.
HTTP Response
Estrutura Geral

A resposta contém a estrutura abaixo
ESTRUTURA
EXEMPLO
Versao Status Resposta
HTTP/1.1 200 OK
H d
G
l
Header
Geral
Date: Mon, 06 Feb 2010 20:54:26 GMT
Server: Apache/1.3.6 (Unix)
Content-length: 327
Content-type: text/html
<html>
<head>
<title>Página Hello</title>
</head>
<body>
<h1>Hello Web World!</h1>
</body>
</html>
Header Resposta
Header Conteúdo
Conteúdo


Headers – Informações adicionais enviadas juntamente com a resposta
Conteúdo – Informação enviada pelo servidor
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
16
8
10/7/2010
HTTP Request e Response
Exemplos

Request
GET / HTTP/1.1
Host: www.ufu.br
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive

Response
HTTP/1.1 200 OK
Date: Wed, 01 Sep 2010 10:48:25 GMT
Server: Apache/2.2.10 (Linux/SUSE)
X-Powered-By: PHP/5.2.9
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Wed, 01 Sep 2010 10:48:25 GMT
Cache-Control: store, no-cache, must-revalidate, post-check=0, pre-check=0
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
<html>
</html>
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
17
HTTP Request
Métodos

Principais métodos utilizado no protocolo HTTP
MÉTODO
GET
HEAD
POST
PUT
DELETE
DESCRIÇÃO
Permite obter um conteúdo em um servidor. O conteúdo pode ser um arquivo estático ou um resultado produzido de forma dinâmica
Obtém apenas informações (cabeçalho) associada ao conteúdo, sem no entanto, devolver este conteúdo
Permite o envio de informações para o servidor, por exemplo, ao preencher um formulário na Web.
Permite inserir ou alterar um conteúdo existente em um servidor
Utilizado para remover um conteúdo no servidor
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
18
9
10/7/2010
HTTP Response
Server Codes


Linha inicial da resposta do servidor contém um código de status com
três digitos
Alguns códigos são tratados diretamente pelo browser enquanto outros
são mostrados no cliente
FAIXA DO CÓDIGO
100‐199
200‐299
300‐399
400‐499
500
599
500‐599
SIGNIFICADO
Informação
Pedido atendido com sucesso
Pedido redirecionado
Pedido incompleto
Erros no servidor
no servidor
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
19
HTTP Response
Server Codes - Exemplos
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
20
10
10/7/2010
HTTP Headers
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
21
HTTP
Tipos de Conteúdo
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
22
11
10/7/2010
HTTP
Cokies
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
23
HTML
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
24
12
10/7/2010
CSS
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
25
JavaScript
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
26
13
10/7/2010
Java – Plataformas



A tecnologia Java está dividida em plataformas.
Cada plataforma oferece um conjunto de funcionalidades
para o desenvolvimento de diferentes tipos de aplicações
Existem três plataformas baseadas na tecnologia Java



Java ME – Java Platform, Micro Edition
Java SE – Java Platform, Standard Edition
Java EE – Java Platform, Enterprise Edition
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
27
Java – Plataformas

Java ME – Java Platform, Micro Edition



Java SE – Java Platform, Standard Edition



Fornece um ambiente específico para a criação de aplicações destinadas a
dispositivos como telefones celulares, pagers, PDAs, Smartphones; etc.
Destinado a criação de aplicações para dispositivos móveis
Fornece um ambiente completo para o desenvolvimento de aplicações em
destktops (clientes) e também servidores
Base da tecnologia Java. Fornece a máquina virtual (JRE – Java Runtime
Environment)
Java EE – Java Platform, Enterprise Edition


Define um padrão para o desenvolvimento de aplicações baseadas em
componentes e estruturadas em várias camadas
Seu foco é o desenvolvimento de aplicações do lado servidor, cujo objetivo é
prover funcionalidades para aplicações distribuídas
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
28
14
10/7/2010
Java – Java EE





O padrão Java EE define um grupo da APIs( Application Programming
Interfaces) que pode ser combinado para a criação de aplicações
distribuídas baseadas ou não na Web
produto mas uma especificação.
especificação
O Java EE não é um produto,
A especificação é criada pela JCP (Java Community Process)
Esta comunidade é responsável pelo desenvolvimento da tecnologia
Java e é aberta a qualquer desenvolver ou empresa interessado na
tecnologia
Esta especificação é então implementada pelas mais variadas
companhias como, por exemplo:





SUN
IBM
ORACLE
BEA
JBOSS
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
29
Java – Java EE


O resultado desta implementação é um Servidor de Aplicações
(Application Server)
Exemplos de servidores de aplicações compatíveis com o padrão J2EE

W b h
IBM – Websphere
JBoss – Jboss
Oracle - Oracle Application Server 10g
SAP AG - Web Application Server
Sun - Sun Java System Application Server
Sybase – EAServer
Macromedia - JRun Server
Borland - Enterprise Server
BEA – WebLogic

Fujitsu Siemens Computers – BeanTransactions









Os servidores implementam uma das especificações Java EE (1.2; 1.3;
1.4 , 5 e 6)
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
30
15
10/7/2010
Aplicações Distribuídas
Camadas



O modelo para desenvolvimento de aplicações utilizando o Java EE é
baseado em uma arquitetura multicamadas
Cada camada contém componentes de acordo com a sua função.
Basicamente existem as seguintes camadas:






Cliente (Client Tier)
Camada Web (Web Tier)
Camada de Negócios (Bussiness Tier)
Camada Enterprise Information System (EIS)
A camada Web Tier estará presente quando a aplicação for baseada na
WEB ou seja, o cliente é um navegador (browser)
A arquitetura acima é conhecida como três camadas (3-tier) visto que
existem 3 máquinas envolvidas:



O cliente;
O servidor de aplicações Java EE
O servidor de banco de dados
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
31
Aplicações Distribuídas
Camadas

Cliente (Client Tier)



Camada Web (Web Tier)




Componentes que são executados em um servidor Java EE
Basicamente tratam da apresentação do conteúdo na WEB
Esta camada é responsável por gerar e enviar para o cliente o conteúdo gerado de forma dinâmica
Camada de Negócios (Bussiness Tier)




Componentes que são executados na máquina do cliente.
Podem ser executados em um Browser ou uma aplicação desktop baseada no Java SE
Contém os objetos relacionados ao negócio e suas regras
O servidor de aplicações oferece recursos como controle de transações, de sessões para os objetos
desta camada.
Pode ser implementa com EJB (Enterprise JavaBeans)
Camada Enterprise Information System (EIS)


Consiste dos recursos que serão utilizados pela aplicação. Inclui gerenciadores de banco de dados
(DBMS) e aplicações legadas, baseadas em mainframes, por exemplo.
Esta camada é executada fora do servidor J2EE e a arquitetura J2EE possui uma interface para
esta camada, que pode ser feita, por exemplo, através de conectores
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
32
16
10/7/2010
Aplicações Distribuídas
Camadas – Arquitetura Java EE

Visão Geral das Camadas
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
33
Aplicações Distribuídas
Arquitetura Java EE

Comunicação entre as várias camadas
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
34
17
10/7/2010
Aplicações Distribuídas
Arquitetura Java EE

Camada Web (Web Tier)

JavaBeans; JSP Pages; Servlets
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
35
Aplicações Distribuídas
Arquitetura Java EE

Camada de Negócios (Business Tier)

Baseada em EJB
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
36
18
10/7/2010
Java EE contêineres


O contêiner fornece a infra-estrutura para a execução de um componente
específico da plataforma
O servidor J2EE fornece dois tipos básicos de contêineres:


têi
WEB contêiner
EJB contêiner
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
37
Java EE contêineres
Web Contêiner


Executa Servlets e páginas JSP
Servlets






São classes Java que podem ser chamados dinamicamente e que podem executar
alguma
a
gu a funcionalidade.
u c o a dade
Estes programas podem ser executado em um Servidor Web ou em um contêiner para
Servlets
Normalmente estão ligados a geração de conteúdo para browsers.
O Servlet implementa a interface Servlet e possui um funcionamento pré-definido
Os Servlets recebem e respondem a requisições feitas normalmente através do
protocolo HTTP
JavaServer Pages (JSP)



Consistem de uma maneira p
para criar conteúdo dinâmico p
para a Web
Seu objetivo é criar uma separação entre a apresentação e os dados que estarão
presentes em uma página no navegador.
Normalmente a página JSP é um modelo que contém tanto o conteúdo estático, como
a indicação de como o conteúdo dinâmico será gerado
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
38
19
10/7/2010
Java EE contêineres
EJB Contêiner


Realiza a criação, destruição e gerenciamento dos EJBs (Enterprise JavaBeans)
Enterprise JavaBeans



Além disso o contêiner de EJBs é responsável pelo:









Enterprise JavaBeans é um padrão para o desenvolvimento de componentes,
utilizando
Java,
podem se
ser implantados
(deployed)
em qua
qualquer
u
a do a linguagem
guage Ja
a, que pode
p a ados (dep
oyed) e
que
servidor J2EE. Em sua essência são classes Java.
Existem vários tipos de EJBs cada um com características próprias
Gerenciamento Distribuído de Transações
Implementação da Segurança
Gerenciamento de Recursos
Persistência dos EJBs
Acesso Remoto
Transparência de Localização
Monitoramento
Todas as funções são realizadas de forma transparente pelo servidor de aplicações.
O EJB contêiner é aquele que realmente caracteriza um servidor de aplicações
baseado na especificação Java EE
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
39
Java EE contêineres
EJB Contêiner


Existem vários tipos de EJBs cada um com características próprias
O seu uso depende das características da aplicação, de suas vantagens e desvantagens
particulares
TIPO
SUB TIPO
SUB‐TIPO
DESCRIÇÃO
Stateless (sem estado) Componentes que simplesmente realizam a chamada de métodos. Utilizado para a implementação das regras de negócio Stateful (com estado) Componentes com estado funcionam como um proxy para aplicações do cliente. Estes componentes mantém seu estado entre as chamadas de Métodos Session Componentes sem estado que estão ligados ao Java Message Service
(JMS), utilizado para chamada assíncrona de métodos Message Component Managed (CMP) Componentes com estados que fazem o encapsulamento de uma entidade de um banco de dados. O servidor de aplicações gera o entidade de um banco de dados O servidor de aplicações gera o
código para conectar estes objetos a um banco de dados específico Bean Managed (BMP) Componentes com estados que fazem o encapsulamento de entidades complexas de um banco de dados. Neste caso o desenvolvedor deve escreve o código necessário para acessar o objeto no banco de dados Entity Programação para Internet
Flávio de Oliveira Silva, M.Sc.
40
20
10/7/2010
Aplicações WEB






Em sua concepção a WEB é um meio para a troca de documentos HTML
entre diferentes pontos, utilizando a infra-estrutura oferecida pela
Internet.
A medida que a WEB se popularizou novas aplicações começaram a
surgir
Em muitos sites da WEB o conteúdo não poderia ser constituído de
código HTML estático, mas precisaria ser alterado, muitas das vezes
a cada minuto.
A partir desta necessidade começaram a surgir meios para se conseguir
a produção de conteúdos dinâmicos
A primeira
de conteúdos
dinâmicos
do
i i proposta
t para a criação
i ã d
t úd di
â i
ffoii através
t é d
CGI (Common Gateway Interface)
Este mecanismo permite a execução de um código, escrito em C ou Perl,
através do navegador
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
41
Aplicações WEB Usando CGI

Uma aplicação CGI pode ser invocada da seguinte forma:
http://www.server.com/cgi-bin/MyExecutable?name1=value1&name2=value2

Aplicação CGI, porém apresenta algumas desvantagens:





Criada a partir de linguagens procedimentais
Instabilidade em uma aplicação CGI pode impedir até a operação do servidor
Problemas de Escalabilidade. A cada chamada uma nova instância da
aplicação é criada, criando um novo thread e consumindo recursos do
servidor.
Outro aspecto é que através de uma aplicação CGI não é possível agregar
recursos na aplicação como: estabelecimento de sessão; autenticação e
ç
autorização.
Neste contexto e como uma resposta a estas desvantagens, na
plataforma Java foi desenvolvido o conceito dos Servlets
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
42
21
10/7/2010
Aplicações WEB Usando Servlets




São programas Java que podem ser chamados dinamicamente e que
podem executar alguma funcionalidade.
Este programas podem ser executado em um Servidor Web ou em um
contêiner para Servlets
Todos os Servlets implementam a interface Servlet
O servlet possui um ciclo de vida padrão e desta forma os métodos são
chamados de uma maneira pré-determinada.



init()
service()
destroy()
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
43
Apache Tomcat





O apache Tomcat basicamente é um contêiner de Servlets
O Tomcat é a implementação de referência das especificações para
Servlets e JavaServer Pages
Estas especificações são desenvolvidas pela Sun através da JCP (Java
Community Process).
A JCP é uma entidade aberta que possui como membros pessoas e
empresas envolvidas com a tecnologia Java.
A seguintes tabela mostra as versões das especificações e as
respectivas versões do Tomcat
Especificações
Servlets / JSP
Versão do Apache Versão do Apache
TOMCAT
2.5/2.1
2.4/2.0
2.3/1.2
2.2/1.1
6.0.14
5.5.25
4.1.36
3.3.2
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
44
22
10/7/2010
Tomcat – Estrutura de Pastas
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
45
Arquitetura MVC para WEB



No caso da abordagem WEB existem algumas
particularidades, então o padrão ficou conhecido como
“Model 2”
Esta particularidade acontece pois o browser não é
necessariamente a parte VIEW do modelo pois o mesmo
simplesmente mostra um código HTML
Desta forma o código mostrado no browser está
desacoplado, pois precisa ser traduzido para o HMTL antes
de ser visualizado.
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
46
23
10/7/2010
Model 1 x Model 2



O modelo MVC (Model-View-Controller) é um conceito para o
desenvolvimento de aplicações
Neste modelo há uma separação entre as responsabilidades.
Model 1




Primeiro modelo disponível para o desenvolvimento de aplicações WEB
Elementos: Browser; Servlets/Páginas JSP e um Banco de dados
Neste modelo pode ocorrer duplicação de código
As regras de negócio e a Apresentação dos dados estão combinadas em um único
elemento, dificultando modificações e manutenções
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
47
Model 1 x Model 2

Model 2






Segundo modelo disponível para o desenvolvimento de aplicações WEB
Baseado no modelo MVC (Model – View – Controller)
El
t
B
C t ll (Servlets);
(S l t ) View(Páginas
Vi (Pá i
JSP)
M d l(O t
Elementos:
Browser;
Controller
JSP); Model(Outras
classes) e um Banco de dados
Elementos separados e responsabilidades bem definidas
Facilita a reutilização de código e futuras modificações
Permite o uso de múltiplos Banco de Dados e Clientes
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
48
24
10/7/2010
Arquitetura MODEL 2




O usuário chama o controller (servlet)
O servlet instancia um ou mais Beans para realizar o trabalho
O servlet adiciona os Beans para uma ou mais JavaServer Pages e
envia o controle para o JSP (VIEW)
Este finalmente extrai os Beans e mostra o resultado
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
49
Servlets - Operações


Métodos são chamados durante o ciclo de vida de um
Servlet:

init()


service()




Chamado na inicialização do Servlet uma única vez, antes que o mesmo possa
responder às requisições feitas pelos clientes.
Chamado a fim de que o Servlet possa responder a uma solicitação.
Em aplicações HTTP este método verifica se o cliente deseja uma requisição
(GET) ou resposta (POST) e encaminha o fluxo, conforme cada caso, para o
métodos que tratarão cada situação
Uma mesma instância de um Servlet pode ser utilizada por vários clientes,
permitindo desta forma a economia de recursos do servidor.
servidor
destroy()


Chamado uma única vez, antes que o objeto seja destruído.
Responsável pela liberação dos recursos alocados pelo método init()
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
50
25
10/7/2010
Servlets – API Java



Os Servlets são definidos como uma interface na API Java, sendo assim uma
classe qualquer deve implementar esta interface a fim de que possa ser
considerando um Servlet
Esta interface é definida no pacote javax.servlet
Métodos definidos pela interface:

void destroy()

ServletConfig getServletConfig()


Retorna um objeto ServeletConfig que contém informações de inicialização e de configuração
de um Servlet

java.lang.String getServletInfo()

void init(ServletConfig config)

void service(ServletRequest req, ServletResponse res)




Responsável pela finalização do Servlet e liberação de recursos
Retorna informações sobre o Servlet como autor,versão; etc
Responsável pela inicialização e alocação de recursos
Chamado pelo contêiner a fim de que o Servlet possa responder a uma requisição de serviço.
Esta interface é implementada pela classes: javax.servlet.GenericServlet;
javax.servlet.http.HttpServlet
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
51
HttpServlet


Normalmente os Servlets a fim de serem executados sobre o protocolo
HTTP, o mesmo utilizado pela WEB
O protocolo HTTP define as seguintes operações:

GET

HEAD

PUT

POST

DELETE







Requisita uma página para leitura
Requisita o cabeçalho de uma página WEB
Envia uma página a fim de ser escrita em servidor WEB
Envia informações que são adicionadas a uma página WEB
Remove uma página WEB
A classe HttpServlet uma classe abstrata que cria um Servlet próprio
para uso com a Web.
Esta classe está definida no seguinte pacote: javax.servlet.http
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
52
26
10/7/2010
HttpServlet



A classe HpptServlet define os métodos para que o Servlet possa ser utilizado
juntamente com o protocolo HTTP
Normalmente uma classe deverá especializar os métodos definidos nesta classe
a fim de imprimir o comportamento desejado pelo Servlet
Métodos principais

doGet(HttpServletRequest req, HttpServletResponse resp)

doHead(HttpServletRequest req, HttpServletResponse resp)

doPost(HttpServletRequest req, HttpServletResponse resp)

( p
q
q, HttpServletResponse
p
p
p)
doPut(HttpServletRequest
req,
resp)

doDelete(HttpServletRequest req, HttpServletResponse resp)

init; destroy; getServletInfo





Utilizado em requisições do tipo HTTP GET
Utilizado em requisições do tipo HTTP HEAD
Utilizado em requisições do tipo HTTP POST
Utilizado em requisições do tipo HTTP PUT
Utilizado em requisições do tipo HTTP DELETE
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
53
HttpServlet



Normalmente os métodos Service, doOptions e doTrace não são
especializados
Os método doGet() e doPost() são os métodos usualmente
especializados
As informações utilizadas na requisição e na resposta estão
encapsuladas em HttpServletRequest e HttpServletResponse
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
54
27
10/7/2010
HttpServlet

Além dos métodos descritos anteriormente que devem ser especializados
existe outros métodos muito utilizados em um Servlet

public ServletContext getServletContext()

public ServletConfig getServletConfig()




Permite o obter um objeto que representa o contêiner do Servlet
Recupera um objeto ServletConfig.
Este objeto contém a configuração do Servlet que contém parâmetros de
inicialização do Servlet, definidos no arquivo WEB.XML
public void log(java.lang.String msg)


Escreve uma mensagem no arquivo de log do contêiner de Servlets
O nome do Servlet é adicionado ao início da mensagem (msg)
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
55
HttpServletRequest




A classe HpptServletRequest representa o pedido (request)
que é enviado do navegador(cliente) para o servidor
(contêiner de Servlets)
Todos os parâmetros que são passados do cliente para o
servidor estão encapsulados neste objeto
Este objeto é instanciado pelo contêiner e entregue para uso
do servlet
Os principais métodos da classe HttpServlet sempre
recebem um objeto HttpServletRequest
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
56
28
10/7/2010
HttpServletRequest
Métodos Principais

public java.lang.String getParameter(java.lang.String name)



Este método permite o acesso a parâmetros que são recebidos do cliente.
Cada parâmetro possui um nome (name) que deve ser informado
O nome está definido em um Form Html ou então na URL de acesso ao servlet
Ex: String sCmd = (String) request.getParameter("cmd");

public HttpSession getSession()


Retorna uma sessão (objeto HttpSession) associado ao pedido e caso a mesma não
exista uma nova sessão é criada
Através da sessão é possível compartilhar objetos entre vários execuções
pedido/resposta de um servlet
Ex: HttpSession session = request.getSession();

p
p
g
(
public HttpSession
getSession(boolean
create))


Retorna uma sessão (objeto HttpSession) associado ao pedido
Uma nova sessão é criada somente se o parâmetro create igual a true
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
57
HttpServletResponse





A classe HpptServletRequest representa a reposta(response) que é
enviada do servidor (contêiner de Servlets) para o navegador(cliente)
Este objeto é instanciado pelo contêiner e normalmente é alterado pelo
servlet a fim de produzir o resultado desejado
Os principais métodos da classe HttpServlet sempre recebem um objeto
HttpServletResponse
Basicamente o servlet consiste em alterar este objeto conforme o
necessário
Este objeto contém métodos que permite o acesso ao cabeçalho
(headers) HTTP e cookies bem como ao conteúdo da resposta
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
58
29
10/7/2010
HttpServletResponse
Métodos Principais

public void setContentType(java.lang.String type)



bli java.io.PrintWriter
j
i P i tW it getWriter()
tW it () throws
th
j
i IOE
ti
public
java.io.IOException



Permite definir o tipo de resposta que será devolvida ao navegador
O tipo mais comum é “text/hmtl”
Este método obtém a stream (sequência de dados) que será utilizada na
resposta
Neste caso a stream representa uma sequência de carateres, como é um
caso do conteúdo do tipo “text/html”
public ServletOutputStream getOutputStream() throws
java.io.IOException


Este método obtém a stream (sequência de dados) que será utilizada na
resposta
Neste caso a stream representa uma sequência de bytes (binária), como é
um caso do conteúdo do tipo MIME (Multipurpose Internet Mail Extensions)
como por exemplo: “application/zip”; application/pdf ou “image/jpeg”
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
59
Servet Básico – Exemplo 1
package org.lp2.servlet;
import java.io.*; import javax.servlet.*;
public class HelloWorldServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOE
ti {
IOException
//Indica que o conteudo da reposta é página html
response.setContentType("text/html");
//Obtém a stream de caracteres da saída
PrintWriter out = response.getWriter();
//Conteúdo básico de uma página HTML
out.println("<html>");
out.println("<head>");
out.println("<body bgcolor=\"blue\">");
out.println("<h1>");
t i tl (" h1 ")
out.println("HELLO SERVLET WORLD!");
out.println("</h1>");
out.println("</body>");
out.println("</html>");
}
}
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
60
30
10/7/2010
Servet Básico – Exemplo 2
Passagem de Parâmetros
package org.lp2.servlet;
import java.io.*; import javax.servlet.*;
public class ParameterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOE
ti {
IOException
//Obém o valor do parâmetro
String sCmd = (String) request.getParameter("cmd");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body bgcolor=\"blue\">");
out.println("<h1>");
out.println("Uso de Parâmetros em um Servlet!");
out.println("COMANDO
t i tl ("COMANDO = "+sCmd);
" C d)
out.println("</h1>");
out.println("O nome do comando acima foi passado como parâmetro.");
out.println("</body>");
out.println("</html>");
}
}
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
61
Servet Básico – Exemplo 3
Passagem de Parâmetros – Login
package org.lp2.servlet;
import java.io.*;
import java.util.HashMap;
import javax.servlet.*;
i
t javax.servlet.http.*;
j
l t htt *
import
public class LoginServlet extends HttpServlet {
//Neste caso tanto doGet como doPost executarão as memas operações
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException,
IOException {
doGet(arg0,arg1);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
//Para
definir
//P
d fi i os usuários
á i e suas senha
h será
á criado
i d um HashMap
H hM
//que contém o nome do usuário e sua senha
HashMap<String,String> users = new HashMap();
users.put("flavio", "123");
users.put("mateus", "456");
//continua
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
62
31
10/7/2010
Servet Básico – Exemplo 3
Passagem de Parâmetros – Login
users.put("lucas", "101");
users.put("joao", "1213");
//Obém o valor do parâmetro
String sNome = (String) request.getParameter("nome");
St i sSenha
S h = (String)
(St i ) request.getParameter("senha");
t tP
t ("
h ")
String
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String sStatus;
//Neste momento o Servlet poderia chamar uma classe
//responsável pela realização do serviço de login
//Neste exemplo, a fim simplificar será feita uma busca em um
//HashMap de usuarios e senhas. Neste mapa será fácil executar a a pesquisa
if (!users.containsKey(sNome)) {
sStatus
CADASTRADO!";
St t = "USUÁRIO NÃO CADASTRADO!"
}
else {
//Verifica se a senha está correta
//continua
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
63
Servet Básico – Exemplo 3
Passagem de Parâmetros – Login
String sUserPass = users.get(sNome);
if (sUserPass.equals(sSenha))
sStatus = sNome + " - ACESSO AUTORIZADO! Seja bem-vindo";
else
St t = "ACESSO NÃO AUTORIZADO!"
sStatus
AUTORIZADO!";
}
out.println("<html>");
out.println("<head>");
out.println("<title> :) Login no Sistema ---- </title>");
out.println("</head>");
out.println("<body bgcolor=\"green\">");
out.println("<h1>");
out.println("Uso de Forms HTML em um Servlet!");
out.println("LOGIN – RESULTADO“ + sStatus);
out.println("</h1>");
out.println("</body>");
out.println("</html>");
}
}
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
64
32
10/7/2010
Servet Básico – Exemplo 3
Passagem de Parâmetros – Login

O Servlet pode ser chamado utilizando o seguinte formulário HTML
<html>
<head>
<title>Formulário de Login</title>
</head>
<body>
<h1>
Bem vindo à Página de Login...
</h1>
<form action="login" method="post">
<h2>Digite Seu Nome</h2> <input type="text" name="nome">
<h2>Digite Sua senha</h2> <input type="text" name="senha">
<input type="submit" value="&Entrar no site">
</form>
</body>
</html>

Os parâmetros “nome” e “senha” são obtidos no form e enviado no pedido
(request) para o servidor
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
65
ServletContext




Esta classe representa o contexto da aplicação ou seja o contêiner de um
Servlet
Através desta classe o Servlet pode obter parâmetros comuns existentes
XML; gravar operações em um arquivo de log e ainda
no arquivo WEB
WEB.XML;
redirecionar pedidos
Existe um único contexto em cada aplicação Web.
A aplicação Web pode conter vários Servlets e todo compartilham o
mesmo contexto.
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
66
33
10/7/2010
Estrutura de uma aplicação WEB

/ (Raiz da Aplicação)



/WEB-INF



Os arquivos desta pasta não são de acesso público
Esta pasta contém um arquivo chamado web.xml, conhecido como
deployment descriptor, que contém as configurações para uma aplicação
WEB
/WEB
INF/classes
/WEB-INF/classes


Todos os arquivos de acesso públicos são colocados nesta pasta como por
exemplo: HTML; JSP; GIF; etc.
No caso do TOMCAT o diretório raiz da aplicação é criado dentro da pasta
webapps
Todas as classes java compiladas (.class) são colocadas neste local
/WEB-INF/lib

Todas as classes que estão compactadas em um arquivo JAR são colocadas
neste diretório
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
67
Deployment Descriptor



O arquivo web.xml é conhecido como “deployment descriptor”
Este arquivo contém toda a configuração do servlet que será utilizada
pelo contêiner de servlets (Tomcat)
Este arquivo é escrito em XML e deve possuir no mínimo os seguintes
elementos:
<web-app>
<context-param>
</context-param>
<servlet>
</servlet>
<servlet-mapping>
</servlet-mapping>
</web-app
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
68
34
10/7/2010
Deployment Descriptor
Elementos – Versão 2.5
























context-param
description
display-name
distributable
ejb-ref
ejb local ref
ejb-local-ref
env-entry
error-page
filter
filter-mapping
icon
jsp-config
listener
login-config
mime-mapping
resource-env-ref
resource-ref
security-constraint
security-role
servlet
servlet-mapping
session-config
web-app
welcome-file-list
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
69
Deployment Descriptor

Servlets 2.5 - JSP 2.1 (Tomcat 6)
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
p //j
/
/ /j
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5“
>
<display-name>web app name</display-name>
<!
<!– outras declarações
>
-->
</web-app>
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
70
35
10/7/2010
Deployment Descriptor

Servlets 2.4 - JSP 2.0 (Tomcat 5)
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
p //
g/
/
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4“
>
<display-name>web app name</display-name>
<!– outras declarações
-->
</web
app>
</web-app>
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
71
Passagem de Parâmetros de
Configuração





Context-Param
O elemento context-param permite o uso parâmetros de inicialização
para todo o sistema
A partir de qualquer servlet ou página JSP é possível obter seus valores
através do método getInitParameter da classe ServletContext
O elemento contém dois elementos filhos que contém o nome do
parâmetro (param-name) e o valor do parâmetro (param-value)
O parâmetro sempre é obtido como String
<context-param>
<param-name>webmaster-email</param-name>
<param-value>[email protected]</param-value>
</context-param>
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
72
36
10/7/2010
Deployment Descriptor

Para acessar Servlets este deve possuir no mínimo os seguintes elementos:
<web-app xmlns=”http://java.sun.com/xml/ns/j2ee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xswie:bs-cahpepm
p p _a2L_o4c.axtsido”n=”http://java.sun.com/xml/ns/j2ee
p //j
/
/ /j
version=”2.4”>
<servlet>
<servlet-name>ServletUniqueName</servlet-name>
<servlet-class>servletClassFile</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletUniqueName</servlet-name>
<url
pattern>/rootFolder</url pattern>
<url-pattern>/rootFolder</url-pattern>
</servlet-mapping>
</web-app>
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
73
Deployment Descriptor

O elemento <servlet> contém dois elementos-filho que descrevem o servlet
O elemento <servlet-name> deve ser único no arquivo web.xml. Este nome será utilizado para
referenciar o servle em outros elementos como no elemento <servlet-mapping>
 O nome da classe (<servlet-class>)é o nome completo a partir da pasta classes. Indica a classe
será utilizada como resposta ao chamado do servlet
 Caso a classe esteja em um pacote o nome do mesmo deve ser utilizado
Ex: com.mycompany.servlets.NomeClasse


O elemento <servlet-mapping> é utilizado para realizar uma ligação entre um caminho
e um determinado servlet



Para isto este elemento contém um elemento-filho como o nome do Servlet (<servlet-name>) e um
elemento (<url-pattern>) que descreve a um caminho URL
Quando este caminho estiver presente a solicitação será mapeada para o servlet indicado no
arquivo web.xml - indicado por (<servlet-name>)
Exemplos:
/servApp – Neste caso qualquer URL que finalize com /servApp será mapeada para o
servlet (http://localhost:8080/{contextpath}/servApp)
*.do – Neste caso qualquer URL que termine com a string “.do” será mapeada para o servlet
(http://localhost:8080/{contextpath}/login.do
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
74
37
10/7/2010
ServletContext
Métodos Principais

Representa o contexto da aplicação

public java.lang.String getInitParameter(java.lang.String name)





Caminho físico de arquivos; web.xml
E t método
ét d permite
it obter
bt o valor
l d
â t
i t t no arquivo
i
Este
de parâmetros
existentes
WEB.XML
Para isto é necessário informar o nome do parâmetro (name)
Um exemplo de parâmetros é uma string que contém o nome do banco de
dados
public RequestDispatcher getRequestDispatcher(java.lang.String
path)
O RequestDispatcher é um objeto que recebe pedido do cliente e envia este
pedido para qualquer recurso de uma aplicação web existente no servidor,
como por exemplo, um Servlet, um arquivo HTML ou um JSP
 Para obter este objeto é necessário informar o caminho (path) do recurso
RequestDispatcher rd = request.getRequestDispatcher("/CatalogView.jsp")

Programação para Internet
Flávio de Oliveira Silva, M.Sc.
75
HttpSession


O protocolo HTTP é stateless, ou seja, um conjunto request/response
independe de outro
Normalmente é necessário implementar na aplicação do conceito de
sessão onde um conjunto de diferentes request/reponse estão ligados
entre si



Exemplo: Aplicação bancária – agência e conta são informadas apenas no
primeiro request, porém é compartilhada por todos os outros
request/response
Classe Implementa o conceito de sessão
Métodos principais





Object getAttribute(String name)
void setAttribute(String name, Object value)
void invalidate()
void setMaxInactiveInterval(int interval)
boolean isNew()
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
76
38
10/7/2010
Armazenamento e Recuperação de
Informações (Objetos)



É possível armazenar e recuperar informações em tempo de
execução de um servlet
Desta forma é possível o intercambio de informações entre
diferentes servlets
Armazenar Objeto


void setAttribute(String name, Object object)
Recuperar Objeto

Object getAttribute(String name)
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
77
Armazenamento e Recuperação de
Informações (Objetos)


O objeto armazenado pode estar em diferentes escopos, conforme sua
necessidade
Nível Aplicação




Nível Sessão




Classe: ServletContext
Objeto armazenado está disponível para todos os servlets daquele contexto, todas as
sessões existentes e qualquer pedido ou resposta
Durante toda a execução da aplicação
Classe: HttpSession
Objeto armazenado esteja disponível para todos os servlets
Duração equivalente à Sessão
Nível Pedido



HttpServletRequest
Objeto armazenado pode ser enviado para outro servlet através do RequestDispatcher
Duração do pedido
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
78
39
10/7/2010
Servlets
Encaminhamento de Pedido




1.
2.
2
3.
Uma operação comum entre vários servlets é o encaminhamento do
pedido (request)
Para isto é utilizado a classe RequestDispatcher
Este objeto pode ser obtido tanto a partir do contexto da aplicação
(ServletContext) quanto de um pedido (HttpServletRequest)
O código abaixo mostra como encaminhar o pedido uma página de erro
(/errorpage) que neste caso pode ser tratado por outro servlet
RequestDispatcher rd;
rd = request.getRequestDispatcher("/errorpage");
request getRequestDispatcher("/errorpage");
//Encaminhar request e response para outro servlet
rd.forward(request, response);
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
79
Exemplo
Realização Login
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
80
40
10/7/2010
Servlet
Papéis

No geral os servlets os servlets estão relacionados com dois
papéis básicos

Controle






Neste caso o servlet não é responsável pela produção de conteúdo
Realiza operações invocando serviços de outras classes
Armazena dados no contexto da aplicação ou pedido
 ServletContext; HttpSession e HttpServletRequest
Encaminha pedido para outros servlets
 RequestDispatcher
p Anterior: LoginServlet
g
Exemplo
Conteudo




Responsável pela produção de conteúdo
Servlet que efetivamente produz o código HTML
Devolve a resposta para o cliente
Exemplo Anterior: AppServlet e LoginErrorServlet
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
81
Armazenamento e Recuperação de Informações
Contexto Aplicação (ServletContext)
1.
2.
3.
4.
5
5.
6.
7.
8.
9.
10.
11.
12.
13.
13
14.
15.
16.
17.
18.
19.
20.
public class LoginStaticServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
ServletContext context = config.getServletContext();
t t
tAtt ib t ("LOGINCOUNTER"
I
t
(0))
context.setAttribute("LOGINCOUNTER",new
Integer(0));
}
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
//...
String loginreceived = request.getParameter("user");
String password = request.getParameter("password");
retorno = service.doLogin(loginreceived, password);
if (retorno){
//login com sucesso
Integer loginCounter;
loginCounter = (Integer) context.getAttribute("LOGINCOUNTER");
//A cada login com sucesso o contador é acrescido de um
loginCounter = loginCounter + 1;
context.setAttribute("LOGINCOUNTER", loginCounter);
}
}
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
82
41
10/7/2010
Armazenamento de Informações
Contexto da Sessão
1.
2.
3.
4
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
13
14.
15.
16.
17.
18.
public class LoginStaticServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
//...
doLogin(loginreceived password);
retorno = service
service.doLogin(loginreceived,
if (retorno){
//login com sucesso
//...
//Cria a sessão usuário, caso a mesma não exista
HttpSession session = request.getSession(true);
//Armazena o nome do usuário na sessão
session.setAttribute("USER", loginreceived);
//...
//Encaminha pedido para o AppServerlet
RequestDispatcher rd;
rd = request.getRequestDispatcher("/apphome");
rd.forward(request, response);
}
}
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
83
Recuperação de Informações
Contexto da Aplicação e Sessão
1.
2.
3.
4.
5
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class AppServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
//recupera o contexto da aplicação e o valor dos atributos
S
l tC t t context
t t = thi
tS
l tC t t()
ServletContext
this.getServletContext();
Integer logCounter = (Integer) context.getAttribute("LOGINCOUNTER");
//Obtem o nome do usuario que realizou o login
HttpSession session = request.getSession();
String sLoginName = (String) session.getAttribute("USER");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>AppHome</title>");
t
i tl (" titl A H
/titl ")
out.println("</head>");
out.println("<body>");
out.println("Bem Vindo " + sLoginName);
out.println("<h3>Sistema acessado "+ logCounter.toString()+ " vezes");
out.println("</body>");
out.println("</html>");
}
Programação para Internet
}
Flávio de Oliveira Silva, M.Sc.
84
42
10/7/2010
Aplicação Exemplo

Fluxo entre páginas
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
85
Aplicação Exemplo - Servlets

Servlets Associados
Programação para Internet
Flávio de Oliveira Silva, M.Sc.
86
43
Download

Programacao Internet..