Quelle est la différence entre <init-param>
et <context-param>
!?
Réponses:
<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");
<init-param>
: ServletContext::setInitParameter(String name, String value)
mais pas une pour définir un paramètre de contexte <context-param>
.
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»);
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>
J'ai initialisé mon PersistenceContext.xml
inté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.xml
seule couche de repos. Pour le même que j'utilise</init-param>
<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 init
méthode sera appelée alors, doGet/doPost
alors 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.
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.