Java » JAVA EE6 Programowanie aplikacji WWW

JAVA EE6 Programowanie aplikacji WWW cz.4 Serwlety - Ciasteczka

  • 2013-09-16 16:07
  • 0 komentarzy
  • 1710 odsłon
  • Oceń ten tekst jako pierwszy
Ciasteczka czyli zmiennie Cookies reprezentowane są w postaci klasy Cookie. Są one przechowywane na komputerach użytkowników aplikacji webowych. Dzięki nim możemy zapamiętywać preferencje, hasła, loginy.
Do wysyłania zmiennych Cookies do klienta HTTP służy metoda:
- addCookies() obiektu response
Zaś do odczytu zmiennych odebranych od klienta służy metoda:
- addCookies() obiektu request

Metody te tak naprawdę operują na nagłówkach żądań i odpowiedzi HTTP. Główne metody klasy Cookie to:

     Cookie(n, s) - tworzy zmienną o nazwie n i wartości s

    String getDomain() - odczyt adresu domenowego dla, którego przeznaczona jest zmienna s
    void setDomain(s) - ustawia adres domenowy dla, którego przeznaczona jest zmienna s

    String getMaxAge() - odczyt czasu życia zmiennej liczony w sekundach
    void setMaxAge(v) - ustawia czas życia zmiennej liczony w sekundach

    String getName() - odczyt nazwy zmiennej
    void setName(s) - ustawia zmienną

    String getPath() - odczyt prefiksu ścieżki URL na serwerze, dla której przeznaczona jest zmienna
    void setPath(s) - ustawia prefiks ścieżki URL na serwerze, dla której przeznaczona jest zmienna

    String getValue() - odczyt wartości zmiennej
    void setValue(s) - ustawia wartość zmiennej

Kiedy zmienna Cookie jest wysyłana do klienta HTTP następuje serializacja obiektu do postaci łańcucha znakowego umieszczonego w nagłówku odpowiedzi HTTP, w polu Set-Cookie. Odczyt polega na operacji odwrotnej czyli zbudowaniu obiektu na podstawie pola Cookie nagłówka żądania HTTP.

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
 
 
    public class FCookie extends HttpServlet {
        public void doGet ( HttpServletRequest request, HttpServletResponse response )
         throws ServletException, IOException {
      PrintWriter out;
 
      // Set content type and other response header fields first
            response.setContentType("text/html");
 
      // Write the data of the response
      out = response.getWriter();
 
      // Create a cookie
      Cookie c1 = new Cookie("CName1","Cookie Value1");
      Cookie c2 = new Cookie("CName2","Cookie Value2");
      response.addCookie(c1);
      response.addCookie(c2);
            out.println("<HTML><HEAD><TITLE>");
      out.println(" This output is generated from a Servlet");
      out.println("</TITLE></HEAD><BODY>");
      out.println(" This has set 2 Cookies");
      out.println("</BODY></HTML>");
      out.close();
        }
    }


    //Tak może wyglądać przykładowy odczyt ciasteczek:
    ...
 
    out.println("<h1> Odebrano Cookies </h1>");
    Cookie[] allCookies = request.getCookies();
    for(int i=0;i<allCookies.length;i++)
      out.println(allCookies[i].getName()+": "+ allCookies[i].getValue()+"<br>");
    ...


Napiszmy sobie prosty serwlet, którego zadaniem będzie przechowywanie informacji o dacie ostatniej wizyty na stronie i wyświetlenie tej informacji. Przykład ten pochodzi z książki: "JAVA EE6 Programowanie aplikacji WWW"

    protected void processRequest(HttpServletRequest request, HttpServletResponse
        response)
    throws ServletException, IOException {
     response.setContentType("text/html;charset=UTF-8");
     PrintWriter out = response.getWriter();
     try {
      Cookie lastVisit = null;
      for (Cookie c : request.getCookies())
       if (c.getName().equals("obecnosc")) {
        lastVisit = c;
        break;
       }
       if (lastVisit != null)
        out.println("Twoja ostatnia wizyta na stronie miała miejsce w dniu " +
            lastVisit.getValue());
       else
        out.println("Do tej pory nie odwiedziłeś/aś naszej strony. Wstydź się!");
       lastVisit = new Cookie("obecnosc", new Date().toString());
       response.addCookie(lastVisit);
      } finally {
       out.close();
      }
    }


W następnej części zastanowimy się nad problem bezstanowości protokołu HTTP. Czyli czas na sesje.

źródło: http://kawaczyjava.blogspot.com
http://kawaczyjava.blogspot.co[...]amowanie-aplikacji-www_16.html