init-param i context-param

88

Jaka jest różnica między <init-param>i <context-param>!?

mina
źródło
@RC. To pytanie nie-gdzie omawia różnicę między tymi dwoma parametrami .. Chodzi tylko o właściwości załadowane w dwóch kontekstach ..
Rohit Jain
Zatrzymałem się na tytule, mój błąd.

Odpowiedzi:

120

<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");
Sai Upadhyayula
źródło
1
jak programowo ustawić parametr kontekstu?
Gaurav
2
@gaurav Interesujące, mogę znaleźć metodę na <init-param>: ServletContext::setInitParameter(String name, String value)ale nie do ustawienia parametru kontekstu <context-param>.
Basil Bourque
8

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”);

SMA
źródło
6
<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

Mam zainicjowany Moje strony PersistenceContext.xmlterminie <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.xmljedyną do odpoczynku warstwę. Do tego samego używam</init-param>

Ankur Piyush
źródło
5

<init-param>zostanie użyty, jeśli chcesz zainicjować jakiś parametr dla określonego serwletu. Kiedy żądanie przyjdzie do serwletu najpierw initzostanie wywołana jego metoda, doGet/doPostnatomiast 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.

Adeel Ahmad
źródło
4

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.
Basil Bourque
źródło