JAVA EE6 Programowanie aplikacji WWW cz.5 Serwlety - Sesje

kadoel
Ostatnio poznaliśmy podstawowe wykorzystanie Cookies. Dzisiaj przyjdzie czas na sesje. Protokół komunikacji między klientem a aplikacją WWW czyli HTTP został zaprojektowany jako bezstanowy. Oznacza to, że serwer nie jest w stanie określić czy dane żądanie HTTP pochodzi od tego samego użytkownika, czy od innych niezależnych użytkowników. Problem ten rozwiązano wprowadzając mechanizm emulacji sesji - HTTPSession. Zasada tego mechanizmu nie jest skomplikowana. Każdy klient dostaje od serwera niepowtarzalny identyfikator - identyfikator sesji. Zazwyczaj jest on zapisywany w zmiennej Cookie. Dzięki takiemu rozwiązaniu serwer aplikacji otrzymuje identyfikatoe przy ponownym żądaniu tego samego użytkownika. Serwer aplikacji posiada tablice sesji gdzie dany identyfikator skojarzony jest zbiór programowych obiektów JAVA, które reprezentują stan sesji. Jako, że serwlety w technologii JEE są mechanizm nazwijmy to niskopoziomowym mają one możliwość odczytu i zapisu obiektów odpowiadających za stan sesji. Wykorzystują do tego obiekt sesji. Jest on obiektem interfejsu HTTPSession. Stan sesji może zostać usunięty po przekroczeniu pewnego limitu czasowego lub po przez jawne usunięcie. 

Zaczynamy:

HttpSession session = request.getSession(true);

Podaje aktualną sesję lub tworzy nową. Gdyby podano parametr false, to nowa sesja nie będzie tworzona. Jeśli nie ma jeszcze sesji, metoda zwróci null.

Oto najważniejsze metody interfejsu HTTPSession:

void setAttribute(n,o) Zapamiętuje na czas sesji obiekt pod podaną nazwą
String getId() Zwraca aktualny identyfikator sesji.
boolean isNew() Zwraca wartość true, jeśli klient nie odesłał jeszcze żądania z danym identyfikatorem sesji.
long getCreationTime() Zwraca czas utworzenia sesji.
long getLastAccessedTime() Zwraca czas otrzymania przez kontener ostatniego żądania z danymidentyfikatorem sesji.
void setMaxInactivateInterval(int) Ustawia maksymalny czas (wyrażony w sekundach) pomiędzy kolejnymi żądaniami klienta
int getMaxInactiveInterval() Zwraca maksymalny czas (wyrażony w sekundach) pomiędzy kolejnymi żądaniami
void invalidate() Kończy sesję.

Kod sprawdza czy dane żądanie jest pierwszym żądaniem użytkownika danej sesji:

    public void doGet(HttpServletRequest request,
     HttpServletResponse response)
     throws ServletException, IOException {
     
     response.setContentType("text/html :charset=UTF-8");
     PrinterWriter out = response.getWriter();
     
     try{
            if(request.getSession(false) == null){
             
              out.println("Jestes na stronie po raz pierwszy.");
              request.getSession();
            }else
              out.println("Witaj po raz kolejny.");
     }finally{
            out.close();
      }
     
     
     }

źródło: http://kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www_19.html

0 komentarzy