Diferencia entre ServletConfig y ServletContext en Java Servlet

ServletConfig y ServletContext , ambos son objetos creados en el momento de la inicialización del servlet y se utilizan para proporcionar algunos parámetros iniciales o información de configuración al servlet. Pero la diferencia radica en el hecho de que la información compartida por ServletConfig es para un servlet específico, mientras que la información compartida por ServletContext está disponible para todos los servlets en la aplicación web.

ServletConfig:

  • ServletConfig es un objeto que contiene algunos parámetros iniciales o información de configuración creada por Servlet Container y pasada al servlet durante la inicialización.
  • ServletConfig es para un servlet en particular, lo que significa que uno debe almacenar información específica del servlet en web.xml y recuperarla usando este objeto.
  • Ejemplo:
    supongamos que uno está creando un portal de empleo y desea compartir diferentes ID de correo electrónico (que pueden cambiar con el tiempo) para el reclutador y el solicitante de empleo.
    Entonces, decide escribir dos servlets, uno para manejar la solicitud del reclutador y otro para el solicitante de empleo.
    ¿Dónde almacenar ID de correo electrónico?
    Ponga email-id como un par de nombre-valor para diferentes servlet dentro de web.xml que se puede recuperar usando getServletConfig().getInitParameter(“nombre”) en el servlet.

ServletContexto:

  • ServletContext es el objeto creado por Servlet Container para compartir parámetros iniciales o información de configuración para toda la aplicación.
  • Ejemplo:
    supongamos que el nombre del portal de empleo de uno es «NewWebsite.tg». Al mostrar el nombre del sitio web en la parte superior de las páginas web entregadas por diferentes servlets, es necesario almacenar el nombre del sitio web en cada servlet, lo que invita a la redundancia. Dado que todos los Servlet pueden acceder a la información compartida por ServletContext, es mejor ir con ServletContext y recuperar el nombre del sitio web usando getServletContext.getInitParameter («Nombre») cuando sea necesario.

La implementación de ejemplos de ServletConfig y ServletContext se muestra a continuación.

web.xml

<web-app>
  
<servlet>
    <servlet-name>recruiter</servlet-name>
    <servlet-class>Recruiter</servlet-class>
    <init-param>
      <param-name>Email</param-name>
      <param-value>forRecruiter@xyz.com</param-value>
    </init-param>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>recruiter</servlet-name>
    <url-pattern>/servlet1</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>applicant</servlet-name>
    <servlet-class>Applicant</servlet-class>
    <init-param>
      <param-name>Email</param-name>
      <param-value>forApplicant@xyz.com</param-value>
    </init-param>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>applicant</servlet-name>
    <url-pattern>/servlet2</url-pattern>
  </servlet-mapping>
  
  <context-param>
    <param-name>Website-name</param-name>
    <param-value>NewWebsite.tg</param-value>
  </context-param>
  
</web-app>

Servlet for recruiter

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
  
public class Recruiter extends HttpServlet {
  
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
        String email
            = getServletConfig()
                  .getInitParameter("Email");
        String website
            = getServletContext()
                  .getInitParameter("Website-name");
        PrintWriter out = response.getWriter();
        out.println("<center><h1>" + website
                    + "</h1></center><br><p>Contact us:"
                    + email);
    }
}

Servlet for applicant

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
  
public class Applicant extends HttpServlet {
  
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
  
        String email
            = getServletConfig()
                  .getInitParameter("Email");
        String website
            = getServletContext()
                  .getInitParameter("Website-name");
        PrintWriter out = response.getWriter();
        out.println("<center><h1>" + website
                    + "</h1></center><br><p>Contact us:"
                    + email);
    }
}
  • Salida : implemente la aplicación y abra las direcciones URL en localhost:
    1. /servlet1 :
    2. /servlet2 :

  • Como se muestra arriba, diferentes servlets obtienen diferentes ID de correo electrónico con el mismo nombre de parámetro «Correo electrónico» debido a los diferentes valores adjuntos en el web.xml.
    Cada servlet tiene su propio <init-param> dentro de <servlet> que contiene el ID de correo electrónico.
  • Ambos servlets obtuvieron el acceso del parámetro ServletContext «Nombre del sitio web». Dado que <context-param> está fuera de <servlet> en web.xml, por lo tanto, es independiente del servlet y accesible desde toda la aplicación.

A continuación se muestra la tabla de comparación entre los dos:

ServletConfig ServletContext
ServletConfig es específico de servlet ServletContext es para toda la aplicación
Los parámetros de servletConfig están presentes como par de nombre-valor en <init-param> dentro de <servlet>. Los parámetros de servletContext están presentes como par de nombre-valor en <context-param> que está fuera de <servlet> y dentro de <web-app>
El objeto ServletConfig se obtiene mediante el método getServletConfig(). El objeto ServletContext se obtiene mediante el método getServletContext().
Cada servlet tiene su propio objeto ServletConfig. El objeto ServletContext es solo uno y lo usan diferentes servlets de la aplicación.
Use ServletConfig cuando solo un servlet necesita información compartida por él. Use ServletContext cuando toda la aplicación necesite información compartida por ella

Publicación traducida automáticamente

Artículo escrito por abhilekhnathdas111 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *