Testes em Aplicações Web com Cactus
Sessões
Helder da Rocha (helder@acm.org) www.argonavis.com.br 1
Sessões
Como o HTTP não mantém estado de sessão, são as aplicações Web que precisam cuidar de mantê-lo quando necessário
Sessões representam um cliente
A sessão é única para cada cliente e persiste através de várias requisições request Cliente
request request session
request
2
Sessões
Sessões são representados por objetos HttpSession e são obtidas a partir de uma requisição
Dois métodos podem ser usados
HttpSession session = request.getSession(false);
Se a sessão não existir, retorna null, caso contrário retorna sessão.
HttpSession session = request.getSession();
Retorna a sessão ou cria uma nova. Mesmo que getSession(true)
Para saber se uma sessão é nova, use o método isNew() if (session.isNew()) { myObject = new BusinessObject();
} else { myObject = (BusinessObject) session.getAttribute("obj");
}
getSession() deve ser chamado antes de getOutputStream()*
Sessões podem ser implementadas com cookies, e cookies são definidos no cabeçalho HTTP (que é montado antes do texto)
*ou qualquer método que obtenha o stream de saída, como getWriter()
3
Compartilhamento de objetos na sessão
Dois métodos setAttribute("nome", objeto);
Object getAttribute("nome");
permitem o compartilhamento de objetos na sessão. Ex:
Requisição 1
String[] vetor = {"um", "dois", "tres"};
HttpSession session = request.getSession(); session.setAttribute("dados", vetor);
Requisição 2
HttpSession session = request.getSession();
String[] dados = (String[])session.getAttribute("dados");
Como a sessão pode persistir além do tempo de uma requisição, é possível que a persistência de alguns objetos não sejam desejáveis
Use removeAttribute("nome") para remover objetos da sessão
4
Gerência de sessões
Não há como saber que cliente não precisa mais da sessão
Pode-se definir um timeout em minutos para a duração de uma sessão desde a última