INIT-param i context-param

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

Author: mina, 2015-02-08

4 answers

<init-param> i <context-param> są parametrami statycznymi, które są przechowywane w sieci.plik xml. Jeśli masz jakieś dane, które nie zmieniają się często, możesz je zapisać w jednym z nich.

Jeśli chcesz przechowywać określone dane, które są ograniczone do określonego zakresu serwletów , możesz użyć <init-param>.Wszystko, co zadeklarujesz wewnątrz <init-param> jest dostępne tylko dla tego konkretnego servletu.init-param jest zadeklarowany wewnątrz znacznika <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>

I możesz uzyskać dostęp do tych parametry w serwletie 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ę często, możesz użyć metody <context-param> zamiast servletContext.setAttribute() kontekstu aplikacji. Aby uzyskać więcej informacji na temat użycia <context-param> VS ServletContext.setAttribute(), spójrz na to pytanie. context-param {[19] } są deklarowane pod tagiem web-app. Możesz zadeklarować i uzyskać dostęp do <context-param> w następujący sposób

<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 albo w JSP lub Servlet

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
 89
Author: Sai Upadhyayula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 07:01:56

Rozważ poniższą definicję w 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>

Widać, że init-param jest zdefiniowany wewnątrz elementu servleta. Oznacza to, że jest on dostępny tylko dla servletu pod deklaracją, a nie dla innych części aplikacji webowej. Jeśli chcesz, aby ten parametr był dostępny dla innych części aplikacji powiedz JSP to musi być jawnie przekazywane do JSP. Na przykład przekazany jako żądanie.setAttribute (). Jest to wysoce nieefektywne i trudne do zakodowania.

Więc jeśli aby uzyskać dostęp do wartości globalnych z dowolnego miejsca w aplikacji bez jawnego przekazywania tych wartości, musisz użyć parametrów Init kontekstowego.

Rozważ następującą definicję w web.xml

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

Ten param kontekstowy jest dostępny dla wszystkich części aplikacji webowej i może być pobrany z obiektu Context. Na przykład getServletContext ().getynitparameter ("dbname");

Z JSP można uzyskać dostęp do parametru context za pomocą aplikacji obiekt ukryty. Na przykład aplikacja.getAttribute ("dbname");

 8
Author: SMA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-08 10:43:40

<init-param> będzie używany, jeśli chcesz zainicjalizować jakiś parametr dla konkretnego serwletu. Gdy żądanie przyjdzie najpierw do servleta zostanie wywołana jego metoda init następnie doGet/doPost, natomiast jeśli chcesz zainicjalizować jakąś zmienną dla całej aplikacji, musisz użyć <context-param>. Każdy servlet będzie miał dostęp do zmiennej kontekstowej.

 5
Author: Adeel Ahmad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-08 10:37:42
<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

Zainicjowałem moje PersistenceContext.xml w <context-param> ponieważ wszystkie moje serwlety będą współdziałać z bazą 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 wspomnianym kodzie konfiguruję jersey i ApplicationContext.xml tylko warstwę spoczynkową. Do tego samego używam </init-param>

 5
Author: Ankur Piyush,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-08 10:52:41