Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
Contador usuarios conectados II
Enviado por getparameter el día 7 de diciembre de 2003
Intento llevar una cuenta de los usuarios que estan conectados a un site al mismo timpo, buscando he encontrado este codigo ...
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
public class SessionCounter implements HttpSessionListener {
public static int getActiveSessions() {
return activeSessions;
}
}
pero no me funciona :( .... lo que he hecho es compilar el .java (OK), meter la clase en el WEB-INF/classes/ de la aplicacion e intentar cargarla en el index para probar .... ERROR
Otra seria meterlo en el web.xml para que este disponible para todos los jsp ... pero como ???
Se aceptan sugerencias .... o soluciones alternativas ....
A ver, lo que tienes es un Listener (la clase hereda de HttpSessionListener) así que tienes que indicar en el web.xml que la aplicación "coloque" esa clase "a la escucha" de las sesiones.
Para el caso de ContextListener (que es lo que yo manejo más) se hace dentro de <web-app> con un elemento llamado <listener>. Te pongo el ejemplo:
En el caso de las sesiones no estoy del todo seguro cómo hacerlo. Busca un apartado "session" dentro del web.xml (he de reconocer que no lo conozco muy bien... cada día descubro algo nuevo de ese archivo).
A ver si con esto te orientas un poco... y cuando encuentres dónde colocarlo y cómo acceder al número de sesiones y demás lo pones por aquí, vale?
public class SessionCounter implements HttpSessionListener {
private static int activeSessions = 0;
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
}
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0){
activeSessions--;
}
}
public static int getActiveSessions() {
return activeSessions;
}
}
... la clase la metemos en el WEB-INF/classes/com/stardeveloper/web/listener/SessionCounter.class
Para que tire debemos tocar el web.xml del WEB-INF/ de nuestra aplicacion incorporando este bloque ...
pero cuidando donde lo metemos pues el orden de los tags de este fichero es importante, en el original no se aclara este tema, copio mi web.xml a modo de ejemplo ....
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
<web-app>
<display-name>Nombre de tu aplicacion</display-name>
Debeis abrir nuevas ventanas del navegador para chequear que funciona (nada de Ctrl + u) ... la suma la hace instantaneamente, lo de la resta (cuando se destruye una session), por lo menos a mi me va mas lenta y hay que esperar un instante para que la realice, meted una salida de sistema dentro de la clase para chequear que esta entrando por cada uno de los metodos (session Created() y session Destroyed() segun el caso) ... algo asi como System.out.println("Entro en .... "); vereis que funciona ....
Me ha parecido tremendamente útil la información que has subido, pero tengo un problema....
Tarbajo con jsp y claro, solo con abrir la página principal de mi aplicación, aunque no te loguees, la sesion te la crea al mostrarte la página... y digamos que eso no es precisamente lo que estaba buscando, pues necesito los usuarios conectados REALMENTE, o al menos que esten logueados o lo hayan estado (teniendo en cuenta el tiempo que tarda en eliminarse la sesion)
Puede parecer un "capricho" pero realmente es un problema, pues: cuando en la aplicación se hace un logout, yo me encargo de eliminar la sesion (y con los System.out.println.... veo que realmente la elimina) pero la página de logout me redirige a la principal, que es jsp.... y vuelta a empezar.... de nuevo la sesion creada.
No se si podras ayudarme pero de todas formas, gracias...
;)