SlideShare a Scribd company logo
1 of 46
Download to read offline
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

More Related Content

Similar to Java Servlets

Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorDickson S. Guedes
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma JavaEteg
 
Java: o que estudar para o mercado de trabalho
Java: o que estudar para o mercado de trabalhoJava: o que estudar para o mercado de trabalho
Java: o que estudar para o mercado de trabalhoPedro Cavalero
 
Pentaho data integration
Pentaho data integrationPentaho data integration
Pentaho data integrationPedro Neto
 
Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Emerson Saito
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves PagesAmanda Luz
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Rodrigo Marinho
 
Certificacoes java
Certificacoes javaCertificacoes java
Certificacoes javaBruno Garcia
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos JavaMarcio Marinho
 
Apresentação java
Apresentação javaApresentação java
Apresentação javamunosai
 
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPBoas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPjesuinoPower
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no javaPedro Cavalero
 
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228MoisesInacio
 
Guia para o Profissional Java
Guia para o Profissional JavaGuia para o Profissional Java
Guia para o Profissional Javaarmeniocardoso
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitFlávio Lisboa
 
Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizBruno Henrique - Garu
 

Similar to Java Servlets (20)

Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
Inovando na Plataforma Java
Inovando na Plataforma JavaInovando na Plataforma Java
Inovando na Plataforma Java
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma Java
 
Mobicents - Plataforma VoIP Open Source
Mobicents - Plataforma VoIP Open SourceMobicents - Plataforma VoIP Open Source
Mobicents - Plataforma VoIP Open Source
 
Java: o que estudar para o mercado de trabalho
Java: o que estudar para o mercado de trabalhoJava: o que estudar para o mercado de trabalho
Java: o que estudar para o mercado de trabalho
 
Pentaho data integration
Pentaho data integrationPentaho data integration
Pentaho data integration
 
Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves Pages
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015
 
Certificacoes java
Certificacoes javaCertificacoes java
Certificacoes java
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPBoas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no java
 
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
 
Guia para o Profissional Java
Guia para o Profissional JavaGuia para o Profissional Java
Guia para o Profissional Java
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 
Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais feliz
 
Introdução - Java WEB
Introdução - Java WEBIntrodução - Java WEB
Introdução - Java WEB
 
Compweek
CompweekCompweek
Compweek
 

More from Ivo Calado

Tutorial sobre Jquery
Tutorial sobre JqueryTutorial sobre Jquery
Tutorial sobre JqueryIvo Calado
 
Tutorial sobre Bootstrap
Tutorial sobre BootstrapTutorial sobre Bootstrap
Tutorial sobre BootstrapIvo Calado
 
Programação para Kernel Linux - Parte 2
Programação para Kernel Linux - Parte 2Programação para Kernel Linux - Parte 2
Programação para Kernel Linux - Parte 2Ivo Calado
 
Programação para Kernel Linux - Parte 1
Programação para Kernel Linux - Parte 1Programação para Kernel Linux - Parte 1
Programação para Kernel Linux - Parte 1Ivo Calado
 
Introdução a eXtensible Markup Language (XML)
Introdução a eXtensible Markup Language (XML)Introdução a eXtensible Markup Language (XML)
Introdução a eXtensible Markup Language (XML)Ivo Calado
 
XHTML: eXtensible Hypertext Markup Language
XHTML: eXtensible Hypertext Markup LanguageXHTML: eXtensible Hypertext Markup Language
XHTML: eXtensible Hypertext Markup LanguageIvo Calado
 

More from Ivo Calado (9)

Tutorial sobre Jquery
Tutorial sobre JqueryTutorial sobre Jquery
Tutorial sobre Jquery
 
Tutorial sobre Bootstrap
Tutorial sobre BootstrapTutorial sobre Bootstrap
Tutorial sobre Bootstrap
 
Programação para Kernel Linux - Parte 2
Programação para Kernel Linux - Parte 2Programação para Kernel Linux - Parte 2
Programação para Kernel Linux - Parte 2
 
Programação para Kernel Linux - Parte 1
Programação para Kernel Linux - Parte 1Programação para Kernel Linux - Parte 1
Programação para Kernel Linux - Parte 1
 
Introdução a eXtensible Markup Language (XML)
Introdução a eXtensible Markup Language (XML)Introdução a eXtensible Markup Language (XML)
Introdução a eXtensible Markup Language (XML)
 
XHTML: eXtensible Hypertext Markup Language
XHTML: eXtensible Hypertext Markup LanguageXHTML: eXtensible Hypertext Markup Language
XHTML: eXtensible Hypertext Markup Language
 
Javascript
JavascriptJavascript
Javascript
 
HTML
HTMLHTML
HTML
 
CSS
CSSCSS
CSS
 

Java Servlets

  • 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