Servlets 

 

 

Servlet adalah sebuah class dalam bahasa pemgrograman Java yang digunakan untuk 

meningkatkan kapabilitas dari server sebagai host dari aplikasi yang diakses melalui request-

response programming model(Diadaptasi dari tutorial J2EE). Servlet adalah sebuah class java 

yang meng-implement interface Servlet dan menerima request yang berasal dari class Java, web 

client, atau servlet lain yang membangkitkan response.  

"Servlet" juga dipanggil sebagai HTTP Servlet. Hal ini disebakan karena servlets biasanya 

digunakan dengan HTTP, akan tetap servlet bukanlah merupakan salah satu spesifikasi spesifik 

dari protokol client-server.  

Untuk memulai pembuatan servlet. Anda diharapkan mengerti mengenai pemrograman, konsep 

client-server, dasar-dasar HTML dan HTTP (HyperTextTransferProtocol). Untuk menciptakan 

sebuah servlet, Anda perlu untuk meng-import standard extension class dari javax.servlet dan 

javax.servlet.http ke program java Anda. Javax.servlet berisi framework dasar servlet dimana 

javax.servlet.http digunakan sebagai ekstensi dari framework servlet  bagi servlet yang akan 

menjawab HTTP request.  

 

2.1.2 Gambaran Arsitektur Servlet 

  

Sebelum Servlet, salah satu dari beberapa cara yang umum digunakan untuk menambahkan 

sebuah fungsi kedalam web server adalah melalui Common Gateway Interface (CGI). CGI 

menyediakan sebuah interface ke program eksternal bagi sebuah server, dimana program 

tersebut akan dipanggil oleh server untuk menangani client request. Bagaimanapun, CGI telah 

didesain khusus sehingga tiap pemanggilan dari resource CGI akan menciptakan proses yang baru 

pada server; informasi yang dibutuhkan oleh program akan diberikan kepada proses ini dengan 

menggunakan standard input dan environment variable. Sekali request terpenuhi, maka proses 

tersebut akan dimatikan, dan akan kembali kepada resource didalam system. Permasalahan yang 

muncul pada skenario tersebut adalah proses ini sangat membebani server karena dibutuhkan 

persyaratan yang cukup banyak pada sistem resource, dan juga membatasi berapa banyak user 

yang dapat ditangani oleh aplikasi pada waktu yang sama.  

 

 

 

Basic Servlets 1 

J.

 

 

 

Servlet memiliki desain tertentu yang dapat mengatasi segala permasalahan yang melekat pada 

CGI dan memberikan sebuah solusi java  kepada developer untuk membuat sebuah aplikasi 

berbasis web. Selain menciptakan sebuah proses yang tidak terlalu membebani server pada saat 

kedatangan setiap request dari client, dengan menggunakan servlet hanya ada satu proses yang 

akan menangangi SELURUH request: proses tersebut memerlukan servlet container untuk 

dijalankan. Pada saat kedatangan request yang baru, container akan menciptakan sebuah thread 

ringan untuk mengeksekusi servlet.  

Servlet juga hanya dimasukkan sekali kedalam memori, baik container yang memasukkannya 

kedalam memori pada saat server mulai bekerja, maupun pada saat pertama servlet dibutuhkan 

untuk memberikan service kepada client. Sekali servlet dimasukkan kedalam memori, ia akan 

bertahan didalam memori, dan siap untuk menangani request yang lain dari client. Hal ini tidaklah 

sama dengan CGI dimana tiap request dari client akan dimasukkan dan dikeluarkan ke dan dari 

memori.  

 

Perwujudan dari Servlet pertama 

Contoh kode dibawah ini menunjukkan baaimana struktur dasar dari sebuah servlet yang 

menangani request GET, untuk mencetak „Hello World“ 

 

 

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 { 

           

    //"request" digunakan untuk membaca HTTP readers yang datang   

    // Form data HTML (contoh data di-enter dan di-submit oleh user ) 

    // sedangkan data yang lain dapat dimasukkan dari request client  

     

    // "response" adalah sebuah HTTP response line yang spesifik    

    // headers(contoh menspesifikasi content type dan men-setting cookies ). 

    // Ia juga memiliki sebuah method yang memberikan ijin kepada servlet untuk             

//membangkitkan response kepada client  

     

    PrintWriter out = response.getWriter(); 

    out.println("<HTML> <TITLE>Hello Page</TITLE><BODY><br>"); 

    out.println("<h1>Hello World!</h1>"); 

    out.println("</BODY></HTML>"); 

 

    //"out" untuk mengirim content kepada browser  

  } 

Gambar 2-1 : Servlet dasar yang mencetak Hello World  

 

 

 

Basic Servlets 2 

J.

 

 

 

Bagian  pertama dari kode diatas pada gambar 2-1 adalah meng-import class di java.io (bagi 

PrintWriter, dsb), javax.servlet dan javax.servlet.http. Javax.servlet dan javax.servlet.http adalah 

package-package yang menyediakan interfaces dan class untuk membuat sebuah servlet(untuk 

HttpServlet, HttpServletRequest dan HttpServletResponse). 

Dengan cara meng-extend HttpServlet, class ini akan meng-inherit method yang akan secara 

otomatis akan dipanggil oleh server tergantung pada kondisi-kondisi tertentu (akan dibicarakan 

kemudian). Dengan meng-override method ini, kita dapat membuat servlet kita memiliki fungsi-

fungsi yang kita inginkan.  

Pada kasus ini, method yang diturunkan dari HTTPServlet dan akan kita override adalah method 

doGet. Untuk menyederhanakan, ia adalah sebuah method yang akan dipanggil oleh servlet 

container kapanpun pada saat Get request dipanggil pada servlet tertentu. Ingatlah, pada bab 

sebelumnya mengenai site navigation, document retrieval, dan page viewing adalah contoh-

contoh dari GET request. Oleh karena itu, kapan saja user ingin untuk melihat output dari servlet, 

sebuah GET request pasti dipanggil.  

Apabila kita melihat pada listing code, kita akan dapat melihat bahwa doGet method akan 

menerima dua parameter yaitu: HttpServletRequest object dan HttpServletResponse object. 

Darimana object ini berasal, tidak perlu diperhatikan lagi oleh developer. Mereka akan diciptakan 

dan di-maintain oleh servlet container dan bekerja sederhana bagi kita pada saat container 

memanggil method doGet. Pada kasus ini, method doGet(dan method-method lain yang akan kita 

temukan kemudian) hampir sama dengan method public static void main (String[] args) yang kita 

gunakan pada program java berbasis command line. Kita tidak akan membuat String array untuk 

diberikan kepada method; hal itu telah disiapkan bagi kita oleh runtime environment.  

Object dari HttpServletRequest dan HttpServletResponse telah menyiapkan fungsi-fungsi yang 

berguna bagi developer: 

● Object HttpServletRequest memberikan akses bagi segala informasi terhadap client 

request, termasuk apa saja bentuk parameter value yang dapat diletakkan pada Http 

request header, Http request method yang telah mereka gunakan, dan sebagainya.   

● Object HttpServletResponse terdiri dari semua method yang dibutuhkan oleh developer 

untuk memproduksi sebuah response yang akan dikirimkan kembali kepada client. 

Meliputi method-method yang harus di-set pada HTTP response header, untuk 

mendeklarasikan tipe MIME dari response, sebaik  method yang digunakan untuk 

mengambil instance dari class Java I/O yang akan kita gunakan secara langsung untuk 

memproduksi output. 

 

Kembali pada kode diatas, kita akan melihat bahwa selain comment, hanya beberapa baris saja 

yang kita telah gunakan dalam menciptakan sebuah fungsi yang menampilkan "Hello World!" 

kepada user. Pertama adalah PrintWriter out = response.getWriter() dan yang lainnya adalah 

beberapa pemanggilan dari out.println(). Untuk saat ini, berpikirlah secara sederhana untuk 

menggunakan PrintWriter sebagai object yang dapat kita gunakan untuk memberikan output text 

kepada user. Dengan pernyataan itu didalam benak kita, terasa sederhana untuk melihat 

bagaimana pemanggilan out.println() berkali-kali dapat menampilkan content berikut ini: 

   

Basic Servlets 3 

J.

 

 

 

 

Testing sebuah contoh servlet   

Pada poin ini kita diharapkan mampu untuk menampilkan output dari contoh sebuah servlet. 

Untuk memulai abstract detail dari pembangunan sebuah servlet dan konfigurasinya, kita akan 

menggunakan tool otomatis yang telah disediakan oleh IDE. IDE yang akan kita gunakan kali ini 

adalah Sun Studi Enterprise 8 yang akan tersedia bagi Anda secara gratis apabila Anda 

merupakan anggota dari Sun Developer Network. Ia memiliki dukungan lengkap bagi servlet dan 

spesifikasi JSP, sebaik sebuah host yang menangani fitur-fitur tambahan.  

Mulai saat ini, kita akan mengasumsikan bahwa Enterprise 8 telah diinstal dengan sukses pada 

sistem Anda. Sebagai bantuan pada saat instalasi, Anda dapat merujuk pada bagian appendix 

yang ada dalam modul ini.  

 

 

 

 

 

 

Basic Servlets 4 

J.

 

 

 

Hal pertama yang harus kita lakukan untuk contoh servlet kita disini adalah kita harus 

jutnya akan mengharuskan Anda untuk memberikan detail dari project. Bagi test 

 

 

menciptakan project yang baru dari aplikasi web. Untuk melakukan ini, pilih New -> Project. 

Didalam layar yang kita lihat berikut ini, pilih kategori web. Disebelah kanan, pilih New Web 

Application 

Layar selan

servlet pertama kita, marilah membuat "FirstServletProject" sebagai nama dari project kita, dan 

buatlah  default value dari field-field yang lain.  

 

 

 

 

 

 

 

 

Basic Servlets 5 

J.

 

 

 

Setelah selesai membuat web project yang baru, layar akan terlihat seperti berikut:  

 

   

 

 

 

 

 

 

 

 

 

 

 

Basic Servlets 6 

J.

 

 

 

Untuk menambah servlet kita ke aplikasi, klik kanan pada Source Packages, pilih New -> Servlet. 

ka Servlet tidak tampil pada menu New context, pilih juga New->File/Folder. Pada layar 

erikutnya, pilih web category, dan kemudian Servlet.  

emudian IDE akan menjalankan beberapa screen yang akan menanyakan mengenai detail 

Ji

b

K

servlet yang telah diciptakan. Pada layar pertama, nama servlet adalah FirstServlet. Didalam 

package gunakan nama jedi.servlet.   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Basic Servlets 7 

J.

 

 

 

Kemudian pada layar selanjutnya, biarkanlah default value seperti semua, kemudian klik tombol 

nish. Hal tersebut akan menghasilkan sesuatu yang akan dibangkitkan seperti pada layar berikut 

i:  

 

fi

in

 

  

  

 

 

 

 

 

 

 

 

Basic Servlets 8 

J.

 

 

 

Dari sini, kita dapat melihat bahwa IDE yang telah kita buat sebagian akan meng-implementasi 

cessRequest. Jika kita akan menekan pada kotak dengan tanda tambah dibagian kiri 

awah, kita akan melihat bahwa processRequest adalah sebuah method sederhana yang dapat 

ita panggil baik dari doGet maupun doPost. Hal ini berarti content dari method processRequest 

memberikan bentuk dasar bagi fungsionalitas dari servlet kita.   

 yang yang telah dideskripsikan dalam 

esifikasi servlet. Servlet lifecycle mendeskripsikan bagaimana servlet di-load, di-instantiate, di-

-destroy, dan yang terakhir bagaimana gerbage collection 

trol oleh sebuah kontainer yang telah dibangun oleh servlet.  

ma, servlet dapat secara efisien melakukan sharing data dengan yang lain, tetapi sekarang oleh 

method pro

b

k

Pertama, singkirkan semua contents dari method processRequest. Kemudian copy paste content 

method doGet dari listing kode ke test servlet.  

Untuk menjalnkan tekan shift + f6. IDE kemudian akan mem-package, deploy, dan invoke servlet 

secara otomatis bagi kita, untuk menghasilkan output.  

 

2.1.3 Servlet Lifecycle 

  

Sebuah servlet telah diatur melalui sebuah lifecycle

sp

inisialisasi, di-request service-nya, di

dijalankan. Lifecycle dari servlet dikon

 

Lifecycle dari servlet akan memberikan kesempatan bagi servlet engine untuk mengenali 

permasalahan dalam hal performance dan CGI resource dan aspek keamanan pada low-level 

server API program. Sebuah servlet engine mungkin dapat mengeksekusi semua servlet didalam 

sebuah Java virtual machine(JVM). Karena pada dasarnya mereka berada didalam JVM yang 

sa

Java mengakses private data dari yang lain haruslah dicegah. Servlet juga membuka 

kemungkinan untuk  untuk melakukan persistance diantara request-request sebagai instance dari 

object, sehingga dapat menghemat memori lebih banyak daripada full-fledged process. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Basic Servlets 9 

J.

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Gambar diatas menunjukkan event utama didalam sebuah kehidupan servlet. Sangatlah penting 

ntuk dicatat bahwa dari setiap event pastilah ada sebuah method pada servlet yang akan di-

voke oleh container. Marilah kita lihat satu demi satu:     

ada fase ini, sebuah class servlet akan diload kedalam memori dan instance-nya akan diciptakan 

leh servlet container.  

tainer practice disebut lazy loading. Dengan menggunakan 

ethod ini, sebuah servlet class akan di-load kedalam memori, di-instantiate, dan diinisialisasi 

rti bahwa ada sedikit overhead yang terjadi pada 

at pemanggilan pertama sebuah servlet. Apabila kondisi ini tidak diinginkan, maka tiap servlet 

u

in

 

 

 

2.1.3.1 INSTANTIATION 

 

P

o

 

Secara default, sebuah servlet con

m

hanya setelah sebuah request telah dibuat untuknya. Hal ini menjadikan waktu startup menjadi 

lebih cepat bagi aplikasi, tetapi hal ini juga bera

sa

dapat dikonfigurasikan untuk di-load pada startup server atau aplikasi. Lebih banyak tentang hal 

ini, akan kita diskusikan lagi pada descriptor bagi application's deployment.  

 

 

 

 

Basic Servlets 10

J.

 

 

Seperti yang dapat kita lihat pada diagram, sebuah servlet dapat melewati fase instantiation 

kali per lifetime. Hal ini berarti bahwa hubungan overhead dengan loading pendefinisian servlet 

ass kedalam memori hanya terjadi sekali. Hal ini menunjukkan keuntungan servlet dibandingkan 

knologi yang lain.  

 

au inisialisasi value. Servlet membagi kedalam fase terpisah bagi aktifitas 

ada fase ini servlet digunakan terutama didalam sebuah aplikasi. Seperti pada masa 

stantiation, servlet hanya berada pada fase ini sekali. Hanya setelah fase ini, instance dari 

uat dapat dimulai dipanggil sebagai servlet.  

 oleh container pada masa ini adalah init() method. Ia merupakan sebuah 

public void init(ServletConfig config)  

hat, method akan mengambil sebuah parameter sebagai instance dari sebuah 

bject ServletConfig. Object ini adalah object yang bertanggung jawab terhadap pemenuhan 

atus dar masi mengenai konfigurasi dari servlet, ia juga 

enyediakan sebuah cara bagi servlet untuk mengakses informasi secara luas dari aplikasi dan 

emfasilitasi untuk menggunakan object dari ServletContext.  

servlet action tidak tertinggal 

an konfigurasi juga telah di-set up 

 sampai server telah menghapus servlet dengan memanggil 

ethod destroy. 

se

cl

te

 

Method yang relevan adalah servlet konstruktor  tanpa argument. Akan tetapi, tidak 

direkomendasikan untuk meletakkan kesuluruhan kode didalam sebuah konstruktor. Hampir 

semua fungsi yang developers inginkan untuk ditambahkan kepada konstruktor termsuk object 

pada saat set-up, at

tersebut.   

 

 

  

2.1.3.2 INITIALIZATION 

  

P

in

object yang telah kita b

 

Method yang dipanggil

method signature yang lengkap dan merepresentasikan bahwa servlet sangat mudah untuk 

dipanggil kembali.  

 

 

 

 

Seperti dapat kita li

o

st i servlet. Object ini memiliki infor

m

m

 

Seperti disebutkan sebelumnya bahwa konfigutasi atau inisialisasi kode manapun haruslah tidak 

diletakkan dalam konstruktor servlet akan tetapi sebaiknya diletakkan dalam method init. Jika 

seorang developer ingin menggunakan method ini, sangatlah penting untuk memanggil 

super.init(config).Untuk memastikan bahwa inisialisasi default dari 

d

 

Setelah inisialisasi, servlet akan ditangani oleh request dari client.  

  

Method ini hanya akan dipanggil kembali pada saat server dimasukkan kedalam servlet. Server 

tidak dapat me-load sebuah servlet

m

 

 

 

 

 

 

 

 

 

 

Basic Servlets 11

J.

 

 

 

2.1.3.3 SERVICE 

ase ini adalah fase dimana sebuah servlet berada didalam lifetime-nya. Pada fase ini, servlet 

apat berkali-kali dipanggil oleh container untuk menyediakan fungsionalitas-nya.  

alah method yang akan di-invole oleh servlet container pada fase ini: 

 

bject dari ServletRequest dan ServletResponse diberikan kepada sebuah method yang 

od 

response. 

ebuah hal penting yang harus diingat adalah servlet container akan membuat pemanggilan yang 

request. Hal ini adalah salah satu keuntungan yang dimiliki oleh 

va servlet. Hal ini juga merupakan salah satu alasan mengapa servlet dan service method-nya 

public void doGet(HttpServletRequest req, HttpServletResponse) 

ublic void doTrace(HttpServletRequest req, HttpServletResponse) 

asing-ma ,POST,...). Method yang 

TP. Karena kebanyakan 

ari peman POSt method calls, maka 

da waktu-waktu tertentu dimana sebuah servlet container akan berjalan out of memory, atau 

ntuk mendetekasi jumlah dari memori yang tersisa dengan cara menghapus satu atau lebih 

rvlet mana yang dikeluarkan dari memori ditentukan oleh servlet 

angsung dikontrol oleh developer.  

 akan disebut sebagai fase 

ang akan dipanggil oleh container sebelum ia selesai adalah method 

us dihandle seperti koneksi ke database dan sebagainya.  

 

F

d

 

Method dibawah ini ini ad

 

 public void service(ServletRequest req, ServletResponse res) 

 

O

menyediakan method bagi developer untuk meng-extract informasi dari user request dan meth

untuk membangkitkan 

 

S

berulang-ulang ini kepada method service dengan menggunakan thread yang berbeda. Oleh 

karena itu, pastilah hanya satu saja instance dari servlet aktif yang mengambil tempat di dalam 

memori untuk menangani banyak 

ja

haruslah selalu didesain untuk menerima thread-safe.  

 

Bagi HTTP servlet yang spesifik misalnya servlets extending HttpServlet,developers seharusnya 

meng-override service method secara langsung. Jika tidak developer harus meng-override method 

berikut ini: 

 

 

 public void doPost(HttpServletRequest req, HttpServletResponse) 

 public void doPut(HttpServletRequest req, HttpServletResponse) 

 p

 

M sing method ini cocok bagi HTTP method yang spesifik(GET

tepat kemudian akan dipanggil apabila servlet menerima request dari HT

d ggilan HTTP yang ditangani oleh developer adalah GET atau 

servlet hanya bisa meng-implement doGet,DoPost, dan keduanya.   

 

 

 

2.1.3.4 DESTRUCTION 

  

A

u

instance servlet dari memori. Se

container dan hal ini tidak dapat l

  

Sebuah container juga akan membebaskan instance servlet pada saat container tersebut di shut 

down.   

 

Pada saat sebuah servlet telah dihilangkan dari memori, hal ini

destruction. Method y

destroy(). Disini, servlet kita seharusnya mampu untuk secara eksplisit membebaskan resource 

yang har

 

  

 

 

Basic Servlets 12

J.

 

 

 

2.1.3.5 GARBAGE COLLECTION 

turan java standard mengenai garbage collection dari object, tidak akan dijelaskan lebih lanjut 

isini.  

enangani requests dan responses 

utama dari sebuah servlet adalah untuk menyediakan sebuah content yang dinamik bagi 

ser. Berdasarkan definisinya, dynamic content adalah sebuah content yang berubah-ubah 

sponse-nya pada kondisi yang bervariasi,sebagai contoh kondisi request dari user, waktu, dan 

endapatkan informasi HTTP secara spesifik seperti cookies information, detail dari 

eader, dan sebagainya.   

 

A

d

 

 

M

  

Tujuan 

u

re

sebagainya.  

 

Untuk memberikan akses kepada servlet bagi user request tertentu,telah disediakan sebuah 

instance dari ServletRequest object yang menyembunyikan detail dari servlet berbasis HTTP 

diberikan pada subclass, HTTPServletRequest, yang menyediakan method tambahan untuk 

kembali lagi m

h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Basic Servlets 13

J.

 

 

 

Form Data dan Parameter 

etParameter 

 

alah satu skenario yang paling sering ditemukan dan membutuhkan sebuah content yang 

ingin aplikasi yang me-respon kepada user dipresentasikan dalam 

entuk form, seperti contoh berikut ini: 

 

 

 

 

rtentu kepada nama user tersebut.  

ada skenario ini dan seperti skenario yang lain, Java telah menyediakan method getParameter 

idalam object HttpServletRequest. Method ini akan mengambil sebuah parameter String(nama 

pesifik dari form) 

 

g

 

S

dinamik adalah apabila kita 

b

 

Diberikan form diatas, yang mengambil nama user, dan kita ingin untuk memberikan response 

te

 

P

d

dari element form dimana valuenya dapat diambil kembali) dan mengembalikan response sebuah 

String(sebuah value dari form elemen s

 

 

 

 

Basic Servlets 14

J.

 

 

 

Dibawah adalah contoh untuk mendapatkan nama user dan menampilkan sebuah salam 

derhana.  se

 

 

 

public GetParameterServlet extends HttpServlet { 

 

public void doPost(HttpServletRequest request, HttpServletResponse response) 

    throws ServletException, IOException { 

         

        // dapatkan nama yang telah di-inputkan oleh user  

        String userName = request.getParameter("userName"); 

         

        // dapatkan object dari PrintWriter dan gunakanlah untuk memberikan output berupa  

       // salam  

        PrintWriter out = response.getWriter(); 

        out.println("<HTML><BODY><H1>"); 

        out.println("HELLO AND WELCOME, " + userName + "!"); 

        out.println("</H1></BODY></HTML>"); 

                 

        out.close();         

    } 

 

 

 

<HTML> 

    <TITLE>Halloa!</TITLE> 

    <BODY> 

       <form action="/GetParameterServlet" method="post"> 

            Enter user name : <input type="text" name="userName"/> </br> 

            <input type="submit" value="Greet me!"/> 

        </form> 

     </BODY> 

</HTML> 

 

 

Basic Servlets 15

J.

 

 

 

Diatas adalah sebuah HTML yang digunakan untuk menampilkan form yang akan digunakan untuk 

 Sebagai catatan value dari parameter yang diberikan kepada 

cok dengan nama dari text field.  

 

 nama JEDI pada form sebelumnya.  

   

 

 

 

getParameterValues 

 

Ada saat-saat dimana kita menginginkan untuk mengambil kembali data form dari sebuah form 

pada multiple element dengan nama yang sama. Pada kasus ini, gunakanlah getParameter 

method yang telah disebutkan sebelumnya dan akan mengembalikan sebuah value dari element 

pertama dari nama yang telah diberikan. Untuk mendapatkan kembali semua value, kita akan 

menggunakan method getParameterValues. Sekali lagi, method ini akan mengambil dalam bentuk 

String sebagai nama dari element form, akan tetapi, kali ini, akan mempunyai nilai kembalian 

String array.  

 

 

  

mendapatkan data dari user.

method getParameter haruslah co

Berikut ini adalah output dari kode pada saat kita memberikan

 

Basic Servlets 16

J.

 

 

 

Berikut ini adalah contoh, sampai mengeluarkan output. 

 

public GetParameterValuesServlet extends HttpServlet { 

    public void doGet(HttpServletRequest request,  

    HttpServletResponse response) throws ServletExceptionm IOException{ 

        String paramValues[] = request.getParameterValues("sports"); 

        StringBuffer myResponse = new StringBuffer(); 

        myResponse.append("<HTML><TITLE>Your choices</TITLE>"); 

        myResponse.append("<BODY><H1>Your choices were : </H1>"); 

         

        for (int i = 0; i < paramValues.length; i++) { 

            myResponse.append("<br/><li>"); 

            myResponse.append(paramValues[i]); 

        } 

         

        PrintWriter out = response.getWriter(); 

        out.println(myResponse.toString()); 

    } 

 

<html> 

   <title>Choice selection</title><body> 

    <H1>What sports activities do you perform?</h1> 

    <form action="GetParameterValuesServlet" method="post"> 

  <input type="checkbox" name="sports" value="Biking"> Biking <br/> 

 <input type="checkbox" name="sports" value="Table Tennis"> Table Tennis <br/> 

 <input type="checkbox" name="sports" value="Swimming"> Swimming <br/> 

        <input type="checkbox" name="sports" value="Basketball"> Basketball <br/> 

        <input type="checkbox" name="sports" value="Others"> Others <br/> 

        <input type="submit"> 

    </form></body> 

 </html> 

Basic Servlets 17

J.

 

 

 

 

 

Basic Servlets 18

J.J.

 

 

 

 

 

 

getParameterNames 

 

Ada saat-saat dimana kita menginginkan servlet kita untuk berhati-hati terhadap nama dari satu 

atau lebih paramater didalam form, tanpa harus menuliskan hardcode mereka kedalam servlet. 

Pada kasus ini, kita akan menggunakan method getParameterNames. Ia akan mengembalikan 

sebuah enumeration dari nama yang berasal dari element-element form yang telah digabungkan 

pada saat user me-request.  

 

 

Mengambil kembali informasi dari sebuah URL request  

 

Ingatlah, dari HTTP kita, bahwa sebuah URL request tersusun dari bagian-bagian seperti beriku 

ini: 

   

 http://[host]:[port]/[requestPath]?[queryString] 

  

 

Kita dapat memanggil kembali current value masing-masing bagian dari user request dengan 

memanggil method pada object HttpServletRequest 

 

  

• Host – request.getServerName() 

 

 

Basic Servlets 19

 Port – request.getServerPort() 

Request Path – Di Java,path yang di-request dibagi menjadi dua komponen logical yaitu  

o Context – context dari aplikasi web. Dapat dipanggil kembali dengan cara meng-invoke 

 

• 

request.getContextPath()  

o Path info – sisa dari request setelah context name. Dapat dipanggil kembali dengan

meng-invoke request.getPathInfo() 

o Query String – request.getQueryString() 

 

 

Oleh karena itu,sebagai contoh, dengan sebuah request URL dari   

  http://www.myjedi.net:8080/HelloApp/greetUser?name=Jedi

 

 

Tabel berikut ini merepresentasikan hasil apabila kita memanggil method tersebut : 

 

request.getServerName() www.myjedi.net 

request.getServerPort() 8080 

request.getContextPath() HelloApp 

request.getPathInfo() greetUser 

request.getQueryString() name=Jedi 

 

 

 

 

 

 

 

Basic Servlets 19

J.

 

 

 

Informasi pada Header  

e) – hampir sama dengan getHeader(), hanya jika ia 

mengembalikan semua value pada spesifik header sebagai object enumeration. 

n sebuah object Enumeration dari 

etDateHeader(String name) – mengembalikan value dari spesifik header sebagai sebuah 

long va bject Date. Jika header tidak dikonversikan 

t IllegalArgumentException.  

.1.4 OUTPUT GENERATION 

 dapat membangkitkan sebuah output dinamik bagi user. 

ta nggunakan method object HttpServletResponse.  

Leb

obj t an dengan response kita ke user. Untuk membantu meletakkan 

hal i 

tera r onsole juga instance dari object PrintWriter. Sebagian 

bes a : jika Anda mempunyai instance dari object 

rin riter, secara sederhana memanggil pada print yang disediakan atau method printIn yang 

isediakan output. 

ggilan kembali, dengan 

ode keluaran dalam huruf bercetak tebal. 

  

Informasi pada header bisa didapat dari dalam servlet dengan memanggil method-method berikut 

ini dari HTTPServletRequest: 

 

• getHeader(String name) – mengembalikan value dari spesifik header sebagai String. Jika 

spesifik header tidak ada, maka akan memiliki nilai kembalian null . 

• getHeaders(String nam

 GetHeaderNames() - method ini akan mengembalika

semua header termasuk HTTP request.  

• getIntHeader(String name) – mengembalikan value dari spesifik header sebagai int. Jika 

spesifik header tidak tersedia, method ini akan memiliki nilai kembalian -1. 

• g

lue yang merepresentasikan sebuah o

i sebuah Date, method ini akan mendapamenjad

 

 

 

2

 

Pada contoh-contoh sebelumnya, kita

Ki  telah melakukannya dengan me

 

ih jauh, kita telah menggunakan sebagian besar method getWriter. Method ini mengembalikan 

ec PrintWriter yang dihubungk

 in dalam perspektif yang tepat, kita harus mengingat bahwa object System.out yang secara 

tu  kita gunakan untuk isi keluaran ke c

ar mereka berkelakuan pada cara yang sam

tWP

d

 

Kode bagi servlet pertama kita adalah disalin kembali di sini untuk peman

k

 

 

import java.io.*; 

import javax.servlet.*; 

import javax.servlet.http.*; 

 

public class HelloSe let { rvlet extends HttpServ

  public void doGet(HttpServletRequest request, 

                    HttpSe ) rvletResponse response

      throws ServletException, IOException { 

           

    PrintWriter out = response.getWriter(); 

    out.println("<H  Page</TITLE><BODY><TML> <TITLE>Hello br>"); 

    out.println("<h1>Hello World!</h1>"); 

    out.println("</BODY></HTML>"); 

 

  } 

 

 

Basic Servlets 20

J.

 

 

 

Method khusus lainnya dalam object HttpServletResponse adalah : 

 lain : JPEG, PDF, DOC, XLS, dsb. Untuk output bukan teks, method 

in

k

e

 

 

 

setContentType – ini menginformasikan browser client dari tipe MIME dari output mengenai 

penerimaan. Semua isi yang telah kita generate sehingga telah menjadi HTML. Kita dapat secara 

udah mengirim tipe isi yangm

pr t dalam object PrintWriter yang telah kita gunakan tidak cukup. Untuk me-generate outpun 

bu an teks, kita menggunakan method yang lain. 

 

GetOutputStream – method ini menerima instance dari object OutputStream yang dihubungkan 

dengan response kita ke user. Menggunakan OutputStream, kita dapat menggunakan object dan 

m thod Java I/O standar untuk menghasilkan semua jenis output. 

 

Di bawah ini merupakan contoh kode yang akan mengeluarkan file JPG dalam aplikasi web ke 

user. 

 

public JPEGOutputServlet extends HttpServlet { 

    public void doGet(HttpServletRequest request, HttpServletResponse response) { 

        byte bufferArray[] = new byte[1024];      

        ServletContext ctxt = getServletContext(); 

        response.setContentType("image/gif"); 

        ServletOutputStream os = response.getOutputStream(); 

 

  InputStream is = ctxt.getResource("/WEB-INF/images/logo.gif").openStream(); 

        int read = is.read(bufferArray); 

        while (read != -1) { 

            os.write(bufferArray); 

            read = is.read(bufferArray); 

        } 

        is.close(); 

        os.close(); 

    } 

 

  

Dalam semua contoh yang telah kita lakukah sejauh ini, kita telah menggunakan tool yang dibawa 

l konfigurasi, packaging, dan pengembangan aplikasi 

 

dalam Enterprise IDE untuk meringkas detai

web. Kita akan melihat rinciannya sekarang. 

 

 

 

 

 

 

 

Basic Servlets 21

J.

 

 

 

2.1.4.1 Konfigurasi Aplikasi Web 

 

 

Spesifikasi servlet mendefinisikan sebuah file XML bernama web.xml yang beraksi sebagai file 

konfigurasi untuk aplikasi web kita. File ini juga dikenal sebagai deployment descriptor. 

 

 

<web-app version="2.4"  

   xmlns="http://java.sun.com/xml/ns/j2ee"  

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

  <servlet> 

    <servlet-name>FirstServlet</servlet-name> 

    <servlet-class>jedi.servlet.FirstServlet</servlet-class> 

  </servlet> 

  <servlet-mapping> 

    <servlet-name>FirstServlet</servlet-name> 

    <url-pattern>/FirstServlet</url-pattern> 

  </servlet-mapping> 

  <session-config> 

    <session-timeout> 

            30 

    </session-timeout> 

  </session-config> 

  <welcome-file-list> 

    <welcome-file> 

            index.jsp 

    </welcome-file> 

  </welcome-file-list> 

</web-app> 

 

 

Kode di atas adalah web.xml yang kita gunakan pada contoh FirstServlet kita. Kita akan 

menggunakannya sebagai titik awal dalam eksplorasi web.xml, dan menambah di atasnya. 

 

CATAT : web.xml dari proyek aplikasi web Enterprise dapat ditemukan dengan mengembangkan 

b Configuration File dalam view project. ta

 

 

 

 

 

 

Basic Servlets 22

J.

 

 

 

<web-app> 

Baris ini dijalankan sebagai kedua elemen root dari file konfigurasi sebaik mendeklarasikan (lewat 

tributnya) informasi utama untuk isi servlet untuk menjalankan file sebagai file descriptor 

servlet> 

men ini mendefinisikan servlet yang digunakan oleh aplikasi. <servlet> 

memili

disediakan oleh developer dimana akan digunakan untuk 

et yang harus dipenuhi. 

i dan nilai dari elemen yang memberitahu 

diinisialisasi pada startup container/aplikasi, 

melewati aturan loading normal lazy. Nilai untuk elemen ini adalah angka dimana 

andingkan  ke servlet <load-on-startup> lainnya. 

 

Setiap instance dari elemen ini mendefinisikan pemetaan URL ke servlet. Berikut ini node anak 

vlet untuk dipetakan. Harus didefinisikan sebelumnya 

let ini akan dipetakan. Mempunyai nilai dari /* akan 

a request pada aplikasi Anda secara langsung ke servlet Anda. 

Pada conto ah diberikan, pola url dari FirstServlet adalah /FirstServlet. Ini artinya bahwa 

st ke 

 http://[host]:[port]/FirstServletProject/FirstServlet 

gani oleh FirstServlet. 

Diambil contoh bahwa semua definisi servlet harus pertama disediakan sebelum menambah 

 

 

finisikan rincian konfigurasi untuk pengaturan session. Ini akan dibicarakan 

dalam bab selanjutnya. 

st> 

Elemen ini mendefinisikan komponen web yang akan secara otomatis di-load jika user 

emasukkan request untuk aplikasi tanpa menspesifikasi sumber yang utama. Sebagai contoh, 

 

a

deployment yang valid. 

 

 

<

Setiap instance dari ele

ki node anak yaitu : 

1. <servlet-name> - nama logis yang 

semua referensi yang akan datang ke servlet ini. 

2. <servlet-class> - persyaratan nama class dari servl

3. <load-on-startup> (Pilihan) – mempunyai entr

container yang servlet harus di-instantiate dan 

dengan 

memerintah urutan dari loading yang dib

 

<servlet-mapping> 

yang dimiliki : 

1  <servlet-name> - nama logis dari ser

dalam file descriptor. 

2 <url-pattern> - pola URL dimana serv

membuat semu

 

h yang tel

semua URL me-reque

 

 akan ditan

 

berbagai pemetaan servlet. 

 

<session-config>

Elemen ini mende

 

<welcome-file-li

m

request ke 

 

 http://[host]:[port]/FirstServletProject 

 

akan menyebabkan file yang didefinisikan di sini untuk di-load 

 

 

 

 

 

 

Basic Servlets 23

J.

 

 

 

Lebih dari satu file yang dapat ditetapkan dalam list ini. Hanya satu yang dapat muncul pertama 

.1.4.2 Packaging aplikasi web 

lika

ubah iinstal ke 

ke container web. 

 

 

 

2

 

Mari kita lihat lagi pada struktur dari aplikasi web sebagai perintah oleh spesifikasi servlet : 

 

 

 

Ap si kita dapat dideploy ke server menggunakan struktur file ini, atau sebagai file JAR yang 

 yang dinamakan file WAR. File WAR lebih padat dan portabel; mereka dapat ddi

dalam berbagai container yang mengikuti spesifikasi Servlet. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Basic Servlets 24

J.

 

 

 

2.1.4.3 Me-generate file WAR dari project Enterprise yang ada 

 

Sangat sederhana untuk menghasilkan file WAR yang berisi aplikasi web kita dari project yang 

da dalam Sun Studio Enterprise 8. Ini semudah klik kanan pada nama project dalam view 

roject, dan  memilih Build Project. Kemudian IDE akan memproses ke package aplikasi Anda. 

E akan menginformasikan Anda jika operasi build sukses, sebaik menginformasikan Anda lokasi 

ari pembuatan file WAR. 

a

P

 

 

 

 

 

ID

d

 

Basic Servlets 25

J.

 

 

 

 

2.1.5 Pengenalan Ant 

 

Disamping dari penggunaan IDE untuk package aplikasi web, kita juga dapat menggunakan build 

tool yang dapat secara otomatis bagi kita dalam proses compilation dan packaging. 

 

Build tool yang diterima secara luas oleh industri yaitu Ant. Ant adalah project yang open source 

dari Apache Software Foundation, dan dapat didownload dari 

  

http://ant.apache.org

a pada dasarnya mendefinisikan aktifitas logis yang dapat dimuat oleh 

ild. Target ini disusun dari satu atau lebih task yang mendefinisikan rincian bagaimana 

target menjalankan aktivitasnya. 

 

 

 

 

 

 

 

 

 

  

Pada dasarnya, Ant membaca dalam file build (secara tradisionil bernama build.xml). File build ini 

terbuat dari target, diman

file bu

Basic Servlets 26

J.

 

 

Build file dapat menjalankan task compilation dan packaging termasuk courseware dan dapat 

ditemukan dalam direktori samples/blankWebApp. 

persyaratan pada build file : 

 

1. Build file harus ditempatkan dalam struktur direktori root project yang direkomendasikan oleh 

Apache Software Foundation untuk pengembangan aplikasi web. 

2. Sebagai tambahan, harus ada direktori lib dalam project root yang akan berisi semua 

dependencies JAR dari aplikasi 

3. Harus ada file yang bernama build.properties dalam direktori yang sama sebagai script build 

dan harus berisi nilai dari properti-properti berikut : 

4. app.name – nama dari aplikasi/project 

5. appserver.home – direktori instalasi dari instance Sun Application Server 8.1 

 

 

Berikut ini struktur direktori yang direkomendasikan untuk pengembangan aplikasi web : 

 

 

 

Struktur direktori dibuat terpisah dari struktur direktori yang diminta oleh spesifikasi servlet. 

empunyai struktur direktori terpisah dari Apache : 

 Isi dari direktori source lebih mudah diadministrasi, dipindah, atau di-backup jika versi 

rce (tidak ada 

Berikut keuntungan-keuntungan m

deployment tidak intermixed. 

● Kontrol source code lebih mudah diatur pada direktori yang berisi hanya file sou

class yang di-compile, dsb). 

● File-file yang membuat distribusi mampu diinstal dari aplikasi lebih mudah untuk dipilih ketik

terpisah. hirarki deployment 

  

 

Sekilas hal ini mungkin sedikit susah untuk dimengerti. Untuk dapat membantu mengerti hal ini, 

semua persyaratan untuk compile dan package contoh FirstServlet disediakan dalam direktori 

samples/FirstServlet. 

 

 

 

 

 

 

 

 

 

Basic Servlets 27

J.

 

 

Untuk melakukan packaging dari sebuah app menggunakan struktur ini, jalankan baris perintah 

berikut (dalam direktori yang sama yang berisi build file) 

ant dist 

Ini me-generate file WAR dan 

targ min yang disediakan oleh container. 

 

ontainer servlet biasanya berisi tool administratif yang dapat digunakan untuk men-deploy 

AR yang 

i-generate ke dalam Sun Application Server 8.1. 

 

• La

 

 

 

akan memanggil target dist dalam build file dimana akan 

menempatkannya ke dalam direktori dist. File WAR ini akan dapat di-generate ke dalam container 

et servlet menggunakan tool ad

 

 

2.1.6 Deployment ke dalam server. 

 

C

aplikasi web. Berikut kita akan mengikuti langkah yang diminta untuk men-deploy file W

d

ngkah pertama, log-in ke dalam console administratif. Ini dapat diakses dengan 

memasukkan URL berikut ke dalam browser Anda : http://localhost:[ADMIN_PORT] di

ADMIN_PORT adalah port yang dikonfigurasi selama instalasi untuk menangani permint

administratif. 

Kedua, klik kiri pada tab Web Application pada panel kiri, kemudian klik tombol 

yang ditemukan dalam panel kanan. 

mana 

aan 

• Deploy 

 

 

Basic Servlets 28

J.

 

 

 

 

• Dalam tampilan yang selanjutnya akan muncul, klik pada tombol Browse untuk memilih file 

WAR yang di-upload. Klik pada tombol Next pada kanan atas. 

• Klik pada tombol Finish pada tampilan berikutnya. 

• Selamat, aplikasi Anda sekarang telah di-deploy. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Basic Servlets 29

J.

 

 

 

Parameter Servlet dan Aplikasi 

 

ServletConfig 

 

Object ServletConfig adalah object yang dilewatkan ke servlet yang ditetapkan selama fase 

inisialisasi. Dengan menggunakan ini, servlet dapat menerima informasi khusus ke dirinya sendiri, 

seperti parameter inisialisasi. Juga, menggunakan object ServletConfig, servlet dapat memperoleh 

akses ke instance dari object ServletContext, dimana kita akan sedikit membicarakannya nanti. 

 

Penggunaan parameter inisialisasi sangat besar, terutama ketika berhubungan dengan informasi 

yang mungkin bervariasi dengan setiap deployment dari aplikasi. Juga, menyediakan beberapa 

data ke servlet sebagai parameter, berlawanan dengan hard-coding yang secara langsung ke 

dalam sevrlet, menyediakan deployer kemampuan untuk mengubah sifat servlet tanpa meng-

compile ulang kode. 

 

Kita dapat tambahkan parameter inisialisasi ke servlet dengan menspesifikasikannya ke dalam 

definisi servlet dalam descriptor deployment. Di bawah ini contohnya : 

 

... 

<servlet> 

    <servlet-name>FirstServlet</servlet-name> 

   <servlet-class>jedi.servlet.FirstServlet</servlet-class> 

   <init-param> 

       <param-name>debugEnabled</param-name> 

       <param-value>true</param-value> 

    </init-param> 

</servlet> 

... 

 

ontainer bahwa kita memulai dan mengakhiri 

efinisi servlet secara berturut-turut. <param-name> mendefinisikan nama dari parameter, dan 

param-value> mendefinisikan nilainya. 

ntuk memperoleh akses ke parameter servlet, servlet harus mendapat penanganan pertama 

ada object ServletConfig nya, dimana dapat dilakukan dengan memanggil method 

etServletConfig(). Setelah itu, nilai parameter dapat diterima sebagai String dengan memanggil 

ethod getInitParameter dan menyediakan nilai dari <param-name> sebagai parameter. 

 

Tag <init-param> dan </init-param> memberitahu c

d

<

 

U

p

g

m

 

 

 

 

 

 

 

 

 

 

 

Basic Servlets 30

J.

 

 

 

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, 

IOException { 

    ServletConfig config = getServletConfig(); 

    String isDebugEnabled = config.getInitParameter("debugEnabled"); 

    if (isDebugEnabled.equals("true") { 

       ... 

 

Di atas adalah contoh potongan kode yang mengilustrasikan prosedur. 

 

 

 

ServletContext 

Object ServletContext adalah object yang memberikan servlet akses ke context aplikasi. 

ntext aplikasi sebagai area dimana aplikasi berpindah. Area ini disediakan oleh 

container untuk setiap aplikasi web dengan setiap context aplikasi yang dipisah dari yang lainnya 

plikasi mungkin tidak mengakses context dari app lain. 

M arena dengan servlet ini dapat menerima 

. Juga dapat menyimpan data yang dapat 

komponen dalam aplikasi. 

 

 

yak cara yang sama parameter inisialisasi dapat disediakan untuk servlet individu, 

ediakan untuk digunakan oleh seluruh aplikasi. 

 

 

Anggap co

– sebuah a

 

empunyai akses ke context ini sangat penting k

parameter dan data aplikasi yang bermacam-macam

diterima oleh berbagai 

 

 

Parameter Aplikasi 

Dalam ban

mereka juga dapat dis

<context-param> 

    <param-name>databaseURL</param-name> 

    <param-value>jdbc:postgresql://localhost:5432/jedidb</param-value> 

</context-param> 

 

  

Ditunjukkan di atas contoh bagaimana menambah parameter aplikasi yang bermacam-macam. 

Elemen XML yang digunakan di sini adalah <context-param>. Setiap instance dari elemen yang 

endefinisikan parameter untuk digunakan oleh keseluruhan aplikasi. <param-name> dan 

param-value> bekerja dalam cara yang sama seperti <init-param>. 

ATAT : Sekali lagi, ingat bahwa mengurutkan elemen dalam descriptor deployment haruslah 

pat. Untuk menjaga file web.xml tetap valid, semua entri <context-param> harus ditempatkan 

EBELUM entri <servlet> apapun. 

rosedur untuk mendapatkan nilai parameter sangat mirip dengan yang digunakan untuk 

endapatkan parameter servlet-specific. Merupakan instance dari ServletContext yang servlet 

arus ditangani juga. Ini dapat didapatkan dengan memanggil method getServletContext() dari 

stance dari object ServletConfig dari servlet. 

m

<

 

C

te

S

 

P

m

h

in

Basic Servlets 31

J.

 

 

 

 

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, 

IOException { 

    ServletContext ctxt = getServletConfig().getServletContext(); 

    String jdbcURL = ctxt.getInitParameter("databaseURL"); 

    setURL(jdbcURL); 

.... 

 

 

 

 

2.2 Ringkasan 

n client. 

m method doGet atau doPost. 

Rincian request dapat diterima dari HttpServletRequest, dan method response-generating 

dapat diakses dari HttpServletResponse. Keduanya dilewatkan sebagai parameter ke doGet 

 servlet ke dalam container web, dapat di-load sebagai file WAR pre-

Mereka harus ditempatkan 

dalam direktori WEB-INF aplikasi dan harus mengikuti aturan yang pasti. 

pat disediakan pada aplikasi menggunakan descriptor deployment dan dapat 

lam instance ServletConfig atau ServletContext. 

 

 

• Servlet adalah solusi Java untuk menghasilkan content yang dinamis bagi web dan bagian dari 

CGI. 

• Servlet datang dengan berbagai keuntungan daripada CGI, termasuk mengurangi memory 

footprint dan lebih sedikit pengeluaran dengan setiap permintaa

• Servlet sepenuhnya diatur oleh containernya. Kebutuhan kode bagi developer salah satunya 

mengimplementasikan secara fungsional. 

• Untuk membuat servlet, developer akan membuat subclasses dari HttpServlet dan 

menempatkan implementasi fungsionalnya dala

 •

dan doPost. 

 Untuk men-deploy•

package. Proses packaging dapat dilakukan secara otomatis dengan IDE atau melalui 

penggunaan build tool. 

• Descriptor deployment adalah bagian yang perlu dari aplikasi. 

• Parameter da

diterima dengan menggunakan method da