Boa tarde…
Tenho muitas dúvidas sobre sessoes no java:
1 - Quando estamos trabalhando com páginas JSP o servlet capta a URL e armazena no objeto request, esses parâmetos são gravados também em uma sessao?
2 - Quando devo usar getSession() e qundo usar o getSession(true ou false) com os devido parametros?
3 - Pra eu usar a sessão dentro de uma página JSP devo sempre instanciar um objeto nesta página?
4 - Como posso recuperar os dados de uma sessão? existe um método equivalente a request.getQueryString()?
5 - Estou criando uma sessão no meu servlet, mas não sei quando finalizar esta sessão.
6 - O que devo usar para persistir os dados por toda a sessão, os parâmetos do request ou um objeto HttpSession?
if(sessao.isNew())
{
Integer contAcessos = new Integer(0);
System.out.println("Criando uma nova sessão!!!");
sessao.setAttribute("contAcessos", contAcessos);
System.out.println("O Id da sessão é -- " + sessao.getId());
}
Integer contAcessos = (Integer)sessao.getAttribute("contAcessos");
contAcessos = new Integer(contAcessos.intValue() + 1);][/code]
Sei que são muitas perguntas, ficarei muito agradecido por cada resposta. Muito obrigado!
Pense na HttpSession como uma região de memória compartilhada por todas as requisições feitas pelo mesmo usuário.
Os dados não são armazenados automaticamente na HttpSession, vc precisa fazer isso por conta própria. Vc tipicamente
o fará quando vc precisar se lembrar de alguma informação que fora recebida em uma requisição anterior.
Obrigado Rafael…
Então, seria uma boa prática eu ir gravando tudo que é importante na session com o método setAtribute?
e vc sabe se nas págias eu preciso instanciar sempre?
Basta chamar HttpServletRequest.getSession() para obter a sessão. O objeto será o mesmo p/ todas as páginas
acessadas por aquele usuário, enquando o método invalidate() de HttpSession ñ for chamado. E vc ñ precisa
se preocupar em guardar td na sessão, isso ñ é muito bom pois vai aumentar o consumo de memória do servidor.
Guarde na sessão apenas as informações q vc precisa se usar em futuras requisições, e lembre-se se retirar essas
informações da sessão quando elas ñ forem mais necessárias.
1 - não, ficam na request.
2- use getSession para manipular sessão (ler/alterar). o getSession(true) retorna uma sessão, se ela não existir ele retorna uma nova sessão.
O getSession(false) retorna uma sessão, se ela não existir ele retorna nulo.
3 - Não necessariamente.
4 - Sim, request.getSession().getAttribute(attribute), mais aí volta um Object, que pode ser String ou não.
5 - Procure não criar nada na sessão, só em último caso. A sessão sempre existirá, vc pode remover coisas dela para deixar mais leve possível.
6 -Um atributo que você jogará dentro de um HttpSession