init-param y context-param

88

¿Cuál es la diferencia entre <init-param>y <context-param>?

mina
fuente
@RC. Esa pregunta en ninguna parte analiza la diferencia entre esos dos parámetros ... Se trata solo de propiedades cargadas en los dos contextos ...
Rohit Jain
Me detuve en el título, mi mal.

Respuestas:

120

<init-param>y <context-param>son parámetros estáticos que se almacenan en el archivo web.xml. Si tiene datos que no cambian con frecuencia, puede almacenarlos en uno de ellos.

Si desea almacenar datos particulares que están confinados a un alcance de servlet en particular , entonces puede usar. <init-param>Todo lo que declare dentro <init-param>solo es accesible solo para ese servlet en particular. El init-param se declara dentro de la <servlet>etiqueta.

<servlet>
     <display-name>HelloWorldServlet</display-name>
     <servlet-name>HelloWorldServlet</servlet-name>
     <init-param>
         <param-name>Greetings</param-name>
         <param-value>Hello</param-value>
     </init-param>
</servlet>

y puede acceder a esos parámetros en el servlet de la siguiente manera:

out.println(getInitParameter("Greetings"));

Si desea almacenar datos que son comunes para toda la aplicación y si no cambia con frecuencia, puede usar en <context-param>lugar del servletContext.setAttribute()método del contexto de la aplicación. Para obtener más información sobre el uso de <context-param>VS, ServletContext.setAttribute()consulte esta pregunta . context-param se declaran bajo la etiqueta web-app. Puede declarar y acceder a la <context-param>siguiente

<web-app>
    <context-param>
        <param-name>Country</param-name>
        <param-value>India</param-value>
    </context-param>
    <context-param>
        <param-name>Age</param-name>
        <param-value>24</param-value>
    </context-param>
</web-app>

Uso en la aplicación en JSP o Servlet

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
Sai Upadhyayula
fuente
1
¿Cómo configurar el parámetro de contexto mediante programación?
Gaurav
2
@gaurav Interesante, puedo encontrar un método para <init-param>: ServletContext::setInitParameter(String name, String value)pero no uno para establecer un parámetro de contexto <context-param>.
Basil Bourque
8

Considere la siguiente definición en web.xml

<servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>TestServlet</servlet-class>
    <init-param>
        <param-name>myprop</param-name>
        <param-value>value</param-value>
    </init-param>
</servlet>

Puede ver que init-param está definido dentro de un elemento de servlet. Esto significa que solo está disponible para el servlet bajo declaración y no para otras partes de la aplicación web. Si desea que este parámetro esté disponible para otras partes de la aplicación, diga una JSP, esto debe pasarse explícitamente a la JSP. Por ejemplo, pasado como request.setAttribute (). Esto es muy ineficiente y difícil de codificar.

Entonces, si desea obtener acceso a valores globales desde cualquier lugar dentro de la aplicación sin pasar explícitamente esos valores, debe usar los parámetros de inicio de contexto.

Considere la siguiente definición en web.xml

 <web-app>
      <context-param>
           <param-name>myprop</param-name>
           <param-value>value</param-value>
      </context-param>
 </web-app>

Este parámetro de contexto está disponible para todas las partes de la aplicación web y se puede recuperar del objeto Context. Por ejemplo, getServletContext (). GetInitParameter (“dbname”);

Desde una JSP puede acceder al parámetro de contexto utilizando el objeto implícito de la aplicación. Por ejemplo, application.getAttribute ("dbname");

SMA
fuente
6
<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

Inicialicé mi PersistenceContext.xmlinterior <context-param>porque todos mis servlets interactuarán con la base de datos en el marco MVC.

Howerver,

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:ApplicationContext.xml
        </param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.organisation.project.rest</param-value>
    </init-param>
</servlet>

en el código antes mencionado, estoy configurando jersey y la ApplicationContext.xmlúnica capa para descansar. Por lo mismo que estoy usando</init-param>

Ankur Piyush
fuente
5

<init-param>se utilizará si desea inicializar algún parámetro para un servlet en particular. Cuando la solicitud llegue al servlet primero init, se llamará a su método, doGet/doPostmientras que si desea inicializar alguna variable para toda la aplicación, deberá usarla <context-param>. Cada servlet tendrá acceso a la variable de contexto.

Adeel Ahmad
fuente
4

¿Cuál es la diferencia entre <init-param>y <context-param>?

Servlet único frente a varios servlets.

Otras respuestas dan detalles, pero aquí está el resumen:

Una aplicación web, es decir, un "contexto", se compone de uno o más servlets .

  • <init-param>define un valor disponible para un solo servlet específico dentro de un contexto.
  • <context-param>define un valor disponible para todos los servlets dentro de un contexto.
Albahaca Bourque
fuente