Contador usuarios conectados II
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 {
private static int activeSessions = 0;
/* Session Creation Event */
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
}
/* Session Invalidation Event */
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0)
activeSessions--;
}
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 ....
Eu
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
public class SessionCounter implements HttpSessionListener {
private static int activeSessions = 0;
/* Session Creation Event */
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
}
/* Session Invalidation Event */
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0)
activeSessions--;
}
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 ....
Eu
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:
<listener>
<listener-class>MiClaseEscucha</listener-class>
</listener>
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?
Salu2
Ken
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:
<listener>
<listener-class>MiClaseEscucha</listener-class>
</listener>
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?
Salu2
Ken
Al fin lo he conseguido .... la solucion la encontre en http://stardeveloper.com/articles/display.html?article=2001112001&page=1 ... copio codigo resumido para el que pueda interesarle ...
Lo primero es crear la clase SessionCounter.class a partir de este SessionCounter.java ...
package com.stardeveloper.web.listener;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
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 ...
<listener>
<listener-class>
com.stardeveloper.web.listener.SessionCounter
</listener-class>
</listener>
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>
<!-- Listeners -->
<listener>
<listener-class>com.stardeveloper.web.listener.SessionCounter</listener-class>
</listener>
<!-- lo que ya tengais en el web.xml -->
</web-app>
Revisad la version de la DTD, yo tenia la web-app_2.2.dtd y arrojaba error, la cambie por esta sin mas y sanseacabo .... restart Tomcat y ya ....
El codigo del jsp encargadod e mostrar la info es algo asi ...
<%@page language="java" import="com.stardeveloper.web.listener.SessionCounter" contentType="text/html; charset=ISO-8859-1" %>
<html>
<head>
</head>
<body>
Usuarios conectado:<%= SessionCounter.getActiveSessions() %>
</body>
</html>
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 ....
Cualquier duda escribidme, prometo responder ..... :)
Y gracias Ken x el interes ....
Eu
Lo primero es crear la clase SessionCounter.class a partir de este SessionCounter.java ...
package com.stardeveloper.web.listener;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
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 ...
<listener>
<listener-class>
com.stardeveloper.web.listener.SessionCounter
</listener-class>
</listener>
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>
<!-- Listeners -->
<listener>
<listener-class>com.stardeveloper.web.listener.SessionCounter</listener-class>
</listener>
<!-- lo que ya tengais en el web.xml -->
</web-app>
Revisad la version de la DTD, yo tenia la web-app_2.2.dtd y arrojaba error, la cambie por esta sin mas y sanseacabo .... restart Tomcat y ya ....
El codigo del jsp encargadod e mostrar la info es algo asi ...
<%@page language="java" import="com.stardeveloper.web.listener.SessionCounter" contentType="text/html; charset=ISO-8859-1" %>
<html>
<head>
</head>
<body>
Usuarios conectado:<%= SessionCounter.getActiveSessions() %>
</body>
</html>
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 ....
Cualquier duda escribidme, prometo responder ..... :)
Y gracias Ken x el interes ....
Eu
