init-param ve context-param


88

<init-param>Ve <context-param>! Arasındaki fark nedir ?


@RC. Bu soru hiçbir yerde bu iki parametre arasındaki farkı tartışıyor .. Bu sadece iki bağlamda yüklü olan özelliklerle ilgili ..
Rohit Jain

Başlıkta durdum, hatam.

Yanıtlar:


122

<init-param>ve <context-param>web.xml dosyasında saklanan statik parametrelerdir. Sık sık değişmeyen verileriniz varsa, bunlardan birinde saklayabilirsiniz.

Belirli bir sunucu uygulaması kapsamı ile sınırlı belirli verileri depolamak istiyorsanız , o zaman kullanabilirsiniz. <init-param>İçinde bildirdiğiniz her şeye <init-param>yalnızca o belirli sunucu uygulaması için erişilebilir. İnit -parametresi<servlet> etiketin içinde bildirilir .

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

ve bu parametrelere sunucu uygulamasında aşağıdaki şekilde erişebilirsiniz:

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

Tüm uygulama için ortak olan verileri depolamak istiyorsanız ve sık sık değişmiyorsa , uygulama bağlamı yöntemi <context-param>yerine kullanabilirsiniz servletContext.setAttribute(). Kullanımı ile ilgili daha fazla bilgi için <context-param>VS ServletContext.setAttribute()bu bir göz soru . context-param etiketi altında bildirilir web-app. Sen beyan ve erişebilir <context-param>şöyle

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

JSP veya Servlet'te uygulamada kullanım

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");

1
bağlam parametresi programlı olarak nasıl ayarlanır?
Gaurav

2
@gaurav İlginç, için bir yöntem bulabilirim <init-param>: ServletContext::setInitParameter(String name, String value)ancak bağlam parametresi ayarlamak için bir yöntem bulamıyorum <context-param>.
Basil Bourque

8

Web.xml'deki aşağıdaki tanımı düşünün

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

İnit-param'in bir servlet öğesi içinde tanımlandığını görebilirsiniz. Bu, web uygulamasının diğer bölümlerinde değil, yalnızca beyan kapsamında sunucu uygulaması için kullanılabilir olduğu anlamına gelir. Bu parametrenin uygulamanın diğer bölümlerinde kullanılabilmesini istiyorsanız, bunun JSP'ye açıkça iletilmesi gerektiğini söyleyin. Örneğin request.setAttribute () olarak geçti. Bu oldukça verimsizdir ve kodlanması zordur.

Bu nedenle, uygulama içinde herhangi bir yerden, bu değerleri açıkça iletmeden global değerlere erişmek istiyorsanız, Bağlam Başlatma parametrelerini kullanmanız gerekir.

Web.xml'deki aşağıdaki tanımı göz önünde bulundurun

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

Bu bağlam parametresi, web uygulamasının tüm bölümlerinde mevcuttur ve İçerik nesnesinden alınabilir. Örneğin, getServletContext (). GetInitParameter (“dbname”);

Bir JSP'den uygulama örtük nesnesini kullanarak bağlam parametresine erişebilirsiniz. Örneğin, application.getAttribute ("dbname");


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

Kızkardeşimi başlatıldı gelmiş PersistenceContext.xmlolan <context-param>tüm servlet'ler MVC çerçevesinde veritabanı ile etkileşim olacaktır çünkü.

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>

Yukarıda belirtilen kodda, jarse ve ApplicationContext.xmldinlenmek için tek katman yapılandırıyorum . Ben de aynısı için kullanıyorum</init-param>


5

<init-param>belirli bir sunucu uygulaması için bazı parametreleri başlatmak istiyorsanız kullanılacaktır. İstek sunucu uygulamasına geldiğinde, ilk önce inityöntemi çağrılacaktır, doGet/doPostoysa tüm uygulama için bazı değişkenleri başlatmak istiyorsanız kullanmanız gerekecektir <context-param>. Her sunucu uygulamasının bağlam değişkenine erişimi olacaktır.


4

<init-param>Ve <context-param>! Arasındaki fark nedir ?

Tek sunucu uygulaması karşısındaBirden çok sunucu uygulamasına uygulaması.

Diğer Cevaplar ayrıntı verir, ancak işte özet:

Bir web uygulaması, yani bir "bağlam", bir veya daha fazla sunucu uygulamasından oluşur .

  • <init-param>bir bağlam içindeki belirli tek bir sunucu uygulamasında kullanılabilen bir değeri tanımlar .
  • <context-param>bir bağlam içindeki tüm sunucu uygulamalarının kullanabileceği bir değeri tanımlar .
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.