Was ist der Unterschied zwischen <init-param>
und <context-param>
!?
Was ist der Unterschied zwischen <init-param>
und <context-param>
!?
Antworten:
<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");
<init-param>
: ServletContext::setInitParameter(String name, String value)
aber keine zum Festlegen eines Kontextparameters <context-param>
.
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");
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>
Ich habe meine initialisiert PersistenceContext.xml
innerhalb <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.xml
einzige Schicht, um sich auszuruhen. Für das gleiche benutze ich</init-param>
<init-param>
wird verwendet, wenn Sie einen Parameter für ein bestimmtes Servlet initialisieren möchten. Wenn die Anforderung zuerst an das Servlet gesendet init
wird, wird die Methode dann aufgerufen. doGet/doPost
Wenn 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.
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.