JAVA EE6 Programowanie aplikacji WWW cz.4 Serwlety - Ciasteczka
kadoel
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.com/2011/08/java-ee6-programowanie-aplikacji-www_16.html