Estou pesquisando sobre padrões que possibilitem o controle de sessão do usuário de forma mais robusta do que simplesmente utilizar o objeto implícito [i]session[/i] do JSP. Se possível gostaria de algo que me permita fornecer visões de menu de acordo com a sessão.
Postei essa mensagem no fórum em paralelo a minha busca na bibliografia especializada.
Desde já agradeço as sugestões.
Abração,
Mick Knox.
Você pode usar campos hidden nos forms válidos para cada página. Algo que vá mudando a cada página navegada mais ou menos assim: campo01, campo02, …, campo999, etc. Assim tb impede o usuário de usar a tecla Back, pois se ele o fizer o campo hiden da página anterior não vai bater com aquele que o servido espera receber.
Antes de mais nada, obrigado pela atenção.
Estava lendo a minha mensagem anterior e percebi que não havia ficado clara minha intenção. Favor desculpar.
Como o próprio Calçado disse, o protocolo HTTP é [i]stateless[/i] e por causa disso fica um tanto quanto difícil fugir das famosas gambiarras com o Session.
Quando submetemos uma pesquisa em um banco e ela retorna uma Collection com o resultado, normalmente esse objeto é inserido como um atributo na sessão e fica vagando pra lá e pra cá. Certamente isso causa uma série de transtornos que não vejo necessidade de relatar aqui.
Uma das soluções que pensei para esse problema seria a criação de um singleton no servidor. Nesse singleton existiria um Map vinculando uma sessão a um bean onde seria guardada a Collection. De tempos em tempos o Singleton excluiria as entradas que tivessem o seu prazo de validade expirado (algo como último_acesso + 2 minutos).
Como esse problema é bastante comum, imagino que já exista algum padrão relacionado.
Grande abraço,
Mick Knox.
[quote=“mickknoxrs”]
Quando submetemos uma pesquisa em um banco e ela retorna uma Collection com o resultado, normalmente esse objeto é inserido como um atributo na sessão e fica vagando pra lá e pra cá. Certamente isso causa uma série de transtornos que não vejo necessidade de relatar aqui.[/quote]
Faz isso não, rapaz…
Coloque sua collection em request, e dê um forward para a JSP. Assim, o garbage collector vai limar ela, e você não tem mais que se preocupar
Coloque na session somente o indispensavel e aquilo que deve sobreviver a mais de 1 request.
Se você está colocando dados que são inuteis ao final de 1 requisição na session, pare um pouco e estude os varios escopos para variaveis existentes com servlets: page, request, session e application.
Não use singletons e sim uma variavel no escopo de aplicação.
Singletons em J2EE não devem ser usados.