Sie sind auf Seite 1von 46

Introduc

ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Programacao para Web


Servlets
Ivo Calado
Instituto Federal de Educac
ao, Ci
encia e Tecnologia de Alagoas

22 de Fevereiro de 2016

1 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Roteiro

Introducao

Praticando

Aprofundando...

Gerenciamento de Sessao

2 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Observacao sobre o conteudo

Parte deste material e baseada na apostila FJ-21 - Java para


Desenvolvimento Web desenvolvido pela Caelum
(www.caelum.com.br)

3 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Definic
oes

O que sao?

As Servlets sao a primeira forma que veremos de criar paginas


dinamicas com Java
Criaremos classes que terao a capacidade de gerar conte
udo
HTML!!
O nome servlet vem da ideia de um pequeno servidor
(servidorzinho, em ingles) cujo objetivo e receber chamadas
HTTP, processa-las e devolver uma resposta ao cliente

4 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Definic
oes

A classe javax.servlet.http.HttpServlet

Trata-se da classe principal de uma servlet


Possui um metodo generico (service) e diversos metodos
como especficos como doGet, doPost, doDelete, doPost e
outros representando as diversas operac
oes HTTP

5 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Definic
oes

A classe javax.servlet.http.HttpServlet

Trata-se da classe principal de uma servlet


Possui um metodo generico (service) e diversos metodos
como especficos como doGet, doPost, doDelete, doPost e
outros representando as diversas operac
oes HTTP
O nosso papel e implementa-las!
Cada um desses metodos recebem como parametro um objeto
HttpServletRequest e um HttpServletResponse
representando a requisicao e a resposta!

5 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Nosso primeiro exemplo

O metodo doGet
p r o t e c t e d v o i d doGet ( H t t p S e r v l e t R e q u e s t r e q u e s t ,
HttpServletResponse response )
throws ServletException , IOException {
ServletOutputStream out = r e s p o n s e .
getOutputStream ( ) ;
o u t . p r i n t l n ( " <html >" ) ;
o u t . p r i n t l n ( " <head >" ) ;
o u t . p r i n t l n ( " <title > Minha primeira pagina
dinamica </ title >" ) ;
o u t . p r i n t l n ( " </ head >" ) ;
o u t . p r i n t l n ( " <body >" ) ;
o u t . p r i n t l n ( " <h1 > Hello World !!! </ h1 >" ) ;
o u t . p r i n t l n ( " </ body >" ) ;
o u t . p r i n t l n ( " </ html >" ) ;
}
6 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Nosso primeiro exemplo

Habilitando a execucao da Servlet

Acabamos de definir uma Servlet, mas como iremos acessa-la


pelo navegador?
Qual o endereco podemos acessar para fazermos com que ela
execute?

7 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Nosso primeiro exemplo

Habilitando a execucao da Servlet

Acabamos de definir uma Servlet, mas como iremos acessa-la


pelo navegador?
Qual o endereco podemos acessar para fazermos com que ela
execute?
O container nao tem como saber essas informacoes, a nao ser
que digamos isso para ele
Para isso, vamos fazer um mapeamento de uma URL
especfica para uma servlet atraves do arquivo web.xml, que
fica dentro do WEB-INF

7 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Nosso primeiro exemplo

Web.xml
No arquivo web.xml configuramos todas as propriedades do
nosso projeto Java
A partir da versao 3.0 todas as configurac
oes podem ser
realizadas via annotations! Porem veremos isso so mais na
frente!
<? xml v e r s i o n=" 1.0 " e n c o d i n g=" UTF -8 " ?>
<webapp . . . >
<d i s p l a y name>M e u P r i m e i r o P r o j e t o 3 . 0</ d i s p l a y name>
<welcome f i l e l i s t >
<welcome f i l e >i n d e x . h t ml</ welcome f i l e >
<welcome f i l e >i n d e x . htm</ welcome f i l e >
<welcome f i l e >i n d e x . j s p</ welcome f i l e >
<welcome f i l e > d e f a u l t . ht m l</ welcome f i l e >
<welcome f i l e > d e f a u l t . htm</ welcome f i l e >
<welcome f i l e > d e f a u l t . j s p</ welcome f i l e >
</ welcome f i l e l i s t >
8 / 33
Ivo Calado
Programa
c
ao para Web
</webapp>

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Nosso primeiro exemplo

web.xml: tags servlet e servlet-mapping

Para configurarmos a execucao da Servlet criada pelo


Container fazemos uso da tag servlet
A tag servlet-mapping serve para criar um alias ou um
conjunto de aliases para referenciar a servlet

9 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Nosso primeiro exemplo

web.xml: exemplos de servlet e servlet-mapping


< s e r v l e t>
< s e r v l e t name>m i n h a P r i m e i r a S e r v l e t</ s e r v l e t name>
< s e r v l e t c l a s s>b r . edu . i f a l . M i n h a S e r v l e t</ s e r v l e t
c l a s s>
</ s e r v l e t>
< s e r v l e t mapping>
< s e r v l e t name>m i n h a P r i m e i r a S e r v l e t</ s e r v l e t name>
<u r l p a t t e r n>/ minhap a g i n a</ u r l p a t t e r n>
<u r l p a t t e r n>/ minhasegunda formadea c e s s o</ u r l
p a t t e r n>
<u r l p a t t e r n>/ end / l o n g o / p a r a / minha / p a g i n a /web</ u r l
p a t t e r n>
</ s e r v l e t mapping>

10 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Nosso primeiro exemplo

A estrutura de diretorios

Se voces notarem, o nosso endereco nao tem qualquer relacao


com a estrutura fsica do projeto
Trata-se de um referenciamento puramente virtual!

11 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Nosso primeiro exemplo

Exerccio

Crie sua primeira servlet. Ela deve implementar os metodos


doGet e doPost onde no doGet deve ser retornado uma pagina
com uma mensagem ao usuario e no doPost com a data do
dia.
Deve ser criado uma pagina HTML estatica que faca acesso
tanto via GET quanto via POST

12 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Nosso primeiro exemplo

Possveis erros comuns ate agora

Esquecer da barra inicial no URL pattern


Digitar errado o nome do pacote da sua servlet
Esquecer de colocar o nome da classe no mapeamento da
servlet

13 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Recuperando parametros passados


Ate agora vimos como requisitar uma pagina sem passar
qualquer parametros
Para recuperar os parametros passados em um formulario
usamos os metodos getParameter, getParameterMap,
getParameterNames, getParameterValues
Map<S t r i n g , S t r i n g [ ]> mapa = r e q u e s t . getParameterMap ( ) ;
P r i n t W r i t e r out = r e s p o n s e . g e t W r i t e r ( ) ;
f o r ( S t r i n g s : mapa . k e y S e t ( ) ) {
o u t . p r i n t l n ( " Chave : " + s ) ;
f o r ( S t r i n g s t r : mapa . g e t ( s ) ) {
o u t . p r i n t l n ( " Valor : " + s t r ) ;
}
out . p r i n t l n ( ) ;
14 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Atividade

Altere o exemplo anterior para inclur um formulario de


inscricao de uma pessoa. No lado servidor, recupere os valores
passados e salve em um arquivo XML formando uma agenda
de contatos.

15 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Tratando excecoes dentro da Servlet


O que acontece se alguma excecao for lancada na nossa
aplicacao?

16 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Tratando excecoes dentro da Servlet


O que acontece se alguma excecao for lancada na nossa
aplicacao?
a stacktrace da excecao ocorrida sera mostrada em uma tela
padrao do container
Qual o problema disso?

16 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Tratando excecoes dentro da Servlet


O que acontece se alguma excecao for lancada na nossa
aplicacao?
a stacktrace da excecao ocorrida sera mostrada em uma tela
padrao do container
Qual o problema disso?
O que seria ideal acontecer?

16 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Tratando excecoes dentro da Servlet


O que acontece se alguma excecao for lancada na nossa
aplicacao?
a stacktrace da excecao ocorrida sera mostrada em uma tela
padrao do container
Qual o problema disso?
O que seria ideal acontecer? O ideal seria mostrarmos uma
pagina de erro dizendo: Um erro ocorreu e com informacoes
de como notificar o administrador
Para fazermos isso, basta configurarmos nossa aplicacao
dizendo que, caso aconteca uma Exception no web.xml!

16 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Configurando excecoes no Web.xml

<e r r o r page>
<e x c e p t i o n type>j a v a . l a n g . E x c e p t i o n</ e x c e p t i o n type>
< l o c a t i o n>/ e r r o . ht m l</ l o c a t i o n>
</ e r r o r page>

17 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Tratando codigos de erros

O que acontece se tentarmos acessar uma pagina inexistente?

18 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Tratando codigos de erros

O que acontece se tentarmos acessar uma pagina inexistente?


Qual seria a abordagem mais apropriada?
<e r r o r page>
<e r r o r code>404</ e r r o r code>
< l o c a t i o n>/ 4 0 4 . h tm l</ l o c a t i o n>
</ e r r o r page>

18 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Enviando mensagem de erro

Pesquisar sobre o processo de envio de mensagens de erro e como


isso se relaciona com ponto anterior! Ver metodo
response.sendError

19 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Metodos Init e Destroy

Toda servlet deve possuir um construtor default


Metodos init e destroy sao chamados no incio e no fim do
ciclo de vida da servlet

20 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Metodos Init e Destroy

Toda servlet deve possuir um construtor default


Metodos init e destroy sao chamados no incio e no fim do
ciclo de vida da servlet
Quais seriam um possvel uso de tais metodos?

20 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Recuperando parametros iniciais do servlet


possvel definir parametros iniciais na servlet no web.xml e
E
recupera-lo no metodo init

21 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Recuperando parametros iniciais do servlet


possvel definir parametros iniciais na servlet no web.xml e
E
recupera-lo no metodo init
< s e r v l e t>
< d e s c r i p t i o n></ d e s c r i p t i o n>
<d i s p l a y name> S e r v l e t 1</ d i s p l a y name>
< s e r v l e t name> S e r v l e t 1</ s e r v l e t name>
< s e r v l e t c l a s s> S e r v l e t 1</ s e r v l e t c l a s s>
< i n i t param>
<paramname>Nome</paramname>
<paramv a l u e>V a l o r</paramv a l u e
>
</ i n i t param>
</ s e r v l e t>

21 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

Redirecionando paginas

Existem duas formas de realizar redirecionamento


sendRedirect: retorna um c
odigo ao browser indicando que ele
deve realizar o redirecionamento
forward: realiza o redirecionamento internamente
Alem disso, existe a possibilidade de utilizar o metodo include!!.

22 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

sendRedirect e forward
p r o t e c t e d v o i d doGet ( H t t p S e r v l e t R e q u e s t r e q u e s t ,
HttpServletResponse response )
throws ServletException , IOException {
r e s p o n s e . s e n d R e d i r e c t ( " http :// www . google . com " ) ;
}
p r o t e c t e d v o i d doGet ( H t t p S e r v l e t R e q u e s t r e q u e s t ,
HttpServletResponse response )
throws ServletException , IOException {
RequestDispatcher dispatcher = request .
g e t R e q u e s t D i s p a t c h e r ( " s2 " ) ;
dispatcher . forward ( request , response ) ;
}

23 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

include
p r o t e c t e d v o i d doGet ( H t t p S e r v l e t R e q u e s t r e q u e s t ,
HttpServletResponse response )
throws ServletException , IOException {
RequestDispatcher dispatcher = request .
g e t R e q u e s t D i s p a t c h e r ( " s2 " ) ;
dispatcher . include ( request , response ) ;
}

Qual a diferenca entre forward e include?

24 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

include
p r o t e c t e d v o i d doGet ( H t t p S e r v l e t R e q u e s t r e q u e s t ,
HttpServletResponse response )
throws ServletException , IOException {
RequestDispatcher dispatcher = request .
g e t R e q u e s t D i s p a t c h e r ( " s2 " ) ;
dispatcher . include ( request , response ) ;
}

Qual a diferenca entre forward e include?


forward: a servlet atual nao pode alterar a stream de sada
include: a servlet atual pode alterar (a pagina redirecionada e
inclusa na resposta original)

24 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Capturando excec
oes

include
p r o t e c t e d v o i d doGet ( H t t p S e r v l e t R e q u e s t r e q u e s t ,
HttpServletResponse response )
throws ServletException , IOException {
RequestDispatcher dispatcher = request .
g e t R e q u e s t D i s p a t c h e r ( " s2 " ) ;
dispatcher . include ( request , response ) ;
}

Qual a diferenca entre forward e include?


forward: a servlet atual nao pode alterar a stream de sada
include: a servlet atual pode alterar (a pagina redirecionada e
inclusa na resposta original)
Como inserir conte
udos padr
oes estaticos?
24 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

O que
e?

O que e?

Uma das caractersticas fundamentais do HTTP e nao possuir


estado. Mas o que viria a ser isso?

25 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

O que
e?

O que e?

Uma das caractersticas fundamentais do HTTP e nao possuir


estado. Mas o que viria a ser isso?
Isso que dizer que o HTTP nao guarda lembranca de
requisicoes anteriores
Qual o problema disso? Qual seria uma situacao onde guardar
informacoes de sess
oes e importante?
Login!
Sendo assim, precisamos, implementar em nvel de servlet, o
controle de sessao!

25 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

Quais abordagens existe?

Existem basicamente 4 formas de prover sessao


Reescrita de URL
Campos ocultos
Cookies
Objetos de sessao

26 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

1a abordagem: Reescrita de URL

Consiste em adicionar `as URLs de envio, identificadores da


sessao a ser acessada
Todos os forms, links etc que facam mencao a URL deve ser
alterado
Parametros sao enviados na URL

27 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

2a abordagem: Campos ocultos

Semelhante a abordagem anterior, porem o campo e enviado


como um atributo hidden no HTML
Nao sao visveis na URL mas sao facilmente recuperaveis!

28 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

3a abordagem: Cookies

Cookies sao pequenos pedacos de informacao passado em


requisicoes e respostas HTTP
Embora seja possvel criar um Cookie do lado cliente, ele e
gerado principalmente pelo servidor
Tem a estrutura de chave valor!
C o o k i e c1 = new C o o k i e ( " MeuCookie " , " MeuValor " ) ;
r e s p o n s e . a d d C o o k i e ( c1 ) ;

29 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

Definido tempo maximo de vida de um cookie


Nas abordagens anterioes os links e campos ocultos
permaneciam disponveis indefinidamente
Porem podemos querer definir um tempo limite para que a
sessao esteja disponvel por um tempo limite de inatividade!
Cookie possibilita tal recurso a partir da definicao da
propriedade maxAge
C o o k i e c1 = new C o o k i e ( " MeuCookie " , " MeuValor " ) ;
c1 . setMaxAge ( 1 0 0 0 ) ; // N
u mero de s e g u n d o s que o c o o k i e
permanecer
a no c l i e n t e . Ap
o s i s s o e l e e d e s c a r t a d o
e n
ao s e r
a mais e n v i a d o
r e s p o n s e . a d d C o o k i e ( c1 ) ;

30 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

HTTPSession
As abordagens anteriores possuem series restric
oes:
Atributos ocultos e reescrita de url deixam visveis todos os
campos
Apesar de mais difcei, os cookies tb podem ser visualizados!
Alem disso, temos de ter o trabalho de em todas as
solicitacoes adicionar as informac
oes a serem enviadas de
modo a manter o estado
A solucao e o HTTPSession!
Trata-se da maneira mais simples e facil de se trabalhar com
gerenciamento de sessao
mantido um mapa com todos os valores que a aplicacao
E
precisar armazenar
Possibilita o armazenamento de valores de tipos complexos
(nao apenas String)
31 / 33
Ivo Calado
Programac
ao para
Webidentificador da sess
Um
ao e automaticamente enviado via

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

Exemplo

HTTPSession s e s s i o n = r e q u e s t . g e t S e s s i o n ( t r u e ) ;
s e s s i o n . s e t A t t r i b u t e ( " chave " , new S t r i n g ( v a l o r ) )

32 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

Exemplo

HTTPSession s e s s i o n = r e q u e s t . g e t S e s s i o n ( t r u e ) ;
s e s s i o n . s e t A t t r i b u t e ( " chave " , new S t r i n g ( v a l o r ) )

Mas e se os cookies estiverem desabilitados?

32 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

Exemplo

HTTPSession s e s s i o n = r e q u e s t . g e t S e s s i o n ( t r u e ) ;
s e s s i o n . s e t A t t r i b u t e ( " chave " , new S t r i n g ( v a l o r ) )

Mas e se os cookies estiverem desabilitados? a sessao caira no


mesmo problema classico dos cookies. A solucao e enviar o id de
sessao por reescrita de url.
O objeto session gera um parametro jsessionid com o n
umero de
sessao.

32 / 33
Programac
ao para Web

Ivo Calado

IFAL

Introduc
ao

Praticando

Aprofundando...

Gerenciamento de Sess
ao

Quais abordagens existe?

Filtros

Suponha que tenhamos nossa aplicacao tenha 100 servlets e


desejamos adicionar verificacao de autenticacao em todos
eles. Teremos de verificar o id em todos os servlets?

33 / 33
Programac
ao para Web

Ivo Calado

IFAL

Das könnte Ihnen auch gefallen