Jaka jest różnica między <init-param>
i <context-param>
!?
Odpowiedzi:
<init-param>
i <context-param>
są statycznymi parametrami, które są przechowywane w pliku web.xml. Jeśli masz jakieś dane, które nie zmieniają się często, możesz je przechowywać w jednym z nich.
Jeśli chcesz przechowywać określone dane, które są ograniczone do określonego zakresu serwletu , możesz użyć. <init-param>
Wszystko, co zadeklarujesz w środku, <init-param>
jest dostępne tylko dla tego konkretnego serwletu. Parametr init jest zadeklarowany wewnątrz <servlet>
tagu.
<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>
i możesz uzyskać dostęp do tych parametrów w serwlecie w następujący sposób:
out.println(getInitParameter("Greetings"));
Jeśli chcesz przechowywać dane, które są wspólne dla całej aplikacji i jeśli nie zmieniają się one często, możesz użyć <context-param>
zamiast servletContext.setAttribute()
metody kontekstu aplikacji. Aby uzyskać więcej informacji na temat korzystania z <context-param>
VS ServletContext.setAttribute()
, spójrz na to pytanie . parametry kontekstu są zadeklarowane pod znacznikiem web-app
. Możesz zadeklarować i uzyskać dostęp do <context-param>
następujących
<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>
Użycie w aplikacji na JSP lub w serwlecie
getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
<init-param>
: ServletContext::setInitParameter(String name, String value)
ale nie do ustawienia parametru kontekstu <context-param>
.
Rozważ poniższą definicję w pliku 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>
Możesz zobaczyć, że init-param jest zdefiniowane wewnątrz elementu serwletu. Oznacza to, że jest dostępna tylko dla deklarowanego serwletu, a nie dla innych części aplikacji internetowej. Jeśli chcesz, aby ten parametr był dostępny dla innych części aplikacji, powiedz, że strona JSP musi być jawnie przekazana do strony JSP. Na przykład przekazane jako request.setAttribute (). Jest to wysoce nieefektywne i trudne do zakodowania.
Jeśli więc chcesz uzyskać dostęp do wartości globalnych z dowolnego miejsca w aplikacji bez jawnego przekazywania tych wartości, musisz użyć parametrów Init kontekstu.
Rozważ następującą definicję w pliku web.xml
<web-app>
<context-param>
<param-name>myprop</param-name>
<param-value>value</param-value>
</context-param>
</web-app>
Ten parametr kontekstu jest dostępny dla wszystkich części aplikacji internetowej i można go pobrać z obiektu Context. Na przykład getServletContext (). GetInitParameter („dbname”);
Z poziomu strony JSP można uzyskać dostęp do parametru kontekstu za pomocą niejawnego obiektu aplikacji. Na przykład application.getAttribute („dbname”);
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>
Mam zainicjowany Moje strony PersistenceContext.xml
terminie <context-param>
, ponieważ wszyscy moi serwlety będą interakcji z bazy danych w ramach 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>
we w / w kodzie konfiguruję koszulkę i ApplicationContext.xml
jedyną do odpoczynku warstwę. Do tego samego używam</init-param>
<init-param>
zostanie użyty, jeśli chcesz zainicjować jakiś parametr dla określonego serwletu. Kiedy żądanie przyjdzie do serwletu najpierw init
zostanie wywołana jego metoda, doGet/doPost
natomiast jeśli chcesz zainicjować jakąś zmienną dla całej aplikacji, będziesz musiał jej użyć <context-param>
. Każdy serwlet będzie miał dostęp do zmiennej kontekstu.
Jaka jest różnica między
<init-param>
i<context-param>
!?
Pojedynczy serwlet a wiele serwletów.
Inne odpowiedzi podają szczegóły, ale oto podsumowanie:
Aplikacja internetowa, czyli „kontekst”, składa się z co najmniej jednego serwletu .
<init-param>
definiuje wartość dostępną dla pojedynczego określonego serwletu w kontekście.<context-param>
definiuje wartość dostępną dla wszystkich serwletów w kontekście.