web-dev-qa-db-fra.com

init-param et context-param

Quelle est la différence entre <init-param> et <context-param>!?

78
mina

<init-param> et <context-param> sont des paramètres statiques stockés dans le fichier web.xml. Si vous avez des données qui ne changent pas fréquemment, vous pouvez les stocker dans l'une d'entre elles.

Si vous souhaitez stocker des données particulières qui sont limitées à une étendue de servlet particulière , vous pouvez utiliser <init-param>. Tout ce que vous déclarez à l'intérieur de <init-param> n'est accessible que pour ce servlet particulier. Le init-param est déclaré à l'intérieur de la balise <servlet>.

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

et vous pouvez accéder à ces paramètres dans le servlet comme suit:

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

Si vous voulez stocker des données communes à toute l'application et si cela ne change pas souvent, vous pouvez utiliser <context-param> au lieu de servletContext.setAttribute() méthode du contexte d'application. Pour plus d'informations sur l'utilisation de <context-param> VS ServletContext.setAttribute(), jetez un coup d'œil à ceci question . context-param est déclaré sous la balise web-app. Vous pouvez déclarer et accéder au <context-param> comme suit

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

Utilisation dans l'application soit dans un JSP ou un servlet

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
106
Sai Upadhyayula

Considérez la définition ci-dessous dans 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>

Vous pouvez voir que init-param est défini dans un élément servlet. Cela signifie qu'il n'est disponible que pour la servlet sous déclaration et non pour d'autres parties de l'application Web. Si vous souhaitez que ce paramètre soit disponible pour d'autres parties de l'application, indiquez qu'une JSP doit être explicitement passé à la JSP. Par exemple, passé en tant que request.setAttribute (). C'est très inefficace et difficile à coder.

Par conséquent, si vous souhaitez accéder à des valeurs globales à partir de n’importe où dans l’application sans les transmettre explicitement, vous devez utiliser les paramètres Context Init.

Considérez la définition suivante dans web.xml

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

Ce paramètre de contexte est disponible pour toutes les parties de l'application Web et peut être récupéré à partir de l'objet Context. Par exemple, getServletContext (). GetInitParameter (“nombase”);

À partir d'une JSP, vous pouvez accéder au paramètre de contexte à l'aide de l'objet implicite de l'application. Par exemple, application.getAttribute (“nombase”);

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

J'ai initialisé mon PersistenceContext.xml dans <context-param> parce que tous mes servlets interagiront avec la base de données dans le cadre 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>

dans le code susmentionné, je configure jersey et le ApplicationContext.xml uniquement pour la couche de repos. Pour la même chose, j'utilise </init-param>

6
Ankur Piyush

<init-param> sera utilisé si vous souhaitez initialiser un paramètre pour un servlet particulier. Lorsque la requête arrive à servlet en premier, sa méthode init sera appelée puis doGet/doPost alors que si vous souhaitez initialiser une variable pour une application entière, vous devrez utiliser <context-param>. Chaque servlet aura accès à la variable de contexte.

5
Adeel Ahmad