Olá ! Estou a muito tempo procurando uma solução a respeito do assunto e não encontro. É o seguinte: Estou construindo um fórum. Gostaria de listar os Usuários que estão logados no sistema.
Ex:
Rômulo - Online
Patrícia - Ofline
Nas minhas pesquisas, conclui que tenho que implementar uma interface que me dá acesso aos métodos sessionCreated e sessionDestroyed. Consegui, pelo menos, criar minhas classe, mas não sei onde devo instanciar essa classe para que a mesma funcione !
Segue meu código:
[code]package pckUsuarioLogados;
import javax.servlet.;
import javax.servlet.http.;
/**
*
-
@author Rômulo Barros
*/
public class UsuariosLogados implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent e){
// Como devo proceder para armazenar o usuário neste momento??
}
public void sessionDestroyed(HttpSessionEvent e){
// Como devo proceder para apagar o usuário neste momento???
}
}[/code]
Tenho que armazenar os logins dos usuários que se logaram no sistema. Esse local de armazenamento deverá estar disponível para todos os usuário. Deu pra entender?
A minha sugestão é que vc faça uma classe tipo : “CentralDeUsuarios”, que seja singleton, e a cada sessão destruida vc remove da central, e no momento do login vc adiciona.
Ex:
// seu session listener
public void sessionCreated(HttpSessionEvent e){
}
public void sessionDestroyed(HttpSessionEvent e){
// Como devo proceder para apagar o usuário neste momento????
Usuario u = (Usuario) e.getSession().getAttribute("usuariologado");
if (u != null) {
CentralDeUsuarios central = CentralDeUsuarios .getInstance();
central.adicionar( u );
}
}
Sua classe de central de usuarios:
// ela deve ser singleton.
private Map usuarios = new HashMap();
public void add(Usuario u) {
usuarios.put(u.getLogin(), u);
}
public void remove(Usuario u) {
usuarios.remove(u.getLogin());
}
public void obterTodosUsuarios() {
return usuarios.values();
}
[]'s
Certo. Mas… qualquer usuário do site poderá ver quem tá online com isso??
O quê é singleton?
Onde devo instanciar essa classe??? ou é automático?? assim que a sessão é criado o método é disparado???
Sim
http://www.guj.com.br/java.tutorial.artigo.137.1.guj
[quote=Undeclared Identifier]
Onde devo instanciar essa classe??? ou é automático?? assim que a sessão é criado o método é disparado???[/quote]
O SessionListener vc ñ instancia. Vc coloca no web-xml a declaração dele e o container o instanciará e chamará os métodos quando a sessão for criada/destruida.
Cuidado que o lance da sessão ser criada ñ significa que o usuário está logado.
Por isso que vc deverá adicionar o usuário na sua “Central de Usuários” no momento que o usuário logar.
Já a Central de Usuários, se ela for Singleton o instanciamento será “transparente”…
Valeu, cara !
Essa parada de Desig Patterns é maneira ! :lol:
As vezes eu me perdia muito instanciando o que não devia e criando novos repositório… Vai ajudar bastante ! Obrigado !
Em relação a minha dúvida, inicialmente irei codificar uma página de teste para exibir um “Contador de Acessos” ! Após isso, postarei aqui, neste mesmo tópico, um pedido de ajuda para configurar o arquivo WEB-XML !
Não posso agora pq estou no trabalho, mas sempre levo esses novos conceitos para estudar em casa ( novo conceito pra mim rs rs )
Valeu, Brow ! 8)
tenho a msm dificuldade de controlar os usuários…
to tetando de várias formas… preciso fazer um contador… saber qnd alguem entrou e saiu… limitar numero de pessoas conectadas…
se conseguir fazer posta ai… eu to tentando aki tbm! qlq vitoria aki aviso!
vlw galera!
Implementei e deu certo, mas estou com problemas quando o usuário não clica no botão sair do sistema e então fecha o browser ou fecha a aba. O ideal é eu invalidar a sessão quando ele fizer isso. Li que tem como fazer com javascript, mas alguem tem algum exemplo, não consegui ainda.