Friday, 2 May 2014

Servlets : ServletContext [context-param]

Master Core Java & Servlets!

Subscribe to Ram N Java for beginner-friendly coding walkthroughs, web architecture lessons, and hands-on Java guides!

🔔 Subscribe to Ram N Java

Understanding Context Parameters in web.xml

In a Java web application, you often need global configuration settings that should be accessible by all servlets, JSPs, and filters—such as database URLs, administrator emails, or shared system settings. Instead of hardcoding these values or restricting them to a single servlet, Java Servlets allow you to define them as application-wide context parameters inside web.xml using the <context-param> element.

These values are loaded by the servlet container when the application starts up and are exposed globally via the ServletContext object.

Configuring & Reading Context Parameters

To read context parameters in your servlet code, obtain the ServletContext instance (via getServletContext()) and use the following built-in methods:

  • getInitParameter(String name): Returns the String value of the specified context initialization parameter, or null if it does not exist.
  • getInitParameterNames(): Returns an Enumeration<String> containing the names of all context parameters defined in the application.
<!-- web.xml snippet -->
<context-param>
    <param-name>adminEmail</param-name>
    <param-value>admin@ramnjava.com</param-value>
</context-param>

// Inside your Servlet class
ServletContext context = getServletContext();
String adminEmail = context.getInitParameter("adminEmail");
System.out.println("Admin Email: " + adminEmail);

Key Advantages of Using ServletContext for Configuration

  • Application-Wide Availability: Unlike servlet-specific init parameters, context parameters are shared across every component in the web application.
  • Centralized Maintenance: Modify environment configurations in web.xml without altering or recompiling Java source code.
  • One Context per Web App: Each deployed web application maintains a single ServletContext instance, ensuring clean isolation and consistency.

Recommended Related Tutorials

Continue exploring servlet fundamentals and configuration with these tutorials from Ram N Java:


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

Click the below Image to Enlarge

ServletContextInitParam Project Dir Structure

SevletContextDemoServlet.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 SevletContextDemoServlet 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("------------------------------------------------------");
    }

    // Method to handle GET method request.
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        ServletContext context = getServletContext();

        out.print("<b>Read specfic initParam using context.getInitParameter"
                + "(String paramName )</b> <br><br>");

        String driverName = context.getInitParameter("drivername");
        out.print(driverName + "<br><br>");

        out.print("<b>Read All InitParameters using "
                + "getInitParameterNames() method</b> <br>");

        Enumeration<String> initParamNamesEnum = context
                .getInitParameterNames();
        String paramName = "";
        while (initParamNamesEnum.hasMoreElements())
        {
            paramName = initParamNamesEnum.nextElement();
            String paramValue = context.getInitParameter(paramName);
            out.print("<br> " + paramName + " : " + paramValue);
        }
    }

    // Method to handle POST method request.
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        doGet(request, response);
    }

    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>ServletContextInitParam</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>

    <context-param>
        <param-name>drivername</param-name>
        <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
    </context-param>

    <context-param>
        <param-name>username</param-name>
        <param-value>system</param-value>
    </context-param>

    <context-param>
        <param-name>password</param-name>
        <param-value>oracle</param-value>
    </context-param>
    
    <servlet>
        <servlet-name>context</servlet-name>
        <servlet-class>SevletContextDemoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>context</servlet-name>
        <url-pattern>/context</url-pattern>
    </servlet-mapping>
</web-app>

index.html
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Context Test</title>
</head>
<body>
    <li><a href="context">Context Test</a></li>
</body>
</html>


Environment Used

JDK version :1.6.0_30
Tomcat version : 7.0.50 

To Download ServletContextInitParamApp Project Click the below link

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

 See also:

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

    Post a Comment

    Tutorials