Setelah berhasil dengan contoh sederhana JSP, sekarang kita
akan mulai untuk membahas secara praktis dan singkat tentang
Servlet. Untuk panduan lengkap, sebaiknya baca juga tutorial
di Website
Sun Microsystem.
Servlet
-
Struktur Kode dan Folder Untuk
Servlet
Pada dasarnya Servlet hanya merupakan satu klas Java
(kode java yang telah terkompilasi) biasa. Namun bila
dilihat lebih jauh, baik itu kode ataupun aturan
untuk dapat dijalankan sebagai servlet, terdapat
beberapa hal yang perlu dibedakan dengan Klas Java
biasa:
-
Klas yang dibentuk harus merupakan perluasan
("extends") dari klas Java
HttpServlet
-
Tersimpan dengan struktur folder tertentu, yaitu
adanya folder WEB-INF yang di dalamnya
berisi klas hasil kompilasi, library yang
dibutuhkan oleh klas dan file descriptor yang
dinamai dengan web.xml.Salah satunya
strukturnya ditunjukkan pada gambar di bawah:
Pada gambar tersebut, nama Proyeknya adalah
Jena. Sedangkan folder lain (src
dan war) merupakan folder pelengkap kalau
kita melakukan kompilasi dengan tools, misal
Apache Ant (Ant memerlukan descriptor tambahan
yang di dalamnya terdapat informasi nama folder
yang berisi source untuk dikompliasi dan folder
tujuan hasil kompilasi). Dari gambar struktur
tersebut, folder src berisi file-file kode
sumber Java yang akan dikompilasi (berekstensi
".JAVA"), dan folder war adalah untuk
menampung kompilasi sebelum servlet
di-deploy untuk dapat dijalankan oleh
Tomcat.
Untuk lebih singkatnya, marilah kita gunakan kode di
bawah ini sebagai dasar untuk menjelaskan beberapa
hal seputar servlet.
package first.myServlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
for(int i=0;i<10;i++)
{
out.println(i+"*2.5 = "+i*2.5+"<br/>");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
doGet(request,response);
}
}
Simpanlah file di atas dengan nama
HelloServlet.java. Perlu diperhatikan beberapa
hal:
-
Kode Servlet selalu mengimplementasikan minimal
salah satu dari dua metode doGet atau
doPost, dengan parameternya adalah bertipe
HttpServletRequest dan
HttpServletResponse. Ini berkaitan dengan
adanya metode request dari client yang bisa
berupa GET atau POST
-
Penamaan untuk aplikasi java tidaklah sebebas
pada pembrograman dengan bahasa lain. Nama file
harus sama dengan nama kelas utama yang
dideklarasikan dalam program. Pada contoh di
atas, nama kelasnya adalah HelloServlet
(lihat deklarasi public
class HelloServlet).
-
File di atas harus berada di dalam folder
first/myServlet. Hal ini karena adanya
deklarasi package first.myServlet
(baris pertama kode). Sebenarnya anda bisa saja
membuat suatu program Java tanpa menggunakan
"package" (baris pertama anda hapus) sehingga
tidak perlu memiliki struktur folder yang
kelihatannya memperumit masalah. Namun hal ini
kita perkenalkan dengan maksud bila suatu saat
anda membangun aplikasi yang terdiri atas
modul-modul atau lebih luasnya lagi bila modul
itu dikerjakan oleh suatu tim secara
"independen". Dengan pengenalan secara singkat
ini, kami harapkan anda memahami maksudnya.
Dengan mengikuti aturan struktur folder seperti
gambar sebelumnya, maka kita bisa membuat folder
practice (atau apaun namanya terserah pembuat
program dan berada di bawah webapps).
Strukturnya adalah sebagai berikut:
-
Kompilasi Kode menjadi
Klas
Setelah anda meletakkan pada folder yang sesuai, anda
bisa mengkompilasi untuk menjadikannya suatu file
klas Java dengan beberapa cara. Salah satu cara yang
mudah (cocok untuk klas yang tidak memerlukan banyak
library/API Java) adalah melalui command line
(tanpa tools tertentu). Cobalah ikuti langkah
berikut:
-
Masuklah ke folder yang sesuai, misal ke folder
myServlet. Dari folder ini, coba ketikkan
perintah pada prompt anda
javac HelloServlet.java
. Bila dari folder first, tentu saja
bentuknya menjadi
javac
myServlet/HelloServlet.java
-
Apakah yang anda temui? Suatu pesan kesalahan
kompilasi? Apakah pesannya di antaranya seperti
ini?:
Bila jawabannya "YA", itu adalah karena paket
yang anda perlukan (melalui perintah
import) tidak dikenali atau tidak
ditemukan. Dalam kasus ini, paket yang dibutuhkan
adalah paket yang memuat deklarasi untuk servlet
(javax.servlet.*). Biasanya secara standar
nama file yang memuat paket ini adalah
servlet-api.jar. Untuk itu, solusinya
adalah dengan melewatkan alamat paket/library
yang dibutuhkan (sering disebut sebagai
classpath) sebagai argumen kompilasi.
-
Cobalah ganti perintah di atas dengan:
javac -classpath c:\tmp\servlet-api.jar
HelloServlet.java
dimana paket servlet-api.jar berada pada
folder tmp. Silahkan sesuaikan dengan
letak paket pada komputer anda (periksa folder
lib yang ada pada folder instalasi
Tomcat).
-
Bila tak terlihat adanya pesan kesalahan lagi,
berarti anda telah berhasil membuat file klas
Java (binary) dan file dengan nama
HelloServlet.class akan anda temukan pada
lokasi yang sama.
-
Agar file ini bisa dieksekusi sebagai Servlet
melalui browser, maka file ini perlu berada di
bawah folder WEB-INF/classes. Lebih jauh,
agar berjalan semestinya, maka struktur folder
harus dipertahankan seperti paket yang
dideklarasikan di dalamnya, sehingga perlu pula
dibuat folder dengan struktur
WEB-INF/classes/first/myServlet
-
Pindahkan file HelloServlet.class ke dalam
folder tersebut. Cobalah dari browser apakah
konteks dengan alamat
http://localhost:8080/practice/HelloServlet
telah bisa memberikan hasil? Sepertinya belum
deh...Bahkan kalo anda lihat konteks
practice pun mungkin belum terdaftar dalam
Tomcat (coba periksa dengan Tomcat
Manager).Mengapa? Terus?
-
Hmmm..mungkin anda ingat bahwa untuk bisa
"menempelkan" kode Java servlet sehingga
accessible dari web server, Tomcat
memerlukan file descriptor dengan nama
web.xml yang berada di folder
WEB-INF.
Kalo begitu, cobalah buat file descriptor dengan
isi sebagai berikut:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>myFirstServlet</servlet-name>
<servlet-class>first.myServlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myFirstServlet</servlet-name>
<url-pattern>/horee</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
dan simpan dengan nama web.xml pada folder
WEB-INF.
-
Setelah file berada pada foder yang tepat,
cobalah jalankan Tomcat (atau restart Tomcat
kalau sudah dalam status Start). Periksa apakah
URL
http://localhost:8080/practice/HelloServlet
sekarang memberikan hasil? Masih belum juga?
Bagaimana dengan
http://localhost:8080/practice/horee ?
-
Bila anda melihat tampilan seperti gambar di
bawah, berarti anda telah berhasil membuat satu
Servlet !!! Selamat!!
- Kompilasi Dengan Menggunakan Apache Ant
Dengan contoh sederhana di atas, rasanya seneng banget bisa membuat Servlet. Ternyata ga sulit bukan? Memang tidak. Tapi bagaimana kalau membuat suatu servlet yang memerlukan banyak library/paket? Haruskah menyebutkan satu per satu paket tersebut pada saat kompilasi? Bagaimana pula dengan langkah untuk mengatur agar letak filenya memenuhi persyaratan? Haruskah menaruh secara manual dari satu folder ke folder yang lain?
Rasanya bukan langkah rumit untuk mengatasi permasalahan di atas karena telah ada beberapa piranti untuk membantu kita membangun aplikasi web berupa servlet. Salah satunya adalah Apache Ant dan Maven (Lihat sekilas pada bagian 1). Maven merupakan tools yang menyediakan fasilitas lebih lengkap dan cocok bila dipergunakan untuk proyek yang memerlukan manajemen lebih baik serta berkesinambungan, karena Maven mendukung versioning.
Baiklah, untuk lebih ringkasnya mari kita mulai dengan membahas langsung bagaimana caranya mengkompilasi kode di atas menggunakan Apache Ant.
Pertama periksalah apakah Ant telah tersedia di komputer anda. Bila belum, tentu anda perlu untuk menginstalnya. Petunjuk bagaimana menginstal dan seputarannya, secara lengkap digambarkan pada situs Apache Ant, namun untuk ringkas dan sekedar sebagai pengantar, berikut ini kita berikan contoh langkah-langkah dasarnya.
Langkah-langkah yang bisa anda lakukan adalah:
- Download Apache Ant versi yang anda inginkan dari http://ant.apache.org/index.html. Dalam contoh ini, digunakan versi 1.6.5
- Ekstrak file binary (masih dikompres dalam bentuk ZIP) yang anda download ke folder yang anda inginkan, misalkan folder "d:\apache\ant\"
- Peiksalah apakah Ant bisa dipanggil dari prompt. Cobalah dengan masuk ke folder "d:\apache\ant\bin" dan ketikkan perintah
ant -version untuk memeriksanya. Bila Ant telah terinstal, anda akan menemukan tampilan kurang lebih
berupa tulisan
Apache Ant version 1.6.5 compiled on June 2 2005
- Selanjutnya masuklah ke folder di mana kita menyimpan file-file yang akan kita kompilasi. Dalam contoh di atas masuk ke folder Tomcat "webapps\practice". Lakukan perintah "ant -version" seperti di atas. Apakah hasilnya sama? Bila jawabnya "YA", bagus...!! Berarti anda tak perlu melakukan konfigurasi tambahan (mungkin). Bila ditemukan tulisan
'ant' is not recognized as an internal or external command,
operable program or batch file.
berarti program yang anda panggil belum dikenal secara global (accessible dari seluruh path). Untuk itu tambahkan path program anda ke dalam variabel PATH dari Windows Environment Variable. Tambahkan aturlah variabel sebagai berikut
-
variabel ANT_HOME dengan nilai berupa folder dimana fila-file Ant berada, yaitu "d:\apache\ant\".
-
tambahkan ke dalam variabel PATH (buatlah kalo belum ada), sehingga nilainya "%PATH%;%ANT_HOME%\bin" yang berarti variabel PATH sekarang bernilai PATH lama plus "d:\apache\ant\bin". Bukalah jendela prompt baru, dan periksalah dari prompt dengan mengetikkan perintah
echo %PATH% maka anda akan melihat bahwa "d:\apache\ant\bin" ada di dalamnya yang berarti sekarang "Ant" bisa diakses dari manapun.
- Cobalah untuk memanggil perintah "ant -version" dari folder "webapps\practice". Anda seharusnya sudah tidak menemukan pesan kesalahan seperti pada langkah 4) di atas.
- Selanjutnya dari folder webapps\practice cobalah ketikkan perintah
ant
Maka mungkin anda akan mendapatkan pesan kesalahan
Buildfile: build.xml does not exist!
Build failed Ini berarti secara default, tugas Ant adalah untuk melakukan kompilasi dengan parameter berupa file "build.xml" yang di dalamnya berisi deklarasi perintah, variabel, parameter dan hal-hal lain yang diperlukan untuk mempermudah kompilasi dalam membangun sebuah project atau sub project dalam satu langkah.
- Tambahkanlah suatu file build.xml pada folder "webapps\practice", yang isinya dapat dilihat di sini:
- Dari file di atas, bisa diberikan penjelasan praktis sebagai berikut:
- Perhatikan pada BUILD.XML, ada
<project name="practice" basedir="." default="usage"> Ini berarti folder atau nama contextnya adalah "practice", dan base direktori utk kompilasi adalah dimana file berada (webapps\practice)
<property name="src.dir" value="src"/>
<property name="web.dir" value="war"/>
<property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
<property name="name" value="practice"/> berarti deklarasi variabel yang dipake pada skrip kompilasi. Kita tidak perlu merubah bagian ini kecuali<property name="name" value="practice"/> Sesuaikan dengan nama project yang akan dikompilasi (dalam hal ini namanya "practice")
<path id="master-classpath">
<fileset dir="${web.dir}/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
<!-- We need the servlet API classes: -->
<!-- for Tomcat 4.1 use servlet.jar -->
<!-- for Tomcat 5.0 use servlet-api.jar -->
<!-- for Other app server - check the docs -->
<fileset dir="${tomcat.home}/common/lib">
<include name="servlet*.jar"/>
</fileset>
<pathelement path="${build.dir}"/>
</path> ini deklarasi lokasi JAR file.
- Taruhlah JAR file yang dibutuhkan pada folder "\war\WEB-INF\lib" (berdasar deklarasi dir="${web.dir}/WEB-INF/lib dan lihat bahwa property "web.dir" bernilai "war")
Untuk yang servlet diarahkan utk mengambil dr "${tomcat.home}/common/lib"
- setelah itu, kita bisa melakukan perintah kompilasi ataupun lainnya dari DOS prompt bergantung tujuan perintah (lihat deretan isi BUILD.XML berikutnya)
- Bila PATH sudah benar, untuk kompilasi project di atas, masuklah ke folder "webapps\practice", jalankan perintah "ant build". Maka bila semua JAR yang diperlukan oleh kode Java ada, kode akan dikompilasi, dan hasil kompilasinya akan berada pada folder WAR (tepatnya "war\WEB-INF\classes"), lihat deklarasi
<property name="web.dir" value="war"/>
<property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
- Apakah anda menemukan pesan kesalahan meski semua file JAR sudah berada pada folder yang diharapkan? Apakah pesan kesalahannya seperti berikut? (pesan kesalahan tergantung lokasi project berada, dalam hal ini saya menaruhnya di "C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/practice"):
BUILD FAILED
file:C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%205.0/webapps/practice/build.xml:77: taskdef class org.apache.catalina.ant.InstallTask cannot be found
Apakah masalahnya? Masalah yang menyebabkan perintah build gagal adalah karena Ant tidak berhasil melakukan task yang bernama org.apache.catalina.ant.InstallTask. Ini disebabkan untuk kompilasi, diperlukan hak akses ke Tomcat sebagai user atas tomcat itu sendiri. Untuk mudahnya, kita tambahkan aja file yang bernama "build.properties" pada folder project (sama dengan folder dimana "build.xml" berada) dengan isi:
# Ant properties for building the springapp
deploy.path=c:/Program Files/Apache Software foundation/Tomcat 5.0/webapps
#deploy.path=c:/Tomcat 4.1/webapps
#deploy.path=c:/bea/user_projects/domains/mydomain/applications
tomcat.home=c:/Program Files/Apache Software foundation/Tomcat 5.0/
#tomcat.home= c:/Tomcat 4.1
tomcat.manager.url=http://localhost:8080/manager
tomcat.manager.username=USERNAME
tomcat.manager.password=PASSWORD
dimana:
- tomcat.home: folder dimana kita menginstall Tomcat
- USERNAME: username yang dikenal oleh Tomcat. Gunakan saja nama user administrator (defaultnya adalah "admin") saat anda melakukan instalasi
- PASSWORD: password untuk user Tomcat (dari langkah sebelumnya berarti "admin")
Cobalah lagi untuk melakukan "build"
- untuk membuat hasil kompilasi berada di folder "WEB-INF\classes" (bukan hanya di "war\WEB-INF\classes") dan bisa diakses oleh Tomcat saat dipanggil dari browser, gunakan perintah "ant deploy" setalah melakukan "build".
- selanjutnya...agar servlet didaftarkan dan dikenal oleh Tomcat, lakukan "ant start"
- untuk menghentikan servlet(sehingga bisa diakses dr Tomcat, mungkin karena mau diperbaiki dsb) gunakan "ant stop"
- Jadi secara ringkas, setelah memiliki kode Java yang ada di folder SRC, lakukan langkah BUILD, kemudian DEPLOY, lalu START. Kalau servlet masih running, sebelum START perlu STOP dulu.
|