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
- 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: 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.)
- 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.
- (Opcional) Emita como saída uma página de resposta HTML contendo os dados do objeto
HttpSession.
- 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.
- (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.
- 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>");
}
}