1. Ikhtisar Servlet
1. Teknologi Pengembangan Sumber Daya Web yang Dinamis Disediakan oleh Sun Company. Essensinya adalah applet Java sebelumnya, yang mengharuskan applet ini harus mengimplementasikan antarmuka servlet sehingga server dapat memanggilnya.
2. Dua langkah untuk mengembangkan servlet
*Eksperimen: Mulai cepat dari servlet
(1) Langkah 1: Tulis program Java untuk mengimplementasikan antarmuka servlet (di sini secara langsung mewarisi kelas implementasi default GenericServlet)
Paket cn.itheima; impor java.io.*; impor javax.servlet.*; kelas publik FirstServlet memperluas genericservlet {public void service (servletRequest req, servletResponse ress) () eveTesception (java.io.ioException {res.getoutsputStream ().(2) Selain meletakkan .Class yang dikompilasi dengan paket di bawah Web-INF/kelas, Anda juga harus mengkonfigurasi servlet pendaftaran web.xml dari aplikasi web.
<servlet> <servlet-name> firstservlet </servlet-name> <servlet-class> cn.itheima.firstservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> FirstServlet </servlet-name> <rerl-pattern>/firstservlet </url-pola> </servlet-name>
3. Kembangkan servlet dengan myeclipse
2. Deskripsi Detail Servlet
1. Siklus hidup: Ketika sesuatu dilahirkan dan mati, apa yang pasti akan dilakukan selama keberadaannya. Menyatukannya adalah siklus deklarasi benda itu.
2. Siklus Hidup Servlet: Secara umum, ketika servlet diakses untuk pertama kalinya, suatu objek dibuat dalam memori, dan metode init () dipanggil segera setelah pembuatan untuk diinisialisasi. Untuk setiap permintaan, metode Layanan (REQ, RESP) digunakan untuk memproses permintaan. Pada saat ini, informasi permintaan akan dienkapsulasi dengan objek permintaan, dan objek respons (awalnya kosong) mewakili pesan respons, yang diteruskan ke metode layanan untuk digunakan. Ketika metode layanan diproses, Server Return Server mengatur pesan respons untuk dikembalikan ke browser berdasarkan informasi dalam respons. Servlet tidak dihancurkan setelah respons selesai dan tetap dalam memori dan menunggu permintaan berikutnya. Sampai server ditutup atau aplikasi Web dihapus dari host virtual, objek servlet dihancurkan dan metode Destroy () dipanggil sebelum dihancurkan untuk melakukan sesuatu sesudahnya.
3. Struktur warisan antarmuka servlet
Antarmuka Servlet: Menentukan metode yang harus dimiliki oleh servlet, dan semua servlet harus mengimplementasikan antarmuka ini secara langsung atau tidak langsung.
|
| ---- GenericServlet: Implementasi default antarmuka servlet, servlet umum, ini adalah kelas abstrak, sebagian besar metode diimplementasikan secara default, hanya metode layanan yang merupakan metode abstrak yang perlu diimplementasikan oleh pewaris itu sendiri.
|
| ----- httpservlet: Servlet yang dioptimalkan untuk protokol http diwarisi dari kelas genericservlet, dan metode abstrak layanan diimplementasikan. Implementasi default menentukan metode permintaan permintaan, dan memanggil berbagai metode doxxx () sesuai dengan metode permintaan yang berbeda. Biasanya kita dapat secara langsung mewarisi httpservlet
4. Hal -hal yang perlu diperhatikan saat mendaftarkan servlet di web.xml
4.1 Daftarkan servlet menggunakan tag <servlet> <servlet-Mapping>
<servlet> <servlet-name> firstservlet </servlet-name> <servlet-class> cn.itheima.firstservlet </servlet-class>
Catatan: Yang Anda inginkan di sini adalah nama kelas penuh dari servlet, bukan jalur file yang berisi ekstensi .java atau .class
</servlet> <servlet-Mapping> <servlet-name> FirstServlet </servlet-name> <RURL-PATERS>/FirstServlet </RURL-PATERS> </Servlet-Mapping>
4.2 Satu <servlet> dapat sesuai dengan beberapa <servlet-Mapping>
4.3 Anda dapat menggunakan karakter *kecocokan untuk mengonfigurasi <serlvet-Mapping>, tetapi hati-hati bahwa itu harus menjadi jalur yang dimulai dengan *.do atau / yang berakhir dengan / *.
~ Karena pengenalan karakter kecocokan, ada kemungkinan bahwa jalur virtual akan sesuai dengan beberapa maps servlet. Pada saat ini, mana yang paling mirip dengan yang dicari servlet, dan level *.do adalah yang terendah.
4.4 Anda dapat mengonfigurasi sub-label <Load-on-startup> untuk <servlet>, menentukan bahwa servlet dimuat dengan startup server, dan nilai yang dikonfigurasi menentukan urutan startup
Servlet> <servlet-name> Invoker </servlet-name> <servlet-class> org.apache.catalina.servlets.invokerserver </servlet-class> <load-on-startup> 2 </load-on-startup> </servlet>
4.5 Default Servlet: Jika jalur akses eksternal dari servlet diatur ke /, servlet adalah servlet default, dan servlet lainnya tidak memproses permintaan.
~ Servlet default dikonfigurasi dalam conf/web.xml, dan akses ke sumber daya statis dan output dari halaman kesalahan ditangani oleh servlet default ini. Jika kita menulis servlet default sendiri untuk menimpa servlet default di Web.xml ayah, itu akan menyebabkan sumber daya web statis tidak dapat diakses. Oleh karena itu, konfigurasi tidak disarankan.
4.6 Masalah Keselamatan Thread dari Servlet
4.6.1 Karena biasanya, servlet hanya memiliki satu contoh dalam memori untuk memproses permintaan, ketika beberapa permintaan dikirim, banyak utas akan mengoperasikan objek Servlet, yang dapat menyebabkan masalah keamanan utas.
(1) Mungkin ada masalah keamanan utas dengan variabel anggota servlvet
*Eksperimen: Tentukan variabel anggota inti = 0; Lakukan operasi i ++ dalam metode doxxx () dan output I nilai ke klien. Pada saat ini, masalah keamanan utas mungkin disebabkan karena keterlambatan.
(2) Saat Servet mengoperasikan file sumber daya, beberapa utas mengoperasikan file yang sama dan menyebabkan masalah keamanan utas
*Eksperimen: Permintaan dilengkapi dengan parameter, Servlet menulis parameter permintaan ke file, kemudian membaca file, dan mencetak nilai baca ke klien. Mungkin ada masalah keamanan utas
4.6.2 Solusi
(1) Gunakan blok kode sinkron untuk menyelesaikan masalah. Kerugiannya adalah bahwa blok kode sinkron hanya dapat memproses satu permintaan pada saat yang sama, yang sangat tidak efisien, sehingga blok kode sinkron hanya perlu berisi kode inti yang menyebabkan masalah keamanan utas.
(2) Menerapkan antarmuka singlethreadmodel untuk servlet ini. Ini adalah antarmuka tag. Servlet yang ditandai akan menyimpan kumpulan servlet dalam memori. Jika utas datang dan tidak ada pemrosesan objek servlet di kumpulan, yang baru akan dibuat. Jika ada servlet gratis di kolam renang, gunakan secara langsung. Ini tidak benar -benar menyelesaikan masalah keamanan utas. Antarmuka ini telah ditinggalkan.
(3) Kedua solusi tidak sempurna, jadi cobalah untuk tidak muncul variabel anggota di servlet.
3. ServletConfig
1. Objek yang mewakili konfigurasi servlets, yang dapat dikonfigurasi di <servlet> di web.xml
<servlet> <servlet-name> demo5servlet </servlet-name> <servlet-class> cn.itheima.demo5servlet </servlet-class> <Ilin-param> <param-name> </param-name> <param-value> value1 </param-Value> </init-param>
Kemudian gunakan this.getServletConfig () di servlet untuk mendapatkan objek servletconfig. Objek ini menyediakan metode getInitparameter () dan getInitparameternames (), yang dapat melintasi item konfigurasi dalam konfigurasi.
Jika Anda tidak ingin menulis konten mati di servlet, Anda dapat mengonfigurasinya di sini.
4. ServletContext
1. Objek yang mewakili aplikasi web saat ini.
2. Digunakan sebagai objek domain, transfer data antara servlet yang berbeda, dan ruang lingkupnya adalah seluruh aplikasi web.
LifeCycle: Buat objek ServletContext yang mewakili seluruh aplikasi web saat aplikasi web dimuat ke dalam wadah. Saat server ditutup atau aplikasi web dihapus dari wadah, objek ServletContext dihancurkan.
~ Domain: Domain dipahami sebagai kotak, di mana data dapat ditempatkan. Karena domain disebut domain, ia memiliki jangkauan yang terlihat. Data dalam domain ini dapat dioperasikan dalam rentang ini. Objek seperti itu disebut objek domain.
3. Di Web.xml, Anda dapat mengonfigurasi parameter inisialisasi seluruh aplikasi web dan menggunakan ServletContext untuk mendapatkan
<Context-param> <Param-name> Param1 </param-name> <param-value> pvalue1 </param-value> </context-param> this.getServletContext (). getInitparameter ("param1") this.getServletContext (). getInitparameter ()4. Meneruskan antara servlet yang berbeda
this.getSerVletContext (). getRequestDispatcher ("/servlet/demo10Servlet"). Forward (Request, Response);Setelah metode eksekusi selesai, layanan akan kembali ke server, dan server akan menghubungi target servlet, di mana permintaan akan diciptakan kembali dan data dari permintaan sebelumnya akan disalin ke dalamnya.
5. Baca file sumber daya
5.1 Karena jalur relatif adalah direktori yang dimulai oleh mesin virtual Java secara default, kami akan langsung menulis jalur relatif relatif terhadap direktori Tomcat/bin, jadi kami tidak bisa mendapatkan sumber daya. Jika ditulis sebagai jalur absolut, jalur absolut salah ketika proyek diterbitkan ke lingkungan lain.
5.2 Untuk menyelesaikan masalah ini, ServletContext menyediakan this.getServletContext (). GetRealPath ("/1.properties"), yang memberikan jalur virtual ke sumber daya dan akan mengembalikan jalur nyata sumber daya di lingkungan saat ini. this.getServletContext (). getResourceAsstream ("/1.properties"), yang mengembalikan jalur virtual sumber daya ke aliran jalur sumber daya yang sebenarnya.
5.3 Saat mendapatkan file sumber daya di bawah non-servlet, tidak ada objek ServletContext yang digunakan, dan hanya loader kelas yang dapat digunakan saat ini.
ClassLoader.GetResourCeAsStream ("../../ 1.Properties"), metode ini menggunakan loader kelas untuk memuat sumber daya langsung ke dalam memori, yang memiliki masalah dengan penundaan pembaruan, dan jika file terlalu besar, itu memakan terlalu banyak memori.
classloader.getResource ("../ 1.Properties"). getPath () secara langsung mengembalikan jalur sumber daya yang sebenarnya, tanpa masalah penundaan pembaruan.
Meringkaskan
Di atas adalah semua konten dari artikel ini tentang membahas secara singkat landasan teknis pengembangan servlet, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke situs ini:
Analisis Dasar Teknologi Sesi Servlet
Selain topik terkait lainnya di situs web ini, jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!