Apa yang ditandakan oleh nilai servlet <load-on-startup>

174

Saya agak bingung di sini. Dalam aplikasi kami, kami memiliki beberapa servlet didefinisikan. Berikut adalah kutipan dari web.xmluntuk salah satu servlet:

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

Sesuai pemahaman saya nilai untuk <load-on-startup>harus menjadi bilangan bulat positif agar dapat dimuat secara otomatis. Saya mencari di google tetapi tanggapan yang saya temui hanya menambah kebingungan saya.

Vini
sumber

Jawaban:

186

Resin 3.0 mendokumentasikan perilaku ini:

load-on-startup dapat menentukan nilai integer (opsional). Jika nilainya 0 atau lebih besar, ini menunjukkan perintah untuk servlets untuk dimuat, servlets dengan angka yang lebih tinggi akan dimuat setelah servlets dengan angka yang lebih rendah.

The JSP 3.1 spesifikasi (JSR 340) mengatakan ini pada halaman 14-160:

Elemen ini load-on-startupmenunjukkan bahwa servlet ini harus dimuat (instantiated dan init () dipanggil) pada startup aplikasi Web. Konten elemen elemen ini harus berupa bilangan bulat yang menunjukkan urutan di mana servlet harus dimuat. Jika nilainya bilangan bulat negatif, atau elemen tidak ada, wadah bebas memuat servlet kapan pun ia mau. Jika nilainya bilangan bulat positif atau 0, wadah harus memuat dan menginisialisasi servlet saat aplikasi dikerahkan. Wadah harus menjamin servlet yang ditandai dengan bilangan bulat lebih rendah dimuat sebelum servlet yang ditandai dengan bilangan bulat lebih tinggi. Kontainer dapat memilih urutan pemuatan servlets dengan nilai yang sama load-on-startup.

Anda mungkin ingin memeriksa tidak hanya JSR, tetapi juga dokumentasi untuk wadah web Anda. Mungkin ada perbedaan

Eddie
sumber
Cletus salah dalam jawabannya. Anda harus mempertimbangkan untuk mengedit posting.
Alboz
3
Apa yang terjadi ketika memuat saat startup tidak ditentukan?
Nirmal
1
@Nirmal Paragraf kedua menentukan bahwa jika elemen tidak ada, ia memiliki perilaku yang sama seperti jika negatif yaitu wadah bebas memuat servlet kapan pun ia mau.
Finnegan
129

Jawaban Singkat : nilai> = 0 berarti bahwa servlet dimuat ketika aplikasi web digunakan atau ketika server dimulai. nilai <0: servlet dimuat kapan pun wadah itu mau.

Jawaban panjang (dari spesifikasi):

Elemen load-on-startup menunjukkan bahwa servlet ini harus dimuat (instantiated dan init () dipanggil) pada startup aplikasi web. Isi opsional elemen ini harus berupa bilangan bulat yang menunjukkan urutan di mana servlet harus dimuat. Jika nilainya bilangan bulat negatif, atau elemen tidak ada, wadah bebas memuat servlet kapan pun ia mau. Jika nilainya adalah bilangan bulat 128 atau 0 positif, wadah harus memuat dan menginisialisasi servlet saat aplikasi dikerahkan. Wadah harus menjamin servlet yang ditandai dengan bilangan bulat lebih rendah dimuat sebelum servlet yang ditandai dengan bilangan bulat lebih tinggi. Kontainer dapat memilih urutan pemuatan servlets dengan nilai awal saat mulai yang sama.

Nishant
sumber
1
Dan itu sebabnya kami menandai 0 untuk inorder DispatcherServlet untuk memuatnya pertama kali ketika aplikasi dimulai ..
Lucky
11

Ini menunjukkan bahwa servlet tidak akan dimulai sampai permintaan mencoba mengaksesnya.

Jika load-on-startup lebih besar dari atau sama dengan nol maka ketika kontainer mulai itu akan memulai servlet itu dalam urutan naik dari beban pada nilai startup yang Anda letakkan di sana (yaitu 0, 1 lalu 2 lalu 5 lalu 10 dan seterusnya) .

cletus
sumber
7
Nol juga menyebabkan pemuatan. Hanya nilai negatif yang tidak dijamin: "[...] Jika nilainya adalah bilangan bulat positif atau 0, wadah harus memuat dan menginisialisasi servlet ketika aplikasi dikerahkan. [...]"
marabol
1
@cletus Saya pikir lebih baik memodifikasi lebih besar dari nol dengan lebih besar atau sama dengan nol , karena banyak pengguna membaca jawaban Anda seperti yang ditunjukkan per yang diterima. Terima kasih sebelumnya
Tarik
9

Siklus Hidup Servlet

Siklus hidup servlet dikendalikan oleh wadah di mana servlet telah dikerahkan. Ketika permintaan dipetakan ke servlet, wadah melakukan langkah-langkah berikut.

  1. Jika instance servlet tidak ada, wadah web:

    Sebuah. Memuat kelas servlet

    b. Menciptakan instance dari kelas servlet

    c. Menginisialisasi instance servlet dengan memanggil metode init (inisialisasi tercakup dalam Membuat dan Menginisialisasi Servlet )

  2. Kontainer memanggil metode layanan, mengirimkan objek permintaan dan respons. Metode layanan dibahas dalam Metode Layanan Penulisan .

Nilai 0 pada load-on-startupberarti bahwa titik 1 dieksekusi ketika permintaan datang ke servlet itu. Nilai-nilai lain berarti bahwa titik 1 dijalankan pada wadah startup.

sourcerebels
sumber
jawaban sempurna!
gaurav
1

Seperti yang dinyatakan pada jawaban lain dan artikel nol saat memulai ini dapat diterima dan jika tidak ada servlet lain ini akan diprioritaskan pada pemuatan dan pemuatan selama penyebaran. Penggunaan terbaik dari load-on statup adalah untuk memuat servlet yang membutuhkan waktu lebih lama untuk diinisialisasi dengan baik sebelum permintaan pertama datang seperti servlets yang menciptakan kumpulan koneksi atau membuat panggilan jaringan atau menahan sumber daya yang besar, ini secara signifikan akan mengurangi waktu respons untuk beberapa permintaan pertama.

Suresh Pradhan
sumber
1
  1. Jika nilainya sama untuk dua servlet daripada nilainya akan dimuat dalam urutan yang dinyatakan dalam file web.xml.
  2. jika 0 atau bilangan bulat negatif dari Servlet akan dimuat ketika Container merasa memuatnya.
  3. menjamin pemuatan, inisialisasi dan metode seruan ke init () servlet oleh wadah web.
  4. Jika tidak ada elemen untuk servlet apa pun selain yang akan dimuat ketika wadah web memutuskan untuk memuatnya.
Rohit
sumber
0

ya itu dapat memiliki nilai yang sama .... alasan untuk memberikan angka untuk memuat saat startup adalah untuk menentukan urutan server untuk memuat semua servlet. servlet dengan nilai 0 load-on-startup akan dimuat pertama dan servlet dengan nilai 1 akan dimuat setelah itu.

jika dua servlets akan memiliki nilai yang sama untuk load-on-startup daripada itu akan dimuat bagaimana mereka dinyatakan di web.xml dari atas ke bawah. servlet yang lebih dulu ada di web.xml akan dimuat lebih dulu dan yang lainnya akan dimuat setelah itu.

Bharat Patel
sumber
0

-> (Tidak adanya load-on-start-up) tag Pertama-tama ketika servlet digunakan di server, Ini adalah tanggung jawab server untuk membuat objek servlet. Misalnya: Misalkan Servlet digunakan di server, (Obyek Servlet tidak tersedia di server) klien mengirimkan permintaan ke servlet untuk pertama kalinya kemudian server membuat objek servlet dengan bantuan konstruktor default dan segera memanggil init (). Dari situ ketika klien mengirim permintaan, hanya metode layanan yang akan dieksekusi karena objek sudah tersedia

Jika load-on-start-up tag digunakan dalam deployment descriptor: Pada saat deployment sendiri server membuat objek servlet untuk servlets berdasarkan nilai positif yang disediakan di antara tag. Penciptaan objek untuk kelas servlet akan mengikuti dari 0-128 0 nomor servlet akan dibuat pertama dan diikuti oleh angka lainnya.

Jika kami memberikan nilai yang sama untuk dua servlet di web.xml maka pembuatan objek akan dilakukan berdasarkan posisi kelas di web.xml juga bervariasi dari server ke server.

Jika kami memberikan nilai negatif di antara beban saat tag pembuka, maka server tidak akan membuat objek servlet.

Skenario lain di mana server membuat objek untuk servlet.

Jika kami tidak menggunakan tag pembuka saat memulai di web.xml, maka proyek dikerahkan ketika klien mengirim permintaan untuk server pertama kali membuat objek dan server bertanggung jawab untuk memanggil metode siklus hidupnya. Kemudian jika .class telah dimodifikasi di server (tomcat). sekali lagi klien mengirim permintaan untuk servlet yang dimodifikasi tetapi dalam kasus objek kucing jantan tidak akan dibuat dan server menggunakan objek yang ada kecuali me-restart server terjadi. Tetapi dalam kelas web-logic kapan pun file .class dimodifikasi di server tanpa memulai ulang server jika menerima permintaan maka server memanggil metode penghancuran pada servlet yang ada dan membuat objek servlet baru dan memanggil init () untuk initilisasi-nya. .

anil paritala
sumber
-1

Jika nilainya <0, serlet akan dipakai saat permintaan datang, atau>> 0 kontainer akan dimuat dalam urutan peningkatan nilai. jika 2 atau lebih servlet memiliki nilai yang sama, maka urutan servlet dideklarasikan di web.xml.

Nalini
sumber
-2

Kontainer servlet memuat servlet saat startup atau ketika permintaan pertama dibuat. Pemuatan servlet tergantung pada atribut "load-on-startup" dalam file "web.xml". Jika atribut memiliki bilangan bulat positif (0 hingga 128) maka servlet di-load dengan memuat kontainer sebaliknya ia dimuat saat permintaan pertama datang untuk layanan.

Ketika servlet dimuat setelah mendapat permintaan maka disebut "Lazy loading".

Preetesh Kumar Chaudhary
sumber
-6

Ini sederhana seperti yang bahkan tidak Anda harapkan.

Jika nilai positif itu dimuat ketika wadah dimulai

Jika nilainya tidak positif dari servelet yang dimuat saat permintaan dibuat.

Pertanyaan Java
sumber