Servlet – Cookies – Part 1

Las cookies son la información textual que se almacena en formato de par clave-valor en el navegador del cliente durante múltiples requests. Es una de las técnicas de gestión de estado en el seguimiento de sesiones. Básicamente, el servidor trata cada solicitud del cliente como una nueva, por lo que para evitar esta situación se utilizan cookies. Cuando el cliente genera una solicitud, el servidor da la respuesta con cookies que tienen una identificación que luego se almacenan en el navegador del cliente. Por lo tanto, si el cliente genera una segunda solicitud, también se envía al servidor una cookie con la identificación coincidente. El servidor obtendrá la identificación de la cookie, si la encuentra, la tratará como una solicitud anterior; de lo contrario, la solicitud se considerará nueva.

Cookie creation in Client-Server request-response model

Uso de cookies en Java

  • Para usar cookies en Java, use una clase de Cookie que esté presente en el paquete javax.servlet.http .
  • Para hacer una cookie, cree un objeto de la clase Cookie y pase un nombre y su valor.
  • Para agregar una cookie en respuesta, utilice el método addCookie(Cookie) de la interfaz HttpServletResponse.
  • Para obtener la cookie, se utiliza el método getCookies() de la interfaz de solicitud.

Métodos en Cookies

  • clone(): anula el método estándar java.lang.Object.clone para devolver una copia de esta Cookie.
  • getComment(): Devuelve el comentario que describe el propósito de esta cookie, o nulo si la cookie no tiene comentarios.
  • getDomain(): Obtiene el nombre de dominio de esta Cookie.
  • getMaxAge(): Obtiene la edad máxima en segundos de esta Cookie.
  • getName(): Devuelve el nombre de la cookie.
  • getPath(): Devuelve la ruta en el servidor al que el navegador devuelve esta cookie.
  • getSecure(): Devuelve verdadero si el navegador envía cookies solo a través de un protocolo seguro, o falso si el navegador puede enviar cookies utilizando cualquier protocolo.
  • getValue(): Obtiene el valor actual de esta Cookie.
  • getVersion(): Devuelve la versión del protocolo que cumple esta cookie.
  • setValue(String newValue): Asigna un nuevo valor a esta Cookie.
  • setVersion(int v): Establece la versión del protocolo de cookies que cumple esta Cookie.

Ejemplo

El nombre del Instituto se pasa al Servlet 2 desde el Servlet 1 mediante Cookies.

HTML

<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
        <!-- css-->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" 
                                 integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" 
                               crossorigin="anonymous">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
          
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <form action="servlet1" method="POST">
            <div class="container-fluid ">
              
            <div class="jumbotron">
                <div class="container col-sm-4">
            <h2>Enter your institute's name</h2>
            <input type="text" name="name"  style="font-size:30px;">
            <br>
            <br>
            <!-- button to redirect to servlet1 -->
            <button type="submit" style="font-size:20px;" class="center">
                Go !
            </button>
            <br><br>
            </div>
            </div>
            </div>
        </form>
    </body>
</html>

Index.html output

Java

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
  
public class Servlet1 extends HttpServlet {
  
    protected void
    processRequest(HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Servlet1</title>");
            out.println("</head>");
            out.println("<body>");
  
            // Creating a string to store the name
            String name = request.getParameter("name");
            out.println("<h1> Hello, welcome to " + name
                        + " </h1>");
            out.println(
                "<h1><a href =\"servlet2\">Go to Servlet2</a></h1>");
            // Creating a cookie
            Cookie c = new Cookie("user_name", name);
            response.addCookie(c);
  
            out.println("</body>");
            out.println("</html>");
        }
    }
}

Servlet1.java output

Java

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
  
public class Servlet2 extends HttpServlet {
  
    protected void
    processRequest(HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Servlet2</title>");
            out.println("</head>");
            out.println("<body>");
  
            // Fetching cookies(if found more than one)
            // Array of Cookies
            Cookie[] cookies = request.getCookies();
            boolean f = false;
            String name = "";
            if (cookies == null) {
                out.println(
                    "<h1>You are new user, go to home page and submit your institute's name");
                return;
            }
            else {
                for (Cookie c : cookies) {
                    String tname = c.getName();
                    if (tname.equals("user_name")) {
                        f = true;
                        name = c.getValue();
                    }
                }
            }
            if (f) {
                out.println("<h1> Hello, welcome back "
                            + name + " </h1>");
                out.println("<h2>Thank you!!</h2>");
            }
            else {
                out.println(
                    "<h1>You are new user, go to home page and submit your institute's name");
            }
  
            out.println("</body>");
            out.println("</html>");
        }
    }
}

Servlet2.java output

Si uno ejecuta el enlace servlet2 en modo de incógnito directamente, las cookies no se reconocen y se trata como un nuevo usuario.

Servlet2.java output in incognito mode

Desventajas de las cookies

  • El carácter de espacio y la imagen se consideran no válidos.
  • La seguridad es menor.

Publicación traducida automáticamente

Artículo escrito por vidhi16701 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *