Desenvolvendo o gerenciamento de sessão em servlets

Sobre Esta Tarefa

Essas informações, combinadas ao exemplo de codificação SessionSample.java, fornecem um modelo de programação para a implementação de sessões em seus próprios servlets.

Procedimento

  1. Obtenha o objeto HttpSession.

    Para obter uma sessão, use o método getSession do objeto javax.servlet.http.HttpServletRequest na API do Java™ Servlet 3.0.

    Ao obter o objeto HttpSession pela primeira vez, o recurso Gerenciamento de Sessão utiliza uma entre três maneiras para estabelecer o rastreamento da sessão: cookies, regravação de URL ou informações SSL (Secure Sockets Layer).
    Recurso Reprovado Recurso Reprovado: O rastreamento de sessão que utiliza o ID de SSL foi reprovado no WebSphere Application Server versão 7.0. É possível configurar o rastreamento de sessão para utilizar cookies ou modificar o aplicativo para utilizar regravação de URL.depfeat

    Suponhamos que o recurso Gerenciamento de Sessão utilize cookies. Nesse caso, o recurso Gerenciamento de Sessão cria um ID de sessão exclusivo e, geralmente, o envia de volta ao navegador como um cookie. Cada pedido subseqüente desse usuário (no mesmo navegador) transmite o cookie que contém o ID da sessão e o recurso Gerenciamento de Sessão utiliza esse ID para localizar o objeto HttpSession existente do usuário.

    Na Etapa 1 da amostra do código, Boolean(create) está definido para true para que o objeto HttpSession seja criado, se ele ainda não existir. (Com a API Servlet 2.3 e posterior, o método javax.servlet.http.HttpServletRequest.getSession() sem booleano é padronizado como true e criará uma sessão, se ainda não existir uma para este usuário.)

  2. Armazene e recupere os dados definidos pelo usuário na sessão.

    Depois de uma sessão ser estabelecida, é possível incluir e recuperar dados definidos pelo usuário para a sessão. O objeto HttpSession possui métodos semelhantes àqueles no java.util.Dictionary para incluir, recuperar e remover objetos Java arbitrários.

    Na Etapa 2 do código de exemplo, o servlet lê um objeto inteiro do HttpSession, incrementa-o e grava-o de volta. É possível utilizar qualquer nome para identificar valores no objeto HttpSession. O exemplo de código utiliza o nome sessiontest.counter.

    Como o objeto HttpSession é compartilhado entre os servlets que o usuário pode acessar, considere a adoção de convenção de nomenclatura em todo o site, para evitar conflitos.

  3. (Opcional) Emita como saída uma página de resposta HTML contendo os dados do objeto HttpSession.
  4. Forneça feedback ao usuário, informando que uma ação foi executada durante a sessão. É possível querer transmitir o código HTML ao navegador do cliente, indicando que ocorreu uma ação. Por exemplo, na etapa 3 da amostra de código, o servlet gera uma página da Web que é retornada ao usuário e exibe o valor do sessiontest.counter toda vez que o usuário visita essa página da Web durante a sessão.
  5. (Opcional) Notifique os Listeners. Os objetos armazenados em uma sessão que implementa a interface javax.servlet.http.HttpSessionBindingListener são modificados quando a sessão estiver se preparando para finalizar e tornar-se invalidada. Este aviso permite que você execute processamento pós-sessão, incluindo o salvamento permanente das mudanças de dados feitas durante a sessão em um banco de dados.
  6. Finalize a sessão. A sessão pode ser finalizada:
    • Automaticamente com o recurso Gerenciamento da Sessão, se uma sessão estiver inativa por um tempo especificado. Os administradores fornecem uma maneira para especificar a quantidade de tempo depois da qual uma sessão deve ser invalidada.
    • Codificando o servlet para chamar o método invalidate() no objeto da sessão.

Exemplo

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class SessionSample  extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)  
       throws ServletException, IOException {


   // Etapa 1: Obter o objeto Session
 
      boolean create = true;         
      HttpSession session = request.getSession(create);
 
   // Etapa 2: Obter valor de dados da sessão


      Integer ival = (Integer)              
      session.getAttribute ("sessiontest.counter");         
      if (ival == null) ival = new Integer (1);         
      else ival = new Integer (ival.intValue () + 1);           
      session.setAttribute ("sessiontest.counter", ival);       

   // Etapa 3: Emitir a página

      response.setContentType("text/html"); 
      PrintWriter out = response.getWriter(); 
      out.println("<html>");  
      out.println("<head><title>Session Tracking Test</title></head>");
      out.println("<body>");
      out.println("<h1>Session Tracking Test</h1>");
      out.println ("You have hit this page " + ival + " times" + "<br>");
      out.println ("Your " + request.getHeader("Cookie"));
      out.println("</body></html>");    
   }
}

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprs_sesi
Nome do arquivo: tprs_sesi.html