1. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Programa¸˜o para Web
ca
Servlets
Ivo Calado
Instituto Federal de Educa¸˜o, Ciˆncia e Tecnologia de Alagoas
ca e
13 de Novembro de 2012
1 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
2. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Roteiro
1 Introdu¸˜o
ca
2 Praticando
3 Aprofundando...
4 Gerenciamento de Sess˜o
a
2 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
3. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Observa¸˜o sobre o conte´do
ca u
Parte deste material ´ baseada na apostila FJ-21 - Java para
e
Desenvolvimento Web desenvolvido pela Caelum
(www.caelum.com.br)
3 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
4. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Defini¸˜es
co
O que s˜o?
a
As Servlets s˜o a primeira forma que veremos de criar p´ginas
a a
dinˆmicas com Java
a
Criaremos classes que ter˜o a capacidade de gerar conte´do
a u
HTML!!
O nome “servlet” vem da ideia de um pequeno servidor
(servidorzinho, em inglˆs) cujo objetivo ´ receber chamadas
e e
HTTP, process´-las e devolver uma resposta ao cliente
a
4 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
5. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Defini¸˜es
co
A classe javax.servlet.http.HttpServlet
Trata-se da classe principal de uma servlet
Possui um m´todo gen´rico (service) e diversos m´todos
e e e
como espec´ıficos como doGet, doPost, doDelete, doPost e
outros representando as diversas opera¸˜es HTTP
co
5 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
6. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Defini¸˜es
co
A classe javax.servlet.http.HttpServlet
Trata-se da classe principal de uma servlet
Possui um m´todo gen´rico (service) e diversos m´todos
e e e
como espec´ıficos como doGet, doPost, doDelete, doPost e
outros representando as diversas opera¸˜es HTTP
co
O nosso papel ´ implement´-las!
e a
Cada um desses m´todos recebem como parˆmetro um objeto
e a
HttpServletRequest e um HttpServletResponse
representando a requisi¸˜o e a resposta!
ca
5 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
7. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Nosso primeiro exemplo
O m´todo doGet
e
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 Ivo Calado IFAL
Programa¸˜o para Web
ca
8. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Nosso primeiro exemplo
Habilitando a execu¸˜o da Servlet
ca
Acabamos de definir uma Servlet, mas como iremos acess´-la
a
pelo navegador?
Qual o endere¸o podemos acessar para fazermos com que ela
c
execute?
7 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
9. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Nosso primeiro exemplo
Habilitando a execu¸˜o da Servlet
ca
Acabamos de definir uma Servlet, mas como iremos acess´-la
a
pelo navegador?
Qual o endere¸o podemos acessar para fazermos com que ela
c
execute?
O container n˜o tem como saber essas informa¸˜es, a n˜o ser
a co a
que digamos isso para ele
Para isso, vamos fazer um mapeamento de uma URL
espec´
ıfica para uma servlet atrav´s do arquivo web.xml, que
e
fica dentro do WEB-INF
7 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
10. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Nosso primeiro exemplo
Web.xml
No arquivo web.xml configuramos todas as propriedades do
nosso projeto Java
A partir da vers˜o 3.0 todas as configura¸˜es podem ser
a co
realizadas via annotations! Por´m veremos isso s´ mais na
e o
frente!
<? xml v e r s i o n=" 1.0 " e n c o d i n g=" UTF -8 " ?>
<web−app . . . >
<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 >
8 / 33 </ welcome− f i l e − l i s t > Ivo Calado IFAL
</web−app>
Programa¸˜o para Web
ca
11. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Nosso primeiro exemplo
web.xml: tags servlet e servlet-mapping
Para configurarmos a execu¸˜o da Servlet criada pelo
ca
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 Ivo Calado IFAL
Programa¸˜o para Web
ca
12. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
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>/ minha−p 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>/ minha−segunda −forma−de−a 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 Ivo Calado IFAL
Programa¸˜o para Web
ca
13. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Nosso primeiro exemplo
A estrutura de diret´rios
o
Se vocˆs notarem, o nosso endere¸o n˜o tem qualquer rela¸˜o
e c a ca
com a estrutura f´
ısica do projeto
Trata-se de um referenciamento puramente virtual!
11 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
14. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Nosso primeiro exemplo
Exerc´
ıcio
Crie sua primeira servlet. Ela deve implementar os m´todos
e
doGet e doPost onde no doGet deve ser retornado uma p´gina
a
com uma mensagem ao usu´rio e no doPost com a data do
a
dia.
Deve ser criado uma p´gina HTML est´tica que fa¸a acesso
a a c
tanto via GET quanto via POST
12 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
15. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Nosso primeiro exemplo
Poss´
ıveis erros comuns at´ agora
e
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 Ivo Calado IFAL
Programa¸˜o para Web
ca
16. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Recuperando parˆmetros passados
a
At´ agora vimos como requisitar uma p´gina sem passar
e a
qualquer parˆmetros
a
Para recuperar os parˆmetros passados em um formul´rio
a a
usamos os m´todos getParameter, getParameterMap,
e
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 Ivo Calado IFAL
Programa¸˜o para Web
ca
17. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Atividade
Altere o exemplo anterior para inclur um formul´rio de
a
inscri¸˜o de uma pessoa. No lado servidor, recupere os valores
ca
passados e salve em um arquivo XML formando uma agenda
de contatos.
15 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
18. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Tratando exce¸oes dentro da Servlet
c˜
O que acontece se alguma exce¸˜o for lan¸ada na nossa
ca c
aplica¸˜o?
ca
16 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
19. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Tratando exce¸oes dentro da Servlet
c˜
O que acontece se alguma exce¸˜o for lan¸ada na nossa
ca c
aplica¸˜o?
ca
a stacktrace da exce¸˜o ocorrida ser´ mostrada em uma tela
ca a
padr˜o do container
a
Qual o problema disso?
16 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
20. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Tratando exce¸oes dentro da Servlet
c˜
O que acontece se alguma exce¸˜o for lan¸ada na nossa
ca c
aplica¸˜o?
ca
a stacktrace da exce¸˜o ocorrida ser´ mostrada em uma tela
ca a
padr˜o do container
a
Qual o problema disso?
O que seria ideal acontecer?
16 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
21. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Tratando exce¸oes dentro da Servlet
c˜
O que acontece se alguma exce¸˜o for lan¸ada na nossa
ca c
aplica¸˜o?
ca
a stacktrace da exce¸˜o ocorrida ser´ mostrada em uma tela
ca a
padr˜o do container
a
Qual o problema disso?
O que seria ideal acontecer? O ideal seria mostrarmos uma
p´gina de erro dizendo: “Um erro ocorreu” e com informa¸˜es
a co
de como notificar o administrador
Para fazermos isso, basta configurarmos nossa aplica¸˜o
ca
dizendo que, caso aconte¸a uma Exception no web.xml!
c
16 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
22. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Configurando exce¸oes no Web.xml
c˜
<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 Ivo Calado IFAL
Programa¸˜o para Web
ca
23. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Tratando c´digos de erros
o
O que acontece se tentarmos acessar uma p´gina inexistente?
a
18 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
24. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Tratando c´digos de erros
o
O que acontece se tentarmos acessar uma p´gina inexistente?
a
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 Ivo Calado IFAL
Programa¸˜o para Web
ca
25. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Enviando mensagem de erro
Pesquisar sobre o processo de envio de mensagens de erro e como
isso se relaciona com ponto anterior! Ver m´todo
e
response.sendError
19 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
26. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
M´todos Init e Destroy
e
Toda servlet deve possuir um construtor default
M´todos init e destroy s˜o chamados no in´ e no fim do
e a ıcio
ciclo de vida da servlet
20 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
27. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
M´todos Init e Destroy
e
Toda servlet deve possuir um construtor default
M´todos init e destroy s˜o chamados no in´ e no fim do
e a ıcio
ciclo de vida da servlet
Quais seriam um poss´ uso de tais m´todos?
ıvel e
20 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
28. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Recuperando parametros iniciais do servlet
´
E poss´ definir parˆmetros iniciais na servlet no web.xml e
ıvel a
recuper´-lo no m´todo init
a e
21 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
29. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Recuperando parametros iniciais do servlet
´
E poss´ definir parˆmetros iniciais na servlet no web.xml e
ıvel a
recuper´-lo no m´todo init
a e
< 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>
<param−name>Nome</param−name>
<param−v a l u e>V a l o r</param−v a l u e>
</ i n i t −param>
</ s e r v l e t>
21 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
30. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
Redirecionando p´ginas
a
Existem duas formas de realizar redirecionamento
sendRedirect: retorna um c´digo ao browser indicando que ele
o
deve realizar o redirecionamento
forward: realiza o redirecionamento internamente
Al´m disso, existe a possibilidade de utilizar o m´todo include!!.
e e
22 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
31. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
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 Ivo Calado IFAL
Programa¸˜o para Web
ca
32. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
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 diferen¸a entre forward e include?
c
24 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
33. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
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 diferen¸a entre forward e include?
c
forward: a servlet atual n˜o pode alterar a stream de sa´
a ıda
include: a servlet atual pode alterar (a p´gina redirecionada ´
a e
“inclusa” na resposta original)
24 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
34. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Capturando exce¸˜es
co
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 diferen¸a entre forward e include?
c
forward: a servlet atual n˜o pode alterar a stream de sa´
a ıda
include: a servlet atual pode alterar (a p´gina redirecionada ´
a e
“inclusa” na resposta original)
Como inserir conte´dos padr˜es est´ticos?
u o a
24 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
35. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
O que ´?
e
O que ´?
e
Uma das caracter´
ısticas fundamentais do HTTP ´ n˜o possuir
e a
estado. Mas o que viria a ser isso?
25 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
36. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
O que ´?
e
O que ´?
e
Uma das caracter´
ısticas fundamentais do HTTP ´ n˜o possuir
e a
estado. Mas o que viria a ser isso?
Isso que dizer que o HTTP n˜o guarda lembran¸a de
a c
requisi¸˜es anteriores
co
Qual o problema disso? Qual seria uma situa¸˜o onde guardar
ca
informa¸˜es de sess˜es ´ importante?
co o e
Login!
Sendo assim, precisamos, implementar em n´ de servlet, o
ıvel
controle de sess˜o!
a
25 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
37. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Quais abordagens existe?
Quais abordagens existe?
Existem basicamente 4 formas de prover sess˜o
a
Reescrita de URL
Campos ocultos
Cookies
Objetos de sess˜o
a
26 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
38. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Quais abordagens existe?
1a abordagem: Reescrita de URL
Consiste em adicionar `s URLs de envio, identificadores da
a
sess˜o a ser acessada
a
Todos os forms, links etc que fa¸am men¸˜o a URL deve ser
c ca
alterado
Parˆmetros s˜o enviados na URL
a a
27 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
39. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Quais abordagens existe?
2a abordagem: Campos ocultos
Semelhante a abordagem anterior, por´m o campo ´ enviado
e e
como um atributo hidden no HTML
N˜o s˜o vis´
a a ıveis na URL mas s˜o facilmente recuper´veis!
a a
28 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
40. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Quais abordagens existe?
3a abordagem: Cookies
Cookies s˜o pequenos “peda¸os” de informa¸˜o passado em
a c ca
requisi¸˜es e respostas HTTP
co
Embora seja poss´ criar um Cookie do lado cliente, ele ´
ıvel 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 Ivo Calado IFAL
Programa¸˜o para Web
ca
41. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Quais abordagens existe?
Definido tempo m´ximo de vida de um cookie
a
Nas abordagens anterioes os links e campos ocultos
permaneciam dispon´ıveis indefinidamente
Por´m podemos querer definir um tempo limite para que a
e
sess˜o esteja dispon´ por um tempo limite de inatividade!
a ıvel
Cookie possibilita tal recurso a partir da defini¸˜o da
ca
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´ mero de s e g u n d o s que o c o o k i e
u
p e r m a n e c e r ´ no c l i e n t e . Ap´ s i s s o e l e ´ d e s c a r t a d o
a o e
e n˜ o s e r ´ m a i s e n v i a d o
a a
r e s p o n s e . a d d C o o k i e ( c1 ) ;
30 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
42. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Quais abordagens existe?
HTTPSession
As abordagens anteriores possuem s´ries restri¸˜es:
e co
Atributos ocultos e reescrita de url deixam vis´ıveis todos os
campos
Apesar de mais dif´ ıcei, os cookies tb podem ser visualizados!
Al´m disso, temos de ter o trabalho de em todas as
e
solicita¸˜es adicionar as informa¸˜es a serem enviadas de
co co
modo a manter o estado
A solu¸˜o ´ o HTTPSession!
ca e
Trata-se da maneira mais simples e f´cil de se trabalhar com
a
gerenciamento de sess˜o a
´
E mantido um mapa com todos os valores que a aplica¸˜o ca
precisar armazenar
Possibilita o armazenamento de valores de tipos complexos
31 / 33 (n˜o apenas String)
a Ivo Calado IFAL
Programa¸˜o para Webidentificador da sess˜o ´ automaticamente enviado via
ca Um a e
43. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
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 Ivo Calado IFAL
Programa¸˜o para Web
ca
44. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
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 Ivo Calado IFAL
Programa¸˜o para Web
ca
45. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
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 sess˜o cair´ no
a a
mesmo problema cl´ssico dos cookies. A solu¸˜o ´ enviar o id de
a ca e
sess˜o por reescrita de url.
a
O objeto session gera um parˆmetro jsessionid com o n´mero de
a u
sess˜o.
a
32 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca
46. Introdu¸˜o
ca Praticando Aprofundando... Gerenciamento de Sess˜o
a
Quais abordagens existe?
Filtros
Suponha que tenhamos nossa aplica¸˜o tenha 100 servlets e
ca
desejamos adicionar verifica¸˜o de autentica¸˜o em todos
ca ca
eles. Teremos de verificar o id em todos os servlets?
33 / 33 Ivo Calado IFAL
Programa¸˜o para Web
ca