Memahami Daur Hidup Servlet
Sebelumnya kita telah belajar membuat servlet pertama. Seperti biasa, untuk memahami dengan benar servlet, maka kita perlu memahami sedikit banyak tentang daur hidup servlet, dan method – method yang dipanggil kala sebuah servlet dibentuk hingga kemudian dihancurkan,
Ketika servlet pertama kali dibuat, method init
akan dipanggil, sehingga init
method dimana kita bisa meletakan kode setup pertama kali. Kemudian, setiap request yang berasal dari client akan menghasilkan sebuah thread yang memanggil method service
dari instance yang sebelumnya dibuat. Banyak request yang terjadi secara paralel akan menghasilkan banyak thread juga yang memanggil service secara simultan. Meskipun servlet bisa diimplement sebuah interface khusus (SingleThreadModel
) yang menetapkan bahwa hanya satu thread yang diijinkan berjalan dalam satu waktu.
Method service
kemudian memanggil doGet
, doPost
atau method doXXX
yang lain bergantung pada jenis request HTTP yang diterima. Setelah selesei, server memutuskan untuk menghancurkan servlet yang sudah tak terpakai, saat itulah method destroy
dipanggil.
- Method init
Method init dipanggil ketika servlet pertama kali dipanggil. Hal ini terjadi hanya sekali, dan tidak akan dipanggil lagi, untuk setiap request user. Method ini digunakan untuk inisialisasi user pertama kali, kurang lebih sama dengan method init pada java Applet. Servlet secara normal akan diciptakan ketika user pertama kali meminta URL yang terkait dengan servlet, tapi kita harus menspesifikasikan servlet yang akan dimuat ketika server pertama kali dijalankan.
Template dari method init
terlihat seperti berikut
public void init() throws ServletException { // Initialization code... }
Apa fungsi method init? Ya, salah satunya, yang paling umum adalah membaca parameter inisialisasi dari spesifikasi server. Misalnya, servlet mungkin memerlukan informasi tentang pengaturan database, password file, parameter unjuk kerja dari server tertentu, mencacah file atau serialized cookie data dari request sebelumnya. Namun untuk dapat membaca parameter inisialisasi, maka kita pertama kali harus mendapatkan object ServletConfig
dengan getServletConfig
, baru kemudian memanggil getInitParameter
, sperti contoh berikut
public void init() throws ServletException { ServletConfig config = getServletConfig(); String param1 = config.getInitParameter("parameter1"); }
Yang perlu dicatat, dua hal dari program tersebut adalah.
Pertama method init menggunakan getServletConfig
untuk mendapatkan referensi pada Object ServletConfig
.
Kedua, ServletConfig
memiliki sebuah method getInitParamter
yang dapat digunakan untuk melihat parameter inisialisasi yang terkait dengan servlet. Hal ini analogi dengan method getParameter
yang digunakan pada method init
dari java applet.
- Web.xml
Oke, sekarag kita bisa membaca parameter inisialisasi dengan memanggil method getInitParameter
dari ServletConfig
. Lalu bagaimana caranya kita bisa mengeset nilai-nya? Nah, untuk mengeset nilai inisialisasi, dapat dilakukan di file web.xml yang disebut dengan deployment descriptor. File ini berada pada direktori WEB-INF dari aplikasi web yang digunakan dan ia mengendalikan banyak akspek dari perilaku Servlet dan JSP.
Penggunaan selengkapnya web.xml akan dibahas di sesi lain tulisan saya (Semoga jika ada waktu ). Namun intinya, web.xml berisi sebuah header XML, deklarasi DOCTYPE, dan sebuah elemen web-app. Untuk tujuan parameter inisialisasi, elemen web app harus berisi elemen servlet dengan tiga sub elemen yaitu
servlet-name
,servlet-class
-
init-param
.
Elemen servlet-name
diisi dengan nama yang kita inginkan untuk digunakan mengakses servlet. Sedangkan element servlet-class
merupakan alamat kelas servlet. Dan init-param
berisi nama dan nilai dari parameter inisialisasi.
Berikut contoh program sederhana yang mengilustrasikan penggunaan web.xml, anda bisa menggunakannya dengan menyalin program dibawah ini dan merunningnya di alamat http://[alamat-host]/[app-name]/index.html
package net.ruangtedy.java; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class MyServlet extends HttpServlet { public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); PrintWriter out = res.getWriter(); out.println("Init Parameters:"); Enumeration e = getInitParameterNames(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); out.println(name + ": " + getInitParameter(name)); } } }