package MeuPacote;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Sessoes implements HttpSessionListener {
private static int sessions = 0;
public void sessionDestroyed (HttpSessionEvent se) {
if (session > 0)
sessions--;
HttpSession s = getSession();
}
public HttpSession getSession() {
HttpSession se = request.getSession(false);
return se;
}
public void sessionCreated (HttpSessionEvent se) {
sessions++;
}
public static int getSessoesAtivas() {
return sessions;
}
}
Recuperando variavel na sessão invalidada
10 Respostas
você está fazendo:
request.getSession( false );
mas … de onde saiu este objeto “request”?
hehe declara ele cara!
essa eh a minha duvida!!! se eu tiver mesmo que usar a variavel request, como eu declaro ela???
package pacote;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Sessoes implements HttpSessionListener {
private static int sessions = 0;
String var;
public void sessionDestroyed (HttpSessionEvent se) {
if (sessions > 0)
sessions--;
HttpSession session = se.getSession();
var = (String) session.getAttribute("var");
}
public void sessionCreated (HttpSessionEvent se) {
sessions++;
}
public static int getSessoesAtivas() {
return sessions;
}
}
Cara, sessionDestroyed é chamado logo após a sessão ser invalidada.
Infelizmente não há um listener do tipo beforeDestroy(), então terá que implementar algo diferente.
Aqui há algo que talvez seja uma solução para você:
http://www.junlu.com/msg/37695.html
valeu pela ajuda, LIPE!!!
seguindo tua dica, tentei implementa o HttpSessionActivationListener (que chama "sessionWillPassivate (HttpSessionEvent se)" quando a sessão está preste a ser destruida) e o HttpSessionBindingListener (que chama "valueUnbound(HttpSessionBindingEvent event)" quando a sessão foi destruida), mas nenhum desses dois funciona! o unico que deu certo foi o "sessionDestroyed" da interface HttpSessionListener!!
package pacote;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Sessoes implements HttpSessionActivationListener {
public static int sessions;
public void sessionWillPassivate (HttpSessionEvent se) {
HttpSession session = se.getSession(); //Recupera a sessão que foi inativada
String var = (String) session.getAttribute("var");
if (sessions > 0)
sessions--;
}
public void sessionDidActivate (HttpSessionEvent se) {
sessions++;
}
public static int getSessoesAtivas() {
return sessions;
}
}
Voce precisa de 1 servlet container versão 2.4, como o tomcat 5, por exemplo.
v tah dizendo q eu preciso implementar o meu ActivationListener dentro de um servlet?! como seria o codigo?
Não cara, ele disse que o servidor que você está usando tem que suportar a versão 2.4 da especificação dos servlets.
Aliás, você registrou seu listener direitinho né?
mas a versão do tomcat que está rodando no meu servidor é o 5!! mesmo tendo essa versão, existe a possibilidade de ele não suportar a versão 2.4 dos servlets?
meu listener tah registrado no web.xml
Cara, checa de novo qualquer errinho de digitação, se as classes tão nas pastas certas, se os packages tão declarados corretamente etc