Como funciona a HttpSession no java

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?

Eu criei meu Servlet desta forma:

[code]
HttpSession sessao = request.getSession();
if(sessao.isNew()== false )
{
sessao.invalidate();
sessao = request.getSession(true);
}

	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

muito obrigado galera…
muito esclarecedor…
só mais uma pergunta, eu devo usar em todas páginas jsp a diretiva <%@ session = true %> ?

Eu também tenho uma pergunta:

1- Qual relação existe entre sessão e cookie?? Essa relação é inerente??

Alguém poderia ajudar com essa dúvida? =D

caras… tirei algumas dúvidas consultando a documentação da interface HttpSession, talvez ajude vcs tbm, segue o link:

http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpSession.html#setAttribute(java.lang.String, java.lang.Object)