Showing posts with label Java Web. Show all posts
Showing posts with label Java Web. Show all posts

Friday, 24 April 2015

Servlets : Cookies Demo

🚀 Master Java Servlets & Web Development!

Subscribe to Ram N Java for clean Java tutorials, servlet session tracking guides, and step-by-step code demonstrations!

🔔 Subscribe to Ram N Java

Understanding Cookies in Java Servlets

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

  1. Instantiate the Cookie: Create a new Cookie instance specifying the key and value strings.
  2. Configure Cookie Properties: Set optional attributes such as setMaxAge(), setPath(), or setDomain().
  3. Send Cookie to Client: Call response.addCookie(cookie) before writing response content.
  4. 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:


Click here to watch in Youtube : https://www.youtube.com/watch?v=lbwFTNyRv8I&list=UUhwKlOVR041tngjerWxVccw&index=3

Click the below Image to Enlarge
Servlets : Cookies Demo
Servlets : Cookies Demo
Servlets : Cookies Demo
Servlets : Cookies Demo
Servlets : Cookies Demo
Servlets : Cookies Demo
Servlets : Cookies Demo
Servlets : Cookies Demo

FirstServlet.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 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-app xmlns: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>
index.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ServletContextAttributeDemo</title>
</head>
<body>
    <form action="servlet1" method="GET">
    
        Name:<input type="text" name="userName"/><br/>                      
        <input type="submit" value="Submit" />      
    </form>
</body>
</html>

Environment Used

JDK version :1.7.0_51
Tomcat version : 7.0.50

To Download CookieDemoApp Project Click the below link

https://sites.google.com/site/javaee4321/jdbc/CookieDemoApp.zip?attredirects=0&d=1

See also:

  • All JavaEE Viedos Playlist
  • All JavaEE Viedos
  • Servlets Tutorial
  • All Design Patterns Links
  • JDBC Tutorial
  • Java Collection Framework Tutorial
  • Saturday, 28 June 2014

    Servlets : HTTP Status Codes

    🚀 Master Java Servlets, web architecture, and backend development!

    🔔 Subscribe to Ram N Java on YouTube

    What Are HTTP Status Codes?

    Whenever a client (such as your web browser) sends a request to a web server or a Java Servlet, the server evaluates the request and sends back an HTTP response.

    The first line of that response includes a 3-digit HTTP Status Code along with a reason phrase. This status code immediately tells the client whether the request succeeded, failed, needs redirection, or encountered an error on either the client or server side.

    The 5 Standard Categories of HTTP Status Codes

    All HTTP status codes are grouped into five distinct ranges based on the first digit:

    • 1xx (Informational): The request was received and the server is continuing the process (e.g., 100 Continue).
    • 2xx (Success): The action requested by the client was successfully received, understood, and accepted (e.g., 200 OK, 201 Created).
    • 3xx (Redirection): Further action needs to be taken by the client to fulfill the request (e.g., 301 Moved Permanently, 302 Found).
    • 4xx (Client Error): The request contains bad syntax or cannot be fulfilled by the server (e.g., 400 Bad Request, 404 Not Found).
    • 5xx (Server Error): The server failed to fulfill an apparently valid request due to an internal issue (e.g., 500 Internal Server Error, 503 Service Unavailable).

    Setting Status Codes in Java Servlets

    In Java Servlets, you can inspect and set status codes dynamically using the HttpServletResponse interface:

    // Setting a standard success status
    response.setStatus(HttpServletResponse.SC_OK);
    
    // Sending an error status with a message
    response.sendError(HttpServletResponse.SC_NOT_FOUND, "Resource not found!");

    Constants defined in HttpServletResponse make your Java code clean, self-descriptive, and compliant with standard HTTP specifications.

    Related Tutorials You Might Enjoy


    Click here to watch in Youtube : https://www.youtube.com/watch?v=P9_prhLXDbQ

    Click the below Image to Enlarge
    HTTP Status Codes
    HTTP Status Codes
    HTTP Status Codes
    HTTP Status Codes
    HTTP Status Codes
    HTTP Status Codes

    See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • Saturday, 7 June 2014

    Servlets : ServletRequest Attribute

    🚀 Master Java Servlets & Enterprise Web Development!

    Subscribe to Ram N Java for clean Java tutorials, servlet architecture deep dives, and practical coding walkthroughs!

    🔔 Subscribe to Ram N Java

    Understanding Request Scope in Java Servlets

    In Java web applications built using the Servlet API, passing data between web components (such as from a Controller Servlet to a JSP view) is a fundamental task. Unlike parameters which are read-only strings sent from client forms or query URLs, request attributes allow servlets to store rich Java objects in the request scope. The lifecycle of these attributes is tied directly to the lifetime of a single HTTP request lifecycle, making request scope the ideal choice for forwarding data securely and efficiently.

    Core ServletRequest Attribute Methods

    The HttpServletRequest interface provides dedicated methods to manipulate attributes stored in the request scope:

    • setAttribute(String name, Object obj): Binds an object to a specified attribute name within this request. If an attribute of the same name already exists, the old value is replaced.
    • getAttribute(String name): Retrieves the attribute as an Object. You can cast this back to its original class type (e.g., String, List, POJO). Returns null if no attribute exists with the given name.
    • removeAttribute(String name): Removes the specified attribute from the request scope entirely.
    • getAttributeNames(): Returns an Enumeration<String> containing all attribute names currently accessible in this request.

    Step-by-Step Implementation Flow

    1. Setting the Attribute: In the source servlet, store processed business data or objects using request.setAttribute("user", "Ram").
    2. Forwarding the Request: Forward the request and response to a target JSP or servlet using RequestDispatcher.forward(request, response) so the request scope remains intact.
    3. Retrieving the Attribute: In the target destination, fetch the stored object using request.getAttribute("user") and cast it appropriately.
    4. Removing the Attribute: If the data is no longer needed or must be cleared during request processing, call request.removeAttribute("user").

    Why Use Request Attributes?

    • Object Preservation: Store complex Java objects (like domain models, collections, or custom DTOs) without converting them into plain text strings.
    • Short, Memory-Safe Lifespan: Attributes are automatically garbage collected once the HTTP response completes, preventing memory leaks unlike long-lived session data.
    • Clean MVC Architecture: Enables servlets to act purely as controllers that fetch and prepare model data before dispatching rendering tasks to view components.

    Recommended Next Videos

    Deepen your understanding of Java Servlet scopes and listeners with these related tutorials from our channel:


    Click here to watch in Youtube : https://www.youtube.com/watch?v=ss1CW19pbTo

    Click the below Image to Enlarge
    Servlets : ServletRequest Attribute
    ServletRequestAttributeDemo Project Dir Structure
    Servlets : ServletRequest Attribute

    FirstServlet.java
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    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();
    
            request.setAttribute("CompanyName", "Wipro");
            request.setAttribute("Location", "India");
    
            System.out.println("Firstservlet will forward the request to SecondServlet soon");
    
            try
            {
                Thread.sleep(10000);
            }
            catch( InterruptedException e )
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            RequestDispatcher requestDispatcher = request
                    .getRequestDispatcher("/servlet2");
            
            requestDispatcher.forward(request, response);
    
            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 java.util.Enumeration;
    
    import javax.servlet.ServletException;
    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();
    
            String CompanyName = (String) request.getAttribute("CompanyName");
            out.print("CompanyName :  " + CompanyName + "<br>");
    
            out.print("*************************************************************"
                    + "<br>");
    
            Enumeration<String> namesEnum = request.getAttributeNames();
            while( namesEnum.hasMoreElements() )
            {
                String name = (String) namesEnum.nextElement();
                out.print(name + ":");
                Object value = request.getAttribute(name);
                out.print(value);
                out.print("<br>");
            }
    
            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-app xmlns: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>ServletRequestAttributeDemo</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>
    

    index.html
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>ServletContextAttributeDemo</title>
    </head>
    <body>
        <form action="servlet1" method="GET">
                        
            <input type="submit" value="Call FirstServlet" />
            
        </form>
    </body>
    </html>
    
    
    Environment Used

    JDK version :1.7.0_51
    Tomcat version : 7.0.50 

    To Download ServletRequestAttributeDemoApp Project Click the below link

    https://sites.google.com/site/javaee4321/servlets/ServletRequestAttributeDemoApp.zip?attredirects=0&d=1

    See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • Older Posts Home

    Tutorials