Qual'è la differenza tra <init-param>e <context-param>!?
Risposte:
<init-param>e <context-param>sono parametri statici che vengono memorizzati nel file web.xml. Se hai dei dati che non cambiano frequentemente, puoi salvarli in uno di essi.
Se si desidera memorizzare dati particolari che sono limitati a un particolare ambito servlet , è possibile utilizzare. <init-param>Tutto ciò che si dichiara all'interno <init-param>è accessibile solo per quel particolare servlet. Il parametro init è dichiarato all'interno del <servlet>tag.
<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>
e puoi accedere a questi parametri nel servlet come segue:
out.println(getInitParameter("Greetings"));
Se si desidera memorizzare dati comuni per l' intera applicazione e se non vengono modificati frequentemente, è possibile utilizzare al <context-param>posto del servletContext.setAttribute()metodo del contesto dell'applicazione. Per ulteriori informazioni sull'utilizzo di <context-param>VS, dai ServletContext.setAttribute()un'occhiata a questa domanda . parametri di contesto sono dichiarati sotto il tag web-app. È possibile dichiarare e accedere a <context-param>come segue
<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>
Utilizzo nell'applicazione in un JSP o in un servlet
getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
<init-param>: ServletContext::setInitParameter(String name, String value)ma non uno per impostare un parametro di contesto <context-param>.
Considera la seguente definizione in 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>
Puoi vedere che init-param è definito all'interno di un elemento servlet. Ciò significa che è disponibile solo per il servlet sotto dichiarazione e non per altre parti dell'applicazione web. Se si desidera che questo parametro sia disponibile per altre parti dell'applicazione, dire che un JSP deve essere passato esplicitamente al JSP. Ad esempio passato come request.setAttribute (). Questo è altamente inefficiente e difficile da codificare.
Quindi, se si desidera accedere a valori globali da qualsiasi punto dell'applicazione senza passare esplicitamente tali valori, è necessario utilizzare i parametri Context Init.
Considera la seguente definizione in web.xml
<web-app>
<context-param>
<param-name>myprop</param-name>
<param-value>value</param-value>
</context-param>
</web-app>
Questo parametro di contesto è disponibile per tutte le parti dell'applicazione Web e può essere recuperato dall'oggetto Context. Ad esempio, getServletContext (). GetInitParameter ("dbname");
Da un JSP è possibile accedere al parametro di contesto utilizzando l'oggetto implicito dell'applicazione. Ad esempio, application.getAttribute ("dbname");
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>
Ho inizializzato il mio PersistenceContext.xmlinterno <context-param>perché tutti i miei servlet interagiranno con il database nel framework 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>
nel codice di cui sopra, sto configurando jersey e l' ApplicationContext.xmlunico per riposare strato. Per lo stesso che sto usando</init-param>
<init-param>verrà utilizzato se si desidera inizializzare alcuni parametri per un particolare servlet. Quando la richiesta arriva prima al servlet, il suo initmetodo verrà chiamato quindi, doGet/doPostmentre se si desidera inizializzare alcune variabili per l'intera applicazione, sarà necessario utilizzarle <context-param>. Ogni servlet avrà accesso alla variabile di contesto.
Qual'è la differenza tra
<init-param>e<context-param>!?
Servlet singolo rispetto a più servlet.
Altre risposte forniscono dettagli, ma ecco il riepilogo:
Una web app, cioè un “contesto”, è composta da uno o più servlet .
<init-param>definisce un valore disponibile per un singolo servlet specifico all'interno di un contesto.<context-param>definisce un valore disponibile per tutti i servlet all'interno di un contesto.