Friday, 6 June 2014

Servlets : ServletContext Attribute Demo

🚀 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 Application Scope in Java Servlets

In Java EE web applications, sharing data globally across multiple servlets, JSPs, and user sessions is a frequent architectural requirement. While request scope is short-lived and session scope belongs to a single client, application scope spans the entire lifetime of the web application. By leveraging ServletContext attributes, developers can store and access shared resources and global states across all web components seamlessly.

Core ServletContext Attribute Methods

The ServletContext interface provides essential methods to manage application-scoped attributes:

  • setAttribute(String name, Object object): Binds an object to a given attribute name in the application context. If an attribute with the same name exists, it is overwritten.
  • getAttribute(String name): Retrieves the stored attribute value as an Object, which can be typecast back to its target class type. Returns null if no attribute exists with that name.
  • removeAttribute(String name): Removes the attribute associated with the specified name from the application scope.
  • getAttributeNames(): Returns an Enumeration<String> containing all attribute names currently stored in the servlet context.

Step-by-Step Implementation Flow

  1. Obtain the ServletContext: Access the application context within your servlet by calling getServletContext() (inherited from GenericServlet) or via request.getServletContext().
  2. Set the Global Attribute: Store your shared object or application state using servletContext.setAttribute("appName", "RamNJavaApp").
  3. Access from Another Servlet: In any other servlet or JSP within the application, fetch the context and call servletContext.getAttribute("appName") to read the shared object.
  4. Remove the Attribute: When cleaning up resources or resetting state, call servletContext.removeAttribute("appName").

Why Use ServletContext Attributes?

  • Global Data Sharing: Provides a centralized repository accessible by all servlets, filters, and JSPs in the web module.
  • Application-Wide Lifespan: Stored attributes persist for the complete lifetime of the application container until undeployed or stopped.
  • Resource Efficiency: Ideal for sharing expensive singleton resources, global configuration settings, or cross-cutting metadata.

Recommended Next Videos

Continue mastering Java Servlet scopes and architecture with these related tutorials from our channel:


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

Click the below Image to Enlarge
Servlets : ServletContext Attribute Demo
ServletContextAttributeDemo Project Dir Structure
Servlets : ServletContext Attribute Demo

FirstServlet.java
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
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();

        ServletContext servletContext = getServletContext();

        servletContext.setAttribute("CompanyName", "Wipro");
        servletContext.setAttribute("Location", "India");

        out.print("<a href='servlet2'> visit</a>");

        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.ServletContext;
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();

        ServletContext servletContext = getServletContext();

        String CompanyName = (String) servletContext.getAttribute("CompanyName");
        out.print("CompanyName :  " + CompanyName + "<br>");

        out.print("*************************************************************"
                + "<br>");

        Enumeration<String> namesEnum = servletContext.getAttributeNames();
        while (namesEnum.hasMoreElements())
        {
            String name = (String) namesEnum.nextElement();
            out.print(name + ":");
            Object value = servletContext.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>ServletContextAttributeDemo</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 ServletContextAttributeDemo Project Click the below link

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

See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • No comments:

    Post a Comment

    Tutorials