init-param et context-param

88

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

mina
la source
@RC. Cette question no-where discute de la différence entre ces deux paramètres. Il s'agit simplement de propriétés chargées dans les deux contextes.
Rohit Jain
Je me suis arrêté au titre, mon mauvais.

Réponses:

120

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

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

<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 souhaitez stocker des données communes à l' ensemble de l'application et si elles ne changent pas fréquemment, vous pouvez utiliser à la <context-param>place de la servletContext.setAttribute()méthode du contexte d'application. Pour plus d'informations sur l'utilisation de <context-param>VS, ServletContext.setAttribute()jetez un œil à cette question . context-param sont déclarés 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 dans un JSP ou un servlet

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
Sai Upadhyayula
la source
1
comment définir le paramètre de contexte par programme?
Gaurav
2
@gaurav Intéressant, je peux trouver une méthode pour <init-param>: ServletContext::setInitParameter(String name, String value)mais pas une pour définir un paramètre de contexte <context-param>.
Basil Bourque
8

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 de servlet. Cela signifie qu'il n'est disponible que pour le servlet déclaré et non pour les autres parties de l'application Web. Si vous voulez que ce paramètre soit disponible pour d'autres parties de l'application, dites une JSP, cela doit être explicitement transmis à la JSP. Par exemple passé en tant que request.setAttribute (). C'est très inefficace et difficile à coder.

Donc, si vous souhaitez accéder aux valeurs globales de n'importe où dans l'application sans passer explicitement ces valeurs, vous devez utiliser les paramètres d'initialisation du contexte.

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 («dbname»);

Depuis une JSP, vous pouvez accéder au paramètre de contexte à l'aide de l'objet implicite d'application. Par exemple, application.getAttribute («dbname»);

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

J'ai initialisé mon PersistenceContext.xmlintérieur <context-param>car 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 le maillot et la ApplicationContext.xmlseule couche de repos. Pour le même que j'utilise</init-param>

Ankur Piyush
la source
5

<init-param>sera utilisé si vous souhaitez initialiser un paramètre pour un servlet particulier. Lorsque la requête arrive d'abord au servlet, sa initméthode sera appelée alors, doGet/doPostalors que si vous voulez initialiser une variable pour toute l'application, vous devrez l'utiliser <context-param>. Chaque servlet aura accès à la variable de contexte.

Adeel Ahmad
la source
4

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

Servlet unique contre plusieurs servlets.

D'autres réponses donnent des détails, mais voici le résumé:

Une application Web, c'est-à-dire un «contexte», est constituée d' un ou plusieurs servlets .

  • <init-param>définit une valeur disponible pour un seul servlet spécifique dans un contexte.
  • <context-param>définit une valeur disponible pour toutes les servlets dans un contexte.
Basil Bourque
la source