1. Mari kita mulai dengan wadah servlet: wadah servlet yang paling akrab dengan semua orang adalah Tomcat. Bagaimana container servlet mengelola servlet?
Mari kita lihat model wadah Tomcat terlebih dahulu:
Dari gambar di atas, kita dapat melihat bahwa wadah Tomcat dibagi menjadi empat level. Wadah yang benar -benar mengelola servlet adalah kontainer konteks, dan konteks sesuai dengan proyek web
Di tingkat wadah Tomcat, kontainer konteks adalah wadah yang secara langsung mengelola pembungkus kelas pembungkus (StandardWrapper) dari servlet dalam wadah, jadi bagaimana wadah konteks berjalan akan secara langsung mempengaruhi cara kerja servlet.
Di sini saya akan menjelaskan kelas pembungkus Servlet: StandardWrapper. Ada pertanyaan di sini, mengapa servlet harus dibungkus menjadi StandardWrapper alih -alih menjadi objek servlet secara langsung. Karena StandardWrapper adalah bagian dari wadah Tomcat, ia memiliki karakteristik wadah, dan Servlet adalah standar pengembangan web yang independen dan tidak boleh ditambah dengan kuat dalam Tomcat.
Kecuali untuk membungkus servlet menjadi StandardWrapper dan menambahkannya ke konteks sebagai subcontainer, semua properti web.xml lainnya diuraikan ke dalam konteks, sehingga kontainer konteks adalah wadah servlet yang benar -benar menjalankan servlet. Aplikasi web sesuai dengan wadah konteks. Properti konfigurasi wadah ditentukan oleh web.xml aplikasi, sehingga kami dapat memahami peran apa yang dimainkan Web.xml.
2. Berikut ini secara singkat menjelaskan proyek kerja Servlet:
Ketika server web berinteraksi dengan klien, proses kerja servlet adalah:
1. Buat permintaan ke server web di klien
2. Server web mengirimkannya ke servlet setelah menerima permintaan
3. Wadah Servlet menghasilkan objek instan untuk ini dan memanggil metode yang sesuai dalam API Servlet untuk memproses permintaan HTTP klien, dan kemudian mengembalikan hasil respons yang diproses ke server web.
4. Server web mengirimkan struktur respons yang diterima dari objek instance Servlet kembali ke klien.
3. Siklus Hidup Servlet:
Seperti yang ditunjukkan pada gambar di atas, siklus hidup servlet dapat dibagi menjadi empat tahap, yaitu kelas pemuatan dan tahap penciptaan, tahap inisialisasi, tahap layanan dan tahap penghancuran contoh. Berikut ini adalah deskripsi terperinci dari tugas pemrograman dan tindakan pencegahan untuk setiap tahap.
1. Buat instance servlet:
Secara default, instance Servlet dibuat ketika permintaan pertama tiba dan digunakan kembali nanti. Jika beberapa servlet memerlukan operasi kompleks yang perlu diselesaikan saat memuat inisialisasi, seperti membuka file, menginisialisasi koneksi jaringan, dll., Anda dapat memberi tahu server untuk membuat instance servlet saat memulai. Konfigurasi spesifiknya adalah sebagai berikut:
<servlet> <servlet-name> Timeservlet </servlet-name> <servlet-class> com.allanlxf.servlet.basic.timeservlet </servlet-class> <load-on-startup> 1 </load-on-startup> </servlet>
Buat struktur kelas yang relevan dari objek servlet:
2. Inisialisasi
Setelah instance servlet dibuat, server web akan secara otomatis memanggil metode init (servletconfig config) untuk menginisialisasi servlet. Konfigurasi parameter metode berisi informasi konfigurasi dari servlet, seperti parameter inisialisasi, yang dibuat oleh server.
I. Bagaimana cara mengkonfigurasi parameter inisialisasi Servlet?
Dalam tag definisi servlet di web.xml, misalnya:
<servlet> <servlet-name> Timeservlet </servlet-name> <servlet-class> com.allanlxf.servlet.basic.timeservlet </servlet-class> <in-param> <par am-name> pengguna </param-name> <param-value> nama pengguna </param-value> </init-param> <Ilin-param> <param-name> blog </param-name> <param-value> http: //. . . </param-value> </it-param> </servlet>
Dua Parameter Inisialisasi Pengguna dan Blog dikonfigurasi dengan nilai nama pengguna dan http: //. . . , dengan cara ini, untuk memodifikasi nama pengguna dan alamat blog di masa mendatang, Anda tidak perlu memodifikasi kode servlet, cukup ubah file konfigurasi.
Ii. Bagaimana cara membaca parameter inisialisasi servlet?
ServletConfig mendefinisikan metode berikut untuk membaca informasi parameter inisialisasi:
String publik getInitparameter (nama string)
Parameter: Nama parameter inisialisasi.
Pengembalian: Nilai parameter inisialisasi, jika tidak dikonfigurasi, mengembalikan nol.
Jumlah waktu eksekusi iii.init (servletconfig) metode
Metode ini dieksekusi sekali selama siklus hidup servlet.
IV.Init (servletconfig) Metode dan utas
Metode ini dijalankan dalam satu lingkungan berulir, sehingga pengembang tidak perlu mempertimbangkan masalah keselamatan utas.
V.Init (servletconfig) Metode dan pengecualian
Selama eksekusi, metode ini dapat melempar ServletException untuk memberi tahu server web bahwa instance Servlet telah gagal diinisialisasi. Setelah ServletException dilemparkan, server web tidak akan menyerahkan permintaan klien ke instance Servlet untuk diproses, tetapi akan melaporkan informasi pengecualian kegagalan inisialisasi kepada klien, yang akan dihancurkan dari memori. Jika permintaan baru dibuat, server web akan membuat instance servlet baru dan melakukan operasi inisialisasi dari instance baru.
3. Layanan
Setelah instance Servlet berhasil dibuat dan diinisialisasi, instance Servlet dapat digunakan oleh server untuk melayani permintaan klien dan menghasilkan respons. Selama tahap layanan, server web akan menghubungi layanan (permintaan servletRequest, respons respon respon) dari instance. Objek permintaan dan objek respons dibuat oleh server dan diteruskan ke instance Servlet. Objek permintaan merangkum informasi yang dikirim oleh klien ke server, dan objek respons merangkum informasi yang dikirim oleh server ke klien.
I. Tanggung Jawab Metode Layanan ()
Metode layanan () adalah metode inti dari servlet. Logika bisnis klien harus dieksekusi dalam metode ini. Proses pengembangan metode layanan khas adalah:
Analisis Permintaan Klien-> Jalankan Logika Bisnis-> Halaman Respons Output ke Klien
Ii.service () Metode dan utas
Untuk meningkatkan efisiensi, spesifikasi Servlet mensyaratkan bahwa instance servlet harus dapat melayani beberapa permintaan klien secara bersamaan. Artinya, metode service () berjalan di lingkungan multi-threaded, dan pengembang servlet harus memastikan keamanan utas dari metode tersebut.
III.Service () Metode dan pengecualian
Metode layanan () dapat melempar servletException dan IOException selama eksekusi. Di antara mereka, ServletException dapat dilemparkan selama proses pemrosesan permintaan klien, seperti sumber daya yang diminta tidak tersedia, database tidak tersedia, dll. Setelah pengecualian dilemparkan, wadah harus mendaur ulang objek permintaan dan melaporkan informasi pengecualian klien. IOException menunjukkan kesalahan input dan output. Programmer tidak harus peduli dengan pengecualian dan melaporkannya langsung ke klien oleh wadah.
Pencegahan Pemrograman:
1) Ketika utas utas server mengeksekusi metode init () dari instance servlet, semua utas utas layanan klien tidak dapat menjalankan metode layanan () dari instance, dan tidak ada utas yang dapat mengeksekusi metode Destroy () dari instance. Oleh karena itu, metode init () dari servlet berfungsi dalam satu lingkungan utas, dan pengembang tidak harus mempertimbangkan masalah keselamatan utas apa pun.
2) Ketika server menerima beberapa permintaan dari klien, server akan menjalankan metode layanan () dari instance servlet dalam utas layanan klien yang terpisah untuk melayani setiap klien. Pada saat ini, beberapa utas akan menjalankan metode layanan () dari instance servlet yang sama pada saat yang sama, sehingga masalah keselamatan utas harus dipertimbangkan.
3) Harap dicatat bahwa meskipun metode service () berjalan di lingkungan multi-threaded, tidak perlu menyinkronkan metode ini. Sebaliknya, itu tergantung pada jenis sumber daya yang diakses dengan metode ini selama eksekusi dan bagaimana mengakses sumber daya. Analisisnya adalah sebagai berikut:
Saya. Jika metode layanan () tidak mengakses variabel anggota servlet atau sumber daya global seperti variabel statis, file, koneksi basis data, dll., Ini hanya menggunakan sumber daya utas saat ini, seperti variabel sementara, permintaan dan objek respons yang tidak menunjukkan sumber daya global. Metode ini sendiri aman dan tidak memerlukan kontrol sinkronisasi.
ii. Jika metode layanan () mengakses variabel anggota servlet, tetapi operasi pada variabel adalah operasi hanya baca, metode itu sendiri aman-utas dan tidak memerlukan kontrol sinkronisasi apa pun.
aku aku aku. Jika metode layanan () mengakses variabel anggota servlet dan pengoperasian variabel dibaca dan ditulis, pernyataan kontrol sinkronisasi biasanya diperlukan.
iv. Jika metode layanan () mengakses variabel statis global, jika mungkin ada utas lain dalam sistem yang mengakses variabel statis pada saat yang sama, jika ada operasi baca dan tulis, pernyataan kontrol sinkronisasi biasanya diperlukan.
v. Jika metode layanan () mengakses sumber daya global, seperti file, koneksi database, dll., Biasanya perlu untuk menambahkan pernyataan kontrol sinkronisasi.
4. Penghancuran
Ketika server web berpikir bahwa instance servlet tidak diperlukan, seperti aplikasi ulang aplikasi, atau shutdown server, dan servlet belum diakses untuk waktu yang lama. Server dapat menghancurkan (juga disebut menghapus instalisasi) contoh dari memori. Server Web harus memastikan bahwa metode Destroy () dari instance Servlet dipanggil sebelum menghapus instalan instance Servlet, untuk mendaur ulang sumber daya yang diminta oleh Servlet atau melakukan pemrosesan penting lainnya.
Server Web harus memastikan bahwa sebelum memanggil metode Destroy (), semua utas yang berjalan dalam metode layanan () dari instance keluar atau menunggu utas ini untuk jangka waktu tertentu. Setelah metode Destroy () telah dieksekusi, server web akan menolak semua permintaan baru untuk instance Servlet. Metode Destroy () keluar dan instance servlet dapat dikumpulkan.
4. Diagram alur servlet parsing klien permintaan http:
1. Klien Web mengeluarkan permintaan HTTP ke wadah Servlet;
2. Kontainer Servlet Parses Permintaan HTTP Web.
3. Wadah Servlet membuat objek HTTPREQUEST, merangkum informasi permintaan HTTP dalam objek ini;
4. Wadah Servlet membuat objek HTTPRESPONSE;
5. Container Servlet (jika servlet yang diakses tidak dibuat pada startup server, pertama -tama buat instance servlet dan hubungi metode init () untuk menginisialisasi objek) panggil metode layanan () dari httpservlet, dan lulus parameter objek httprequest dan httpresponse sebagai metode layanan ke objek httpservet;
6. HTTPServlet memanggil metode yang relevan dari HTTPREQUEST untuk mendapatkan informasi permintaan HTTP;
7. Httpservlet memanggil metode httpresponse yang relevan untuk menghasilkan data respons;
8. Wadah Servlet melewati hasil respons httpservlet ke klien web.
Artikel di atas didasarkan pada prinsip eksekusi Servlet dan siklus hidup (analisis komprehensif) adalah semua konten yang saya bagikan dengan Anda. Saya harap ini dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.