Sunucu uygulaması <load-on-startup> değeri ne anlama geliyor?


174

Burada biraz kafam karışıyor. Bizim uygulamamızda birkaç sunucu uygulaması tanımladık. İşte sunuculardan birinin alıntısı web.xml:

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>com.foo.framework.axis2.http.FrameworkServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet> 

Anladığım kadarıyla, <load-on-startup>otomatik olarak yüklenebilmesi için değerinin pozitif bir tam sayı olması gerekir. Google'a baktım ancak karşılaştığım yanıtlar sadece karışıklığımı arttırdı.

Yanıtlar:


186

Resin 3.0 bu davranışı belgeler:

başlangıçta yükleme (isteğe bağlı) bir tamsayı değeri belirtebilir. Değer 0 veya daha büyükse, sunucu uygulamalarının yükleneceğini belirtir, daha yüksek numaralı sunucu uygulamaları, daha küçük numaralı sunucu uygulamalarından sonra yüklenir.

JSP 3.1 Spec (JSR 340) Sayfanın 14-160 bu diyor:

Öğe load-on-startup, bu sunucu uygulamasının Web uygulamasının başlangıcında yüklenmesi (başlatılması ve init () çağrılması) gerektiğini belirtir. Bu öğenin öğe içeriği, sunucu uygulamasının yüklenme sırasını gösteren bir tamsayı olmalıdır. Değer negatif bir tamsayı ise veya öğe yoksa, kap her seçtiğinde sunucu uygulamasını yükleyebilir. Değer pozitif bir tamsayı veya 0 ise, uygulama dağıtılırken kapsayıcı sunucu uygulamasını yüklemeli ve başlatmalıdır. Kap, daha küçük tamsayılarla işaretlenen sunucuların, daha yüksek tamsayılarla işaretlenen sunucuların yüklenmesini garanti etmelidir. Konteyner, aynı load-on-startupdeğerdeki sunucu uygulamalarının yüklenme sırasını seçebilir .

Muhtemelen sadece JSR'yi değil, aynı zamanda web kapsayıcınızın belgelerini de kontrol etmek istersiniz. Farklılıklar olabilir


Cletus cevabında yanlış. Yayını düzenlemeyi düşünmelisiniz.
Alboz

3
Başlangıçta yükleme belirtilmediğinde ne olur?
Nirmal

1
@Nirmal İkinci paragraf, öğe yoksa, öğenin negatif olduğu davranışla aynı olduğunu belirtir; yani kap, her seçtiğinde sunucu uygulamasını yüklemekte serbesttir.
Finnegan

129

Kısa Yanıt : değer> = 0, web uygulaması konuşlandırıldığında veya sunucu başlatıldığında sunucu uygulamasının yüklendiği anlamına gelir. değeri <0: kapsayıcı her istendiğinde sunucu uygulaması yüklenir.

Uzun cevap (spesifikasyondan):

Başlangıçtaki yükleme öğesi, bu sunucu uygulamasının web uygulamasının başlangıcında yüklenmesi (başlatılması ve init () çağrılması) gerektiğini belirtir. Bu öğenin isteğe bağlı içeriği, sunucu uygulamasının yüklenme sırasını gösteren bir tamsayı olmalıdır. Değer negatif bir tamsayı ise veya öğe yoksa, kap her seçtiğinde sunucu uygulamasını yükleyebilir. Değer, pozitif bir 128 tam sayı veya 0 ise, kap, uygulama dağıtılırken sunucu uygulamasını yüklemeli ve başlatmalıdır. Kap, daha küçük tamsayılarla işaretlenen sunucuların, daha yüksek tamsayılarla işaretlenen sunucuların yüklenmesini garanti etmelidir. Konteyner, aynı başlangıçta yükleme değerine sahip sunucu uygulamalarının yüklenme sırasını seçebilir.


1
Ve bu yüzden uygulama başladığında önce yüklemek için DispatcherServlet inorder için 0'ı işaretliyoruz ..
Şanslı

11

Bir istek ona erişmeye çalışana kadar sunucu uygulamasının başlatılmayacağını belirtir.

Başlangıçtaki yük sıfıra eşit veya daha büyükse, konteyner başladığında, o sunucu uygulamasını oraya koyduğunuz başlangıç ​​değerine göre artan sırada (yani 0, 1 sonra 2 sonra 5 sonra 10 vb.) Başlatır. .


7
Sıfır da yüklenmeye neden olur. Yalnızca negatif değerler garanti edilmez: "[...] Değer pozitif bir tamsayı veya 0 ise, uygulama dağıtılırken kapsayıcı sunucu uygulamasını yüklemeli ve başlatmalıdır. [...]"
marabol

1
@cletus bunu değiştirmek için daha iyi olduğunu düşünüyorum O'dan büyük olan daha büyük ya da sıfıra eşit kabul birinin başına belirtildiği gibi birçok kullanıcı cevabınızı okudum çünkü. Şimdiden teşekkürler
Tarık

9

Servlet Yaşam Döngüsü

Bir sunucu uygulamasının yaşam döngüsü, sunucu uygulamasının konuşlandırıldığı kap tarafından kontrol edilir. Bir istek bir sunucu uygulamasına eşlendiğinde, kapsayıcı aşağıdaki adımları gerçekleştirir.

  1. Sunucu uygulamasının bir örneği yoksa, web kapsayıcısı:

    a. Sunucu uygulaması sınıfını yükler

    b. Servlet sınıfının bir örneğini oluşturur

    c. İnlet yöntemini çağırarak sunucu uygulaması örneğini başlatır (başlatma, Sunucu Uygulaması Oluşturma ve Başlatma bölümünde anlatılmıştır )

  2. Kapsayıcı, istek ve yanıt nesnelerini ileterek hizmet yöntemini çağırır. Hizmet yöntemleri Yazma Hizmet Yöntemleri bölümünde tartışılmaktadır .

0 değeri, load-on-startupbu sunucu uygulamasına bir istek geldiğinde 1. noktanın yürütüldüğü anlamına gelir. Diğer değerler nokta 1'in kapsayıcı başlatıldığında yürütüldüğü anlamına gelir.


kusursuz cevap!
gaurav

1

Diğer yanıtta ve bu başlangıçta yükleme makalesinde belirtildiği gibi sıfırında belirtildiği gibi kabul edilebilir ve başka bir sunucu uygulamasında bu yükleme sırasında ve öncelikli olarak yüklenirken öncelikli olacaktır. Load-on statup'un en iyi kullanımı, ilk istek bağlantı havuzu oluşturan veya ağ çağrısı yapan veya hantal kaynak tutan sunucu uygulamaları gibi gelmeden önce başlatılması daha uzun süren sunucu uygulamalarını yüklemektir; bu, ilk birkaç istek için yanıt süresini önemli ölçüde azaltır.


1
  1. Değer iki sunucu uygulaması için aynıysa, web.xml dosyasında bildirildikleri sırayla yüklenecekler.
  2. 0 ise veya Konteyner bunları yüklemek istediğinde Servlet'ten negatif tamsayı yüklenir.
  3. web kapsayıcısı ile yükleme, başlatma ve init () yöntemine çağırma yöntemini garanti eder.
  4. Herhangi bir sunucu uygulaması için web kapsayıcı bunları yüklemeye karar verdiğinde yüklenecek olandan daha fazla öğe yoksa.

0

evet aynı değere sahip olabilir .... başlangıçta yükleme sayı vermek için neden sunucu tüm sunucu uygulaması yüklemek için bir sıra tanımlamaktır. Başlangıçta 0 yükleme değerine sahip sunucu uygulaması önce yüklenir ve 1 değerine sahip sunucu uygulaması bundan sonra yüklenir.

iki sunucu uygulaması başlangıçta yükleme için aynı değere sahip olacaksa, web.xml dosyasında yukarıdan aşağıya nasıl bildirildiklerinden yüklenecektir. önce web.xml dosyasında gelen sunucu uygulaması yüklenir ve diğeri bundan sonra yüklenir.


0

-> (Başlangıçta yükleme olmaması) etiketi Her şeyden önce sunucuda sunucu uygulaması konuşlandırıldığında, sunucu uygulaması nesnesini oluşturmak sunucunun sorumluluğundadır. Örneğin: Servlet'in sunucuda konuşlandırıldığını varsayalım (Servlet Nesnesi sunucuda mevcut değildir) istemci isteği ilk kez sunucu uygulamasına gönderir, ardından sunucu varsayılan kurucu yardımıyla sunucu uygulaması nesnesini oluşturur ve hemen init () öğesini çağırır. Bundan sonra istemci isteği gönderdiğinde, nesne zaten mevcut olduğu için sadece hizmet yöntemi çalıştırılacaktır

Dağıtım tanımlayıcısında başlangıçta yükleme etiketi kullanılırsa: Dağıtım sırasında sunucu, sunucu uygulamaları için etiketler arasında sağlanan pozitif değere dayalı olarak sunucu uygulaması nesnesini oluşturur. Sunucu uygulaması sınıfları için nesne oluşturma işlemi 0-128 0 numaradan başlayacaktır. Önce sunucu uygulaması oluşturulur, ardından diğer numaralar oluşturulur.

Web.xml dosyasındaki iki sunucu uygulaması için aynı değeri sağlarsak, web.xml dosyasındaki sınıfların konumuna göre nesnelerin oluşturulması da sunucudan sunucuya değişir.

Başlangıç ​​etiketi üzerindeki yük arasında negatif değer sağlarsak, sunucu sunucu uygulaması nesnesini oluşturmaz.

Sunucunun sunucu uygulaması için nesneyi oluşturduğu diğer Senaryolar.

Web.xml dosyasındaki başlangıç ​​etiketinde yük kullanmazsak, istemci ilk kez sunucu nesneyi oluşturduğunda istek gönderdiğinde proje dağıtılır ve sunucu yaşam döngüsü yöntemlerini çağırmaktan sorumludur. Sonra sunucuda bir .class değiştirilmişse (tomcat). yine istemci değiştirilmiş sunucu uygulaması için istek gönderir, ancak tomcat durumunda yeni nesne oluşturulmaz ve sunucunun yeniden başlatılması gerçekleşmediği sürece sunucu mevcut nesneyi kullanır. Ancak, herhangi bir .class dosyası sunucuda, bir istek alırsa sunucuyu yeniden başlatmaya gerek kalmadan değiştirildiğinde web mantığı sınıfında, sunucu varolan sunucu uygulamasında destroy yöntemini çağırır ve yeni bir sunucu uygulaması nesnesi oluşturur ve başlatılması için init () öğesini çağırır. .


-1

Değer <0 ise, istek geldiğinde serlet başlatılır, aksi takdirde> = 0 kap, değerlerin artan sırasına göre yüklenir. 2 veya daha fazla sunucu uygulaması aynı değere sahipse, web.xml dosyasında bildirilen sunucu uygulamalarının sırası.


-2

Sunucu uygulaması kabı, başlatma sırasında veya ilk istek yapıldığında sunucu uygulamasını yükler. Sunucu uygulamasının yüklenmesi, "web.xml" dosyasındaki "başlangıçta yükleme" özelliğine bağlıdır. Özelliğin pozitif bir tamsayısı varsa (0 ila 128), sunucu uygulaması konteynerin yüklenmesi ile yüklenir, aksi takdirde ilk istek hizmete geldiğinde yüklenir.

Servlet istek aldıktan sonra yüklendiğinde buna "Tembel yükleme" denir.


-6

Beklemediğiniz gibi basit.

Değer pozitifse, konteyner başladığında yüklenir

Değer, istek yapıldığında servelet'ten pozitif değilse.

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.