Membuat Java Servlet Oleh: Galih Satriaji (http://blog.galihsatria.com) Dalam sesi tutorial kali ini, kita akan membuat servlet sederhana dalam langkah demi langkah dengan tujuan memahami bagaimana gaya Java menangani sebuah mekanisme website (request dan response) dalam mekanisme protokol HTTP. Untuk itu, ada pre-requisites yang harus kita penuhi agar dapat mengikuti tutorial ini, yaitu: -
Mengerti konsep object oriented Java Minimal pernah membuat program Java :D Mengerti bagaimana mekanisme request dan response dalam protokol HTTP.
Java Servlet, Apakah Itu? Java adalah bahasa pemrograman yang benar-benar berorientasi objek. Java menanangani sebuah permasalahan dengan class-class dan method-method. Bahkan untuk menangani HTTP, Java juga menggunakan class yang dinamakan Servlet. Sebuah class yang bisa menangani request HTTP harus merupakan subclass dari objek HTTPServlet dan mengimplementasikan method abstract-nya untuk menangani request. Method doGet adalah method yang menangani request HTTP GET dan method doPost adalah method yang menangani request HTTP POST.
WEB.XML Lalu bagaimana sebuah class Servlet bisa melayani request yang dibentuk dari sebuah URL (Uniform Resource Locator)? Misalnya, saya ingin class GreetingServlet akan melayani request dari URL http://localhost/servlet/greetings. Mari saya perkenalkan kepada salah satu elemen yang paling berperan dalam aplikasi web berbasis Java: file web.xml. Aplikasi web berbasis Java baik yang paling sederhana hingga yang menggunakan bertumpuk-tumpuk framework akan selalu berawal dari file web.xml. File ini adalah file konfigurasi yang mengatur seluruh sistem web. File ini bertipe XML dan selalu terletak dalam directory WEB-INF pada aplikasi web. Anda ingin memasang sebuah framework yang rumit? Anda akan selalu berawal dari web.xml, karena sebenarnya framework-framework tersebut tersusun dari class-class juga. Apa hubungan class servlet, web.xml, dan URL? Perhatikan dengan baik, titik ini adalah wajib Anda kuasai jika ingin menguasai web berbasis Java. Konfigurasi pada Web.xml akan mendefinisikan sebuah servlet akan melayani sebuah URL dalam URL-Mapping. Pemetaan URL ke dalam servlet inilah yang akan membuat sebuah servlet bisa menerima request dan menjawabnya. Sehingga, komponen utama dalam aplikasi servlet adalah sebagai berikut: 1. Class yang merupakan subclass HTTPServlet. 2. File web.xml yang berisi konfigurasi aplikasi. 3. Mapping antara URL dan Servlet. URL mana yang akan dilayani Servlet mana dalam URLMapping.
Praktik! Oke, saya kira, saya akan lebih mudah menjelaskan jika kita langsung praktik saja. Agar mudah, siapkan dulu peralatan dan software-software berikut ini: 1. Java SDK versi 5 ke atas. Saya tidak akan pakai versi 1.4.2 lagi karena sudah terlalu Jadul, heheh :P 2. IDE: Eclipse SDK Java EE versi Europa 3.3. Anda bisa saja memakai IDE yang lain, tetapi di tutorial ini, saya akan memakai Eclipse Java EE versi Europa 3.3. Anda dapat mendownloadnya di URL: http://www.eclipse.org 3. Servlet Container: Apache Tomcat versi 5.5 ke atas. Sebuah aplikasi web selalu memerlukan webserver bukan? Webserver yang dapat menerjemahkan Servlet dinamakan Servlet Container dan kita akan menggunakan salah satu Servlet Container yang paling populer: Apache Tomcat. Anda dapat mendownload-nya di URL: http://tomcat.apache.org Apa yang akan kita buat? Agar tidak melulu aplikasi Hello World, kita akan membuat sebuah aplikasi sesederhana Hello World, yaitu Greetings. Kita akan meminta pengunjung memasukkan nama, dan ketika ia menekan tombol, servlet akan menyapa dengan memanggil namanya. Simpel. Langkah pertama, install dua software yang kita butuhkan di atas, yaitu Eclipse SDK dan Tomcat. Eclipse cukup dibongkar dari file terkompresinya (ZIP atau TAR.GZ) sedangkan melakukan instalasi Tomcat juga tak lebih sulit daripada menekan tombol next hingga finish. Jadi, saya asumsikan Anda telah berhasil melakukan instalasi Eclipse dan Tomcat. Saya asumsikan, Tomcat telah berjalan dan akan mendengarkan request di port 8080 (port default Tomcat). Saya asumsikan lagi, directory instalasi Tomcat juga default, yaitu di C:\Program Files\Apache Software Foundation\Tomcat x.x dimana x.x adalah versi dari Tomcat anda. Jalankan Eclipse. Tampilan Eclipse saya seperti ini:
Saya telah memiliki beberapa project web sehingga tampilan Eclipse saya sudah sedemikian sibuk.
Buat project baru. Tekan File | New | Other… atau klik kanan pada tab Project Explorer (sebelah kiri) | New | Other…
Kemudian akan tampil dialog sbb:
Cari tree berjudul Web dan pilih Dynamic Web Project. Anda tidak akan menemukan pilihan ini jika versi Eclipse-nya bukan Java EE atau Eclipse dijalankan memakai JRE versi 1.4 ke bawah. Kalau sudah ketemu tekan Next.
Pada Project name, beri nama untuk project baru kita, misalnya bernama servlet. Untuk Project contents, biarkan default maka Eclipse akan menyimpan pada workspace default yang selalu ia minta ketika Eclipse mulai dijalankan. Untuk Target runtime, kita diminta menyebutkan platform container yang akan digunakan dalam project ini. Untuk project web pertama, combo box tersebut akan kosong sehingga kita harus membuat Target Runtime baru dengan menekan tombol New.
Membuat Target Runtime Setelah Anda menekan tombol New, Wizard pembuatan project baru akan ditumpuki Wizard pembuatan Target Runtime seperti screenshot di bawah ini:
Eclipse Europa mendukung beberapa runtime untuk server-server: Apache Tomcat, IBM Websphere, JBoss, Object Web, dan Oracle OAS serta Oracle OC4J. Karena saya memakai Tomcat versi 6, maka saya memilik tree Apache dan memilih Apache Tomcat v6.0. Sesuaikan versi Runtime ini dengan lingkungan Anda. Tekan Next untuk melanjutkan.
Pada dialog ini, pertama kali Anda tekan Browse dan menunjukkan tempat instalasi Tomcat. Secara otomatis, textfield Name akan terisi jika directory yang Anda masukkan dianggap valid oleh Eclipse. Setelah itu, tekan Finish. Biarkan entri JRE tetap default (Workbench default JRE). Begitu Anda tekan Finish, Anda akan kembali pada Wizard pembuatan project baru dengan Target runtime telah terisi
dengan Tomcat. Biarkan default untuk entri Configuration (Default Configuration for Apache Tomcat vx.x), dan tekan Next.
Project Facets, adalah konfigurasi yang diperlukan Eclipse untuk menyesuakan diri dengan aplikasi yang akan Anda buat. Nanti Eclipse akan mengeluarkan pesan-pesan error dan peringatan berdasarkan Facets ini. Dua opsi tercentang secara default. Dynamic Web Module adalah versi spesifikasi Servlet yang akan Anda gunakan. Untuk alasan pribadi saja, saya masih suka menggunakan versi 2.4 daripada 2.5. Kemudian untuk Java, saya masih suka menggunakan Java versi 5.
Context Root adalah directory puncak untuk aplikasi web Anda yang akan muncul pada URL. Dengan melihat konfigurasi yang telah kita lakukan, screenshot di atas akan memiliki URL http://localhost:8080/servlet. Di sini, servlet, nama project kita, sebagai context root. Content Directory adalah tempat kita menaruh file-file web seperti HTML, XML, CSS Styles, Javascript, images, dan resource-resource yang akan kita butuhkan. Tentu saja, di sini akan bercokol elemen paling penting
dalam aplikasi web berbasis java: web.xml yang ada pada directory WEB-INF. Java Source directory adalah tempat source Java disimpan. Biarkan default, dan tekan Finish. Tunggu sebentar, Eclipse akan menyiapkan project baru untuk Anda.
Inilah struktur directory aplikasi web yang telah dibuatkan oleh Eclipse. Dari awal hingga akhir nanti, kita akan dimanjakan oleh Eclipse Java EE. Lihat, semua struktur directory mulai penempatan source code, library, hingga web.xml telah dibuatkan sehingga kita tinggal menambahkan dan meneruskan saja. Percayalah, hingga nanti saat pasca produksi dan deployment seperti pembuatan file WAR (Web Archive), kita akan sangat dimanja oleh Eclipse Europa ini.
Form Sekarang kita akan membuat form yang akan meminta pengunjung memasukkan namanya. Ketika pengunjung menekan tombol submit, data akan dikirim melalui request HTTP POST dan dikirim balik ke servlet yang sama. Bedanya, pengunjung yang datang awal akan melakukan request HTTP GET, dan ketika mengirim data dengan request HTTP POST. Mari kita mulai. Sekarang kita buat class Java yang merupakan subclass HttpServlet agar ia bisa melayani request HTTP. Kembali ke IDE Eclipse, pada project explorer, klik kanan project servlet | New | Servlet… Anda akan disuguhi dialog pembuatan servlet baru. Pada isian Java Package, isi dengan nama package – misalnya, saya menamai dengan galih.tutorial.servlet. Kemudian, pada Class name, isi dengan nama class, misalnya AskNameServlet.
Tekan tombol Next. Dialog berikutnya adalah servlet mapping. Saya tadi telah menguraikan bahwa agar sebuah servlet bisa melayani request HTTP, maka harus ada pemetaan antara servlet dan URL. Sebuah URL akan dilayani oleh suatu servlet ditentukan pada servlet mapping ini. Kita coba biarkan dulu default seperti yang telah diisi oleh dialog tersebut. Tentu saja Anda harus bereksperimen dengan mengubah-ubah isian yang ada di situ, utamanya pada URL Mappings dengan tombol Add, Edit, dan Remove yang ada di situ.
Tekan Next. Dialog berikutnya adalah detail dari servlet yang akan kita buat. Biarkan default, lalu tekan Finish.
Kita akan segera dibuatkan oleh Eclipse class tersebut. Perhatikan bahwa servlet tersebut memiliki tiga elemen penting: 1. Merupakan subclass dari javax.servlet.http.HttpServlet dan mengimplementasi interface javax.servlet.Servlet. 2. Memiliki method doGet. Method ini akan dijalankan ketika servlet menerima request HTTP GET. 3. Memiliki method doPost. Method ini akan dijalankan ketika servlet menerima request HTTP POST. Lalu kita tadi telah melewati dialog yang meminta memasukkan URL Mappings (yang pada kali ini kita biarkan default). Pada proses itu, Eclipse melakukan penambahan pada web.xml secara otomatis mengenai URL Mappings dan detail servlet ini. Jadi, setiap servlet yang kita buat harus didefinisikan di web.xml, sekaligus URL Mapping-nya. Mari kita buka web.xml. Di sana sudah ada entri baru yang berbunyi: <servlet> <description>
AskNameServlet <servlet-name>AskNameServlet <servlet-class> galih.tutorial.servlet.AskNameServlet <servlet-mapping> <servlet-name>AskNameServlet
/AskNameServlet
Jadi, jika kita menghubungi alamat via web dengan URL http://localhost:8080/servlet/AskNameServlet, maka servlet yang dijalankan adalah AskNameServlet. Method doGet akan dijalankan. Wokeh, jadi kita sekarang sudah punya method doGet yang siap melakukan sesuatu. Apa yang akan kita lakukan di dalam method ini? Tentu saja menampilkan form yang meminta pengunjung memasukkan namanya agar bisa kita sapa. Outputnya dalam tag HTML. Bagaimana mekanismenya? Pertama-tama, harus kita ketahui dulu kalau request dan response pada servlet dianggap sebuah stream. Sama ketika kita melakukan operasi baca dan tulis file di Java, yaitu menggunakan FileInputStream untuk membaca dan FileOutputStream untuk menulis. Demikian juga di servlet, kita harus mendapatkan dulu output stream dari servlet agar bisa ditulisi. Mekanismenya seperti dibawah ini: // mendapatkan output stream PrintWriter out = response.getWriter();
Objek out kini bisa kita tulisi dengan HTML. // set output type dalam HTML response.setContentType("text/html"); // berikan htmlnya kepada user, ini html paling sederhana out.println(""); out.println(""); out.println("
Uji Coba Servlet"); out.println(""); out.println(""); out.println("
Silakan masukkan nama anda
"); out.println("
"); out.println(""); out.println("");
Saya memasukkan kode HTML yang sangat sederhana di sini. Hanya judul, dan input teks, serta satu tombol. Penting untuk diperhatikan di sini, saya memasukkan tag