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.
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>
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>"); } } }
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>"); } } }
Si uno ejecuta el enlace servlet2 en modo de incógnito directamente, las cookies no se reconocen y se trata como un nuevo usuario.
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