Licznik aktywnych sesji w JSP

Odpowiedz Nowy wątek
2010-11-29 13:34

Rejestracja: 9 lat temu

Ostatnio: 9 lat temu

0

Witam,

Mam problem z utworzeniem licznika sesji w JSP. Jako licznik służy mi klasa implementująca HttpSessionListener:

public class Counter implements HttpSessionListener {
    private static int counter = 0;
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        counter++;
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        counter--;
    }

    public static int getCounter() {
        return counter;
    }
}

W pliku .jsp wyświetlam licznik instrukcją <%= Counter.getCounter() %>. Plik web.xml również zawiera wpis o listenerze.

Niestety, mam pewien problem - po uruchomieniu serwera pojawiają się różne wartości - raz wyświetla się 0, raz 1; raz udało mi się nawet uzyskać wartość -1. Docelowo zawsze powinna być wyświetlana wartość 1.

Wiem, że jsp tworzy dla każdego połączenia swoją sesję (chyba chodzi o kontener). Nie wiem tylko czemu raz ta sesja "jest", a raz jej "nie ma".

Co pominąłem po drodze? Jak wykorzystać klasę nasłuchującą, aby osiągnąć pożądany rezultat?

Pozdrawiam,
Marcin

edytowany 1x, ostatnio: szaku, 2010-11-29 13:35

Pozostało 580 znaków

2010-11-29 13:57
Moderator

Rejestracja: 13 lat temu

Ostatnio: 6 dni temu

Lokalizacja: Stacktrace

0

zamiast integer użyj http://download.oracle.com/ja[...]ent/atomic/AtomicInteger.html


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException

Pozostało 580 znaków

2010-11-29 14:10

Rejestracja: 9 lat temu

Ostatnio: 9 lat temu

0

Cały czas wyświetla mi się 0.. Co miałby zmienić AtomicInteger?

public class Counter implements HttpSessionListener {
    private static AtomicInteger licznik = new AtomicInteger(0);

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        licznik.getAndIncrement();
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        licznik.getAndDecrement();
    }

    public static int getLicznik() {
        return licznik.get();
    }
}

//EDIT
Od razu po odpaleniu glassfisha pokazuje mi 1, jak zatrzymam serwer i włączę znów to mam 0 :)

edytowany 1x, ostatnio: szaku, 2010-11-29 17:19

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0