2015-02-08 12 views
51

Qual è la differenza tra <init-param> e <context-param>!?init-param e context-param

+0

@RC. Quella domanda no-where discute la differenza tra quei due parametri .. Si tratta solo di proprietà caricate nei due contesti .. –

+0

Mi sono fermato al titolo, il mio male. –

risposta

76

<init-param> e <context-param> sono i parametri statici che sono memorizzati nel file web.xml. Se si dispone di dati che non cambiano frequentemente, è possibile memorizzarli in uno di essi.

Se si desidera memorizzare i dati particolare che si limita solamente ad un particolare ambito servlet, quindi è possibile utilizzare <init-param> .Anything dichiari dentro <init-param> è accessibile solo solo per quel particolare servlet.The init-param è dichiarato all'interno del tag <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> 

ed è possibile accedere a tali parametri nella servlet come segue:

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

Se si desidera memorizzare i dati che è comune a tutta l'applicazione e se non cambia di frequente si può utilizzare <context-param> anziché il metodo servletContext.setAttribute() del contesto dell'applicazione. Per ulteriori informazioni sull'utilizzo di <context-param> VS ServletContext.setAttribute() dai un'occhiata a questo question. context-param sono dichiarati sotto il tag web-app. È possibile dichiarare e accedere al <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> 

Uso nell'applicazione o in una JSP o Servlet

getServletContext().getInitParameter("Country"); 
getServletContext().getInitParameter("Age"); 
4

<init-param> verrà utilizzato se si desidera inizializzare alcuni parametri per un particolare servlet. Quando la richiesta arriva prima al servlet, verrà chiamato il suo metodo init quindi doGet/doPost mentre se si desidera inizializzare alcune variabili per l'intera applicazione sarà necessario utilizzare <context-param>. Ogni servlet avrà accesso alla variabile di contesto.

5

consideri la definizione di seguito 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> 

Si può 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, indicare un JSP che deve essere passato esplicitamente al JSP. Per esempio passato come request.setAttribute(). Questo è altamente inefficiente e difficile da codificare.

Quindi, se si desidera ottenere l'accesso ai valori globali da qualsiasi punto all'interno dell'applicazione senza passare esplicitamente tali valori, è necessario utilizzare i parametri di Context Init.

Si consideri 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 contesto è a disposizione di 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");

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

ho inizializzato il mio PersistenceContext.xml entro <context-param> perché tutti i miei servlet interagiranno con database in 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 maglia e l'ApplicationContext.xml solo strato di riposo. Per lo stesso sto usando </init-param>

Problemi correlati