Servlets - Umgang mit Keksen

Cookies sind Textdateien, die auf dem Client-Computer gespeichert werden und für verschiedene Zwecke der Informationsverfolgung gespeichert werden. Java-Servlets unterstützen HTTP-Cookies transparent.

Die Identifizierung wiederkehrender Benutzer umfasst drei Schritte:

  • Das Serverskript sendet eine Reihe von Cookies an den Browser. Zum Beispiel Name, Alter oder Identifikationsnummer usw.

  • Der Browser speichert diese Informationen auf dem lokalen Computer für die zukünftige Verwendung.

  • Wenn der Browser das nächste Mal eine Anfrage an den Webserver sendet, sendet er diese Cookie-Informationen an den Server, und der Server verwendet diese Informationen, um den Benutzer zu identifizieren.

In diesem Kapitel erfahren Sie, wie Sie Cookies setzen oder zurücksetzen, wie Sie darauf zugreifen und wie Sie sie löschen.

Die Anatomie eines Kekses

Cookies werden normalerweise in einem HTTP-Header gesetzt (obwohl JavaScript ein Cookie auch direkt in einem Browser setzen kann). Ein Servlet, das ein Cookie setzt, sendet möglicherweise Header, die ungefähr so ​​aussehen:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT; 
   path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html

Wie Sie sehen können, enthält der Set-Cookie-Header ein Name-Wert-Paar, ein GMT-Datum, einen Pfad und eine Domäne. Der Name und der Wert werden URL-codiert. Das Feld expires ist eine Anweisung an den Browser, das Cookie nach der angegebenen Uhrzeit und dem angegebenen Datum zu "vergessen".

Wenn der Browser zum Speichern von Cookies konfiguriert ist, werden diese Informationen bis zum Ablaufdatum gespeichert. Wenn der Benutzer den Browser auf eine Seite zeigt, die dem Pfad und der Domäne des Cookies entspricht, sendet er das Cookie erneut an den Server. Die Header des Browsers könnten ungefähr so ​​aussehen -

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz

Ein Servlet hat dann über die Anforderungsmethode request.getCookies () Zugriff auf das Cookie, die ein Array von Cookie- Objekten zurückgibt .

Servlet-Cookies-Methoden

Im Folgenden finden Sie eine Liste nützlicher Methoden, die Sie beim Bearbeiten von Cookies im Servlet verwenden können.

Sr.Nr. Methode & Beschreibung
1

public void setDomain(String pattern)

Diese Methode legt die Domäne fest, für die das Cookie gilt, z. B. tutorialspoint.com.

2

public String getDomain()

Diese Methode ruft die Domain ab, für die das Cookie gilt, z. B. tutorialspoint.com.

3

public void setMaxAge(int expiry)

Diese Methode legt fest, wie viel Zeit (in Sekunden) vergehen soll, bevor das Cookie abläuft. Wenn Sie dies nicht festlegen, bleibt das Cookie nur für die aktuelle Sitzung gültig.

4

public int getMaxAge()

Diese Methode gibt das maximale Alter des Cookies in Sekunden zurück. Standardmäßig gibt -1 an, dass das Cookie bis zum Herunterfahren des Browsers bestehen bleibt.

5

public String getName()

Diese Methode gibt den Namen des Cookies zurück. Der Name kann nach der Erstellung nicht mehr geändert werden.

6

public void setValue(String newValue)

Diese Methode legt den Wert fest, der dem Cookie zugeordnet ist

7

public String getValue()

Diese Methode ruft den dem Cookie zugeordneten Wert ab.

8

public void setPath(String uri)

Diese Methode legt den Pfad fest, für den dieses Cookie gilt. Wenn Sie keinen Pfad angeben, wird das Cookie für alle URLs im selben Verzeichnis wie die aktuelle Seite sowie für alle Unterverzeichnisse zurückgegeben.

9

public String getPath()

Diese Methode ruft den Pfad ab, für den dieses Cookie gilt.

10

public void setSecure(boolean flag)

Diese Methode legt den booleschen Wert fest, der angibt, ob das Cookie nur über verschlüsselte (dh SSL) Verbindungen gesendet werden soll.

11

public void setComment(String purpose)

Diese Methode gibt einen Kommentar an, der den Zweck eines Cookies beschreibt. Der Kommentar ist nützlich, wenn der Browser dem Benutzer das Cookie präsentiert.

12

public String getComment()

Diese Methode gibt den Kommentar zurück, der den Zweck dieses Cookies beschreibt, oder null, wenn das Cookie keinen Kommentar enthält.

Cookies mit Servlet setzen

Das Setzen von Cookies mit Servlet umfasst drei Schritte:

(1) Creating a Cookie object - Sie rufen den Cookie-Konstruktor mit einem Cookie-Namen und einem Cookie-Wert auf, die beide Zeichenfolgen sind.

Cookie cookie = new Cookie("key","value");

Beachten Sie, dass weder der Name noch der Wert Leerzeichen oder eines der folgenden Zeichen enthalten dürfen:

[ ] ( ) = , " / ? @ : ;

(2) Setting the maximum age- Mit setMaxAge geben Sie an, wie lange (in Sekunden) das Cookie gültig sein soll. Im Folgenden wird ein Cookie für 24 Stunden eingerichtet.

cookie.setMaxAge(60 * 60 * 24);

(3) Sending the Cookie into the HTTP response headers - Sie verwenden response.addCookie, um Cookies wie folgt in den HTTP-Antwortheader einzufügen. -

response.addCookie(cookie);

Beispiel

Lassen Sie uns unser Formularbeispiel ändern , um die Cookies für Vor- und Nachnamen zu setzen.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class HelloForm extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Create cookies for first and last names.      
      Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
      Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));

      // Set expiry date after 24 Hrs for both the cookies.
      firstName.setMaxAge(60*60*24);
      lastName.setMaxAge(60*60*24);

      // Add both the cookies in the response header.
      response.addCookie( firstName );
      response.addCookie( lastName );

      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Setting Cookies Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head>
               <title>" + title + "</title>
            </head>\n" +
            
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>
         </html>"
      );
   }
}

Kompilieren Sie das obige Servlet HelloForm Erstellen Sie einen entsprechenden Eintrag in der Datei web.xml und versuchen Sie schließlich, der folgenden HTML-Seite zu folgen, um das Servlet aufzurufen.

<html>
   <body>
      <form action = "HelloForm" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

Behalten Sie den obigen HTML-Inhalt in einer Datei Hello.htm bei und legen Sie ihn im Verzeichnis <Tomcat-Installationsverzeichnis> / webapps / ROOT ab. Wenn Sie auf http: // localhost: 8080 / Hello.htm zugreifen würden , sehen Sie hier die tatsächliche Ausgabe des obigen Formulars.

Versuchen Sie, Vor- und Nachnamen einzugeben, und klicken Sie dann auf die Schaltfläche Senden. Dies würde Vor- und Nachnamen auf Ihrem Bildschirm anzeigen und gleichzeitig zwei Cookies Vor- und Nachname setzen, die beim nächsten Drücken der Senden-Taste an den Server zurückgegeben würden.

Im nächsten Abschnitt erfahren Sie, wie Sie in Ihrer Webanwendung wieder auf diese Cookies zugreifen.

Kekse mit Servlet lesen

Um Cookies zu lesen, müssen Sie ein Array von javax.servlet.http.Cookie- Objekten erstellen, indem Sie das aufrufengetCookies()Methode von HttpServletRequest . Durchlaufen Sie dann das Array und verwenden Sie die Methoden getName () und getValue (), um auf jedes Cookie und den zugehörigen Wert zuzugreifen.

Beispiel

Lesen wir die Cookies, die wir im vorherigen Beispiel gesetzt haben -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class ReadCookies extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      Cookie cookie = null;
      Cookie[] cookies = null;

      // Get an array of Cookies associated with this domain
      cookies = request.getCookies();

      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading Cookies Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" );

      if( cookies != null ) {
         out.println("<h2> Found Cookies Name and Value</h2>");

         for (int i = 0; i < cookies.length; i++) {
            cookie = cookies[i];
            out.print("Name : " + cookie.getName( ) + ",  ");
            out.print("Value: " + cookie.getValue( ) + " <br/>");
         }
      } else {
         out.println("<h2>No cookies founds</h2>");
      }
      out.println("</body>");
      out.println("</html>");
   }
}

Kompilieren Sie über dem Servlet ReadCookiesund erstellen Sie einen entsprechenden Eintrag in der Datei web.xml. Wenn Sie das Cookie "Vorname" als "John" und das Cookie "Nachname" als "Player" festgelegt hätten, würde beim Ausführen von http: // localhost: 8080 / ReadCookies das folgende Ergebnis angezeigt:

Found Cookies Name and Value

Name : first_name, Value: John
Name : last_name, Value: Player

Cookies mit Servlet löschen

Das Löschen von Cookies ist sehr einfach. Wenn Sie ein Cookie löschen möchten, müssen Sie lediglich die folgenden drei Schritte ausführen:

  • Lesen Sie ein bereits vorhandenes Cookie und speichern Sie es im Cookie-Objekt.

  • Setzen Sie das Cookie-Alter mit auf Null setMaxAge() Methode zum Löschen eines vorhandenen Cookies

  • Fügen Sie dieses Cookie wieder in den Antwortheader ein.

Beispiel

Im folgenden Beispiel wird ein vorhandenes Cookie mit dem Namen "Vorname" gelöscht. Wenn Sie das Servlet "ReadCookies" das nächste Mal ausführen, wird der Nullwert für "Vorname" zurückgegeben.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class DeleteCookies extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      Cookie cookie = null;
      Cookie[] cookies = null;
         
      // Get an array of Cookies associated with this domain
      cookies = request.getCookies();

      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Delete Cookies Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" );
         
      if( cookies != null ) {
         out.println("<h2> Cookies Name and Value</h2>");

         for (int i = 0; i < cookies.length; i++) {
            cookie = cookies[i];

            if((cookie.getName( )).compareTo("first_name") == 0 ) {
               cookie.setMaxAge(0);
               response.addCookie(cookie);
               out.print("Deleted cookie : " + cookie.getName( ) + "<br/>");
            }
            out.print("Name : " + cookie.getName( ) + ",  ");
            out.print("Value: " + cookie.getValue( )+" <br/>");
         }
      } else {
         out.println("<h2>No cookies founds</h2>");
      }
      out.println("</body>");
      out.println("</html>");
   }
}

Kompilieren Sie über dem Servlet DeleteCookiesund erstellen Sie einen entsprechenden Eintrag in der Datei web.xml. Wenn Sie jetzt http: // localhost: 8080 / DeleteCookies ausführen , wird das folgende Ergebnis angezeigt:

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name, Value: Player

Versuchen Sie nun, http: // localhost: 8080 / ReadCookies auszuführen, und es wird nur ein Cookie wie folgt angezeigt:

Found Cookies Name and Value

Name : last_name, Value: Player

Sie können Ihre Cookies im Internet Explorer manuell löschen. Beginnen Sie im Menü Extras und wählen Sie Internetoptionen. Um alle Cookies zu löschen, klicken Sie auf Cookies löschen.