init-param und context-param

85

Was ist der Unterschied zwischen <init-param>und <context-param>!?

mina
quelle
@RC. Diese Frage nirgends diskutiert den Unterschied zwischen diesen beiden Parametern. Es geht nur um Eigenschaften, die in den beiden Kontexten geladen werden.
Rohit Jain
Ich blieb beim Titel stehen, mein Schlechtes.

Antworten:

116

<init-param>und <context-param>sind statische Parameter, die in der Datei web.xml gespeichert sind. Wenn Sie Daten haben, die sich nicht häufig ändern, können Sie diese in einer von ihnen speichern.

Wenn Sie bestimmte Daten speichern möchten, die auf einen bestimmten Servlet-Bereich beschränkt sind , können Sie <init-param>Folgendes verwenden. Auf alles, was Sie darin deklarieren , kann <init-param>nur für dieses bestimmte Servlet zugegriffen werden. Der init-Parameter wird im <servlet>Tag deklariert .

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

und Sie können auf diese Parameter im Servlet wie folgt zugreifen:

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

Wenn Sie Daten speichern möchten, die für die gesamte Anwendung gelten und sich nicht häufig ändern, können Sie <context-param>anstelle der servletContext.setAttribute()Methode des Anwendungskontexts verwenden. Weitere Informationen zur Verwendung von <context-param>VS finden Sie ServletContext.setAttribute()in dieser Frage . Kontextparameter werden unter dem Tag deklariert web-app. Sie können <context-param>Folgendes deklarieren und darauf zugreifen

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

Verwendung in der Anwendung entweder in einer JSP oder einem Servlet

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
Sai Upadhyayula
quelle
1
Wie kann man Kontextparameter programmgesteuert einstellen?
Gaurav
2
@gaurav Interessanterweise kann ich eine Methode finden für <init-param>: ServletContext::setInitParameter(String name, String value)aber keine zum Festlegen eines Kontextparameters <context-param>.
Basil Bourque
8

Betrachten Sie die folgende Definition 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>

Sie können sehen, dass init-param in einem Servlet-Element definiert ist. Dies bedeutet, dass es nur dem deklarierten Servlet und nicht anderen Teilen der Webanwendung zur Verfügung steht. Wenn Sie möchten, dass dieser Parameter anderen Teilen der Anwendung zur Verfügung steht, z. B. einer JSP, muss dies explizit an die JSP übergeben werden. Zum Beispiel als request.setAttribute () übergeben. Dies ist sehr ineffizient und schwer zu codieren.

Wenn Sie also von überall in der Anwendung auf globale Werte zugreifen möchten, ohne diese Werte explizit zu übergeben, müssen Sie Context Init-Parameter verwenden.

Betrachten Sie die folgende Definition in web.xml

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

Dieser Kontextparameter steht allen Teilen der Webanwendung zur Verfügung und kann aus dem Kontextobjekt abgerufen werden. Zum Beispiel getServletContext (). GetInitParameter ("Datenbankname");

Über eine JSP können Sie über das implizite Anwendungsobjekt auf den Kontextparameter zugreifen. Beispiel: application.getAttribute ("Datenbankname");

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

Ich habe meine initialisiert PersistenceContext.xmlinnerhalb <context-param>weil alle meine Servlets werden in MVC - Framework mit Datenbank interagieren.

Wie auch immer,

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

In dem oben genannten Code konfiguriere ich Trikot und die ApplicationContext.xmleinzige Schicht, um sich auszuruhen. Für das gleiche benutze ich</init-param>

Ankur Piyush
quelle
5

<init-param>wird verwendet, wenn Sie einen Parameter für ein bestimmtes Servlet initialisieren möchten. Wenn die Anforderung zuerst an das Servlet gesendet initwird, wird die Methode dann aufgerufen. doGet/doPostWenn Sie jedoch eine Variable für die gesamte Anwendung initialisieren möchten, müssen Sie diese verwenden <context-param>. Jedes Servlet hat Zugriff auf die Kontextvariable.

Adeel Ahmad
quelle
3

Was ist der Unterschied zwischen <init-param>und <context-param>!?

Einzelner Servlet versus mehrere Servlets.

Andere Antworten geben Details, aber hier ist die Zusammenfassung:

Eine Web-App, dh ein „Kontext“, besteht aus einem oder mehreren Servlets .

  • <init-param>Definiert einen Wert, der einem einzelnen Servlet in einem Kontext zur Verfügung steht.
  • <context-param>Definiert einen Wert, der allen Servlets in einem Kontext zur Verfügung steht.
Basil Bourque
quelle