Recuperando variavel na sessão invalidada

10 respostas
G
dae pessoas!! to tentando faze com quem meu listener recupere uma variavel que estava na sessao q foi invalidada pelo timeout... ai vai meu código! erro que da ao compilar: "cannot resolve symbol (variable request)" em "HttpSessionEvent se = request.getSession(false);"
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;
  }
}
Eu to esquecendo de algum import ou como faço pra declara essa variavel request??? Desde já aradeço!!!!!

10 Respostas

_fs

você está fazendo:

request.getSession( false );

mas … de onde saiu este objeto “request”?

hehe declara ele cara!

G

essa eh a minha duvida!!! se eu tiver mesmo que usar a variavel request, como eu declaro ela???

G
bom... esse código tá compilando tranquilo, mas quando a sessão é destruida, ele recupera a sessão sem reclamar, e quando vai recuparar a variavel que preciso, reclama que a sessão é invalida (Session already invalidated)!
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; 
  } 
}
Alguma alma bondosa pode me ajudar a resolver esse mistério?!
_fs

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

G

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!!

ai vai o codigo da interface HttpSessionActivationListener:
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;
  }
}
Alguem sabe pq o método sessionWillPassivate nem eh chamado?? Valeu!!
louds

Voce precisa de 1 servlet container versão 2.4, como o tomcat 5, por exemplo.

G

v tah dizendo q eu preciso implementar o meu ActivationListener dentro de um servlet?! como seria o codigo?

_fs

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é?

G

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

_fs

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

Criado 26 de julho de 2004
Ultima resposta 28 de jul. de 2004
Respostas 10
Participantes 3