HTTP is fundamentally a stateless protocol, meaning each client request is treated independently without built-in memory of previous interactions. To maintain client state across multiple HTTP requests, Java Servlets provide several session tracking mechanisms—one of the simplest and most widespread being Cookies. A cookie is a small piece of text data sent by a server to a web browser, stored locally on the client machine, and returned with subsequent requests.
Key Concepts & Lifecycle
javax.servlet.http.Cookie: The core Java class used to create, inspect, and configure cookies.
Name-Value Pair: Cookies are stored as key-value string pairs (e.g., Cookie cookie = new Cookie("user", "Ram")).
Adding Cookies to Response: The servlet adds the cookie to the HTTP response header using response.addCookie(cookie).
Reading Cookies from Request: On subsequent visits, the servlet reads incoming cookies from the HTTP request header using request.getCookies(), which returns an array of Cookie[] objects.
Max Age & Expiration: Control persistence using cookie.setMaxAge(seconds). Setting a positive value makes it a persistent cookie, while negative or zero values control session-only or deletion behavior.
Step-by-Step Implementation Flow
Instantiate the Cookie: Create a new Cookie instance specifying the key and value strings.
Configure Cookie Properties: Set optional attributes such as setMaxAge(), setPath(), or setDomain().
Send Cookie to Client: Call response.addCookie(cookie) before writing response content.
Retrieve Cookies in Another Servlet: Call request.getCookies() to get the array of cookies and iterate through them to locate your target cookie by cookie.getName() and retrieve its data via cookie.getValue().
Benefits of Cookie-Based Session Tracking
Client-Side Storage: Minimizes server-side memory overhead since state information is preserved on the user's browser.
Simple Implementation: Straightforward API built directly into the standard Java Servlet specification without external dependencies.
Customizable Lifespan: Easy to configure whether data lasts only for the browser session or persists across browser restarts.
Recommended Next Videos
Continue your deep dive into Java Servlets and session management with these related tutorials from our channel:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet
{
private static final long serialVersionUID =1L;
public void init() throws ServletException
{
System.out.println("-----------------------------------------");
System.out.println(" Init method is called in "+this.getClass().getName());
System.out.println("--------------------------------------");
}
public void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String userName = request.getParameter("userName");
out.print("Welcome "+ userName);
Cookie cookie =new Cookie("userName", userName);// creating cookie object
response.addCookie(cookie);// adding cookie in the response// creating submit button
out.print("<form action='servlet2'>");
out.print("<input type='submit' value='go'>");
out.print("</form>");
out.close();
}
public void destroy()
{
System.out.println("-----------------------------------------");
System.out.println(" destroy method is called in "+this.getClass().getName());
System.out.println("-----------------------------------------");
}
}
SecondServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SecondServlet extends HttpServlet
{
private static final long serialVersionUID =1L;
public void init() throws ServletException
{
System.out.println("--------------------------------------------");
System.out.println(" Init method is called in "+this.getClass().getName());
System.out.println("---------------------------------------------");
}
public void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Cookie cookiesArray[] = request.getCookies();
for( Cookie cookie : cookiesArray )
{
out.print("Hello "+ cookie.getValue());
}
out.close();
}
public void destroy()
{
System.out.println("--------------------------------------------");
System.out.println(" destroy method is called in "+this.getClass().getName());
System.out.println("--------------------------------------------");
}
}
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="true"version="3.0"><display-name>CookieDemo</display-name><description>
This is a simple web application with a source code organization
based on the recommendations of the Application Developer's Guide.
</description><servlet><servlet-name>s1</servlet-name><servlet-class>FirstServlet</servlet-class></servlet><servlet-mapping><servlet-name>s1</servlet-name><url-pattern>/servlet1</url-pattern></servlet-mapping><servlet><servlet-name>s2</servlet-name><servlet-class>SecondServlet</servlet-class></servlet><servlet-mapping><servlet-name>s2</servlet-name><url-pattern>/servlet2</url-pattern></servlet-mapping></web-app>
No comments:
Post a Comment