diferença entre session e request

Bom dia galera do GUJ,

Ontem lá no meu serviço tinha aparecido la um problema, que me deixou 1 hora e meia pensando em cima de 10 linhas de código… e eu não sabia o por que do problema.
pensando com uns caras lá , eles me disseram pra substituir session por request em todos os lugares em que estavam

HttpSession session = request.getSession(true); session.setAttribute("blabla", taltal);

por que era assim, eu tinha em uma servlet que tinha tres resultset diferentes, eles me retornavam 3 arraylist e jogavam na sessao.
depois em uma unica pagina JSP eu deveria pegar esses tres arraylist e exibir em um combobox so que sempre dava problema de nullpointerexeption em um dos objetos.

no jsp, em todos os lugares que tinham

 session.getAttribute() 

eu substitui por

request.getAttribute() .

na servlet a mesma coisa e ai deu certo, funcionou. Ai pediram pra eu estudar a diferença entre jogar na session e jogar na request, e como bom estagiario que sou eu fui atraz so que isso parece ser meio dificil de achar por ai.
entao gostaria de uma ajuda, se alguem puder me explicar, ou me dar algum material.
muito obrigado.

Olá!

Bom, a sessão é algo que se extende até que o usuário feche o navegador ou que a sessão expire, muitas vezes por um tempo determinado no próprio projeto (ex. 10 minutos). Já request, é apenas na requisição de uma página, seja pelo método get ou post (ex. através de um link ou botão).

Dessa forma, se você manter um objeto na sessão, todos as páginas pelas quais um usuário navegar estarão aptas a pegar e utilizar este objeto. Sendo assim, dependendo da situação isso pode ser ruim.

Até!

Fala galera… desculpa ressucitar este post, mas, por que pode ser ruim usar session? a ideia de um sistema de compras com carrinho, por exemplo, deve ser utilizado session, não? alguem pode me dizer se isto realmente seria um problema e se for, qual é o problema?

Estou estudando servlets, jsp, jstl, etc e estou tentando fazer um sistema de compras com carrinho…

abraços

Olá…

É uma questão de escopo, você deve avaliar o que é interessante a ser usado no seu contexto.Por exemplo:

Objetos compartilhados usando ServletRequest: são acessíveis apenas durante uma requisição;
Objetos compartilhados usando HttpSession: são acessíveis enquanto durar a sessão;
E objetos compartilhados usando ServletContext: são acessíveis durante a vida do aplicativo web.

Att

Session vc está jogando tudo para o browser do cliente. É aconselhável jogar apenas coisas mega ultra necessárias que sejam necessárias na navegação dele.Por exemplo usuário.

Agora, se o cara faz uma consulta no db por clientes. Após exibir essas informações, não tem pq guardar essa informação para ele. Requests são coisas temporárias. O cara pergunta algo, tem sua resposta e morre aí. Mas vamos supor que a partir dessa lista que foi retornada, ele queira atualizar o josé, basta enviar o id do josé no request, e alterá-lo. Não existe a necessidade de buscar na sessão novamente.

C ya