Pengantar Servlet (2) Print
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
  1. 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:
  2. 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!!
  3. 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.

  4. 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:
    1. Download Apache Ant versi yang anda inginkan dari http://ant.apache.org/index.html. Dalam contoh ini, digunakan versi 1.6.5
    2. Ekstrak file binary (masih dikompres dalam bentuk ZIP) yang anda download ke folder yang anda inginkan, misalkan folder "d:\apache\ant\"
    3. 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
    4. 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.
    5. Cobalah untuk memanggil perintah "ant -version" dari folder "webapps\practice". Anda seharusnya sudah tidak menemukan pesan kesalahan seperti pada langkah 4) di atas.
    6. 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.
    7. Tambahkanlah suatu file build.xml pada folder "webapps\practice", yang isinya dapat dilihat di sini:
    8. Dari file di atas, bisa diberikan penjelasan praktis sebagai berikut:
      1. 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)
      2. <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")
      3. <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.
      4. 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"
      5. setelah itu, kita bisa melakukan perintah kompilasi ataupun lainnya dari DOS prompt bergantung tujuan perintah (lihat deretan isi BUILD.XML berikutnya)
      6. 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"/>
      7. 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"
      8. 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".
      9. selanjutnya...agar servlet didaftarkan dan dikenal oleh Tomcat, lakukan "ant start"
      10. untuk menghentikan servlet(sehingga bisa diakses dr Tomcat, mungkin karena mau diperbaiki dsb) gunakan "ant stop"
      11. 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.