Servlet
Versi 0.1
Tujuan Pada akhir pembahasan, peserta diharapkan dapat: • • • • • • • • • • •
Memahami definisi, mengenalkan class-class yang dipakai, dan membuat program Servlet Mengenalkan teknologi Common Gateway Interface (CGI), menjelaskan perbedaan teknologi Servlet vs CGI Memulai pembuatan servlet pertama memakai Java Editor NetBeans Memahami dan menjelaskan siklus hidup Servlet Menjelaskan form data dan parameter Servlet Mengambil kembali informasi dari sebuah URL request Memahami informasi pada Header Konfigurasi dan packaging aplikasi web dan me-generate file WAR dari project Enterprise yang ada Memahami dan mengimplementasikan teknologi Ant Deployment kedalam Server Memahami parameter Servlet dan aplikasi
Pengenalan Servlet merupakan Class dari bahasa pemrograman Java yang digunakan untuk memperluas kemampuan dari server yang diakses aplikasi host melalui model pemrograman RequestResponse.
Servlet mampu untuk : ◦ Mengimplementasi interface Servlet ◦ Menerima Request yang datang dari CLass Java, Web Client atau Servlet lainnya ◦ Menghasilkan Response
Pengenalan Untuk membuat Servlet, ada Class-class pada package berikut yang harus di-import : ◦ javax.servlet - memuat framework servlet dasar ◦ javax.servlet.http. - digunakan sebagai extension dari framework Servlet bagi Servlet untuk menjawab HTPP Request
Common Gateway Interface (CGI) CGI memfasilitasi Server dengan sebuah interface bagi program eksternal, yang dapat dipanggil Server untuk menangani request dari Client. Setiap panggilan terhadap resource CGI akan menciptakan proses baru pada Server (Informasi dalam hal ini adalah program yang dilewatkan ke proses ini menggunakan input standar dan environment variable). Masalah dengan penggunaan CGI : ◦ Membutuhkan beban dalam jumlah banyak pada system resource ◦ Terbatasnya jumlah user yang dapat ditangani oleh aplikasi pada saat bersamaan
Servlet vs CGI Servlet didesain untuk mengatasi masalah yang ada pada CGI. Pada Servlet, hanya dibutuhkan satu proses yang dapat menangani semua Request (proses yang dibutuhkan oleh servlet container supaya berjalan). Servlet hanya sekali di-load ke memory ◦ Container me-load Servlet ke memory pada saat server startup ◦ atau pada saat servlet pertama kali dibutuhkan untuk melayani Client
Servlet vs CGI Perbedaan antara Servlet dan CGI: Servlet hanya di-load sekali ke memori,akan tetap berada disana, dan siap untuk menangani setiap request dari client. CGI akan melakukan proses load dan unload program dari dan ke dalam memori, setiap kali request dari Client datang.
Contoh Program Servlet
Penjelasan Program Servlet
javax.servlet dan javax.servlet.http merupakan package yang menyediakan interface-interface dan classclass untuk menulis Servlet.
Method doGet adalah method yang diwarisi dari HttpServlet. Method ini dipanggil oleh container ketika Request GET diberikan pada Servlet khusus.
Request GET dikirim oleh user, jika user ingin melihat keluaran dari Servlet.
Penjelasan Program Servlet (lanjutan) Pada contoh program, method doGet memiliki dua parameter Object HttpServletRequest menyediakan akses ke semua informasi yang berhubungan dengan Request dari Client, termasuk parameter value yang disertakan, HTTP request header, HTTP request method, dll
Óbject HttpServletResponse memuat method-method yang penting bagi developer untuk menghasilkan Response yang akan dikirim balik ke Client, termasuk method-method untuk mengatur HTTP response header, untuk mendeklarasi MIME type dari Response, termasuk juga method untuk mendapatkan instance dari class JavaI/O, yang dapat digunakan untuk menghasilkan keluaran.
Parameter di atas diciptakan dan di-maintain oleh container dan di-passing ketika container memanggil method doGet (cara kerjanya mirip dengan public static void main(String [] args))
Penjelasan Program Servlet (lanjutan) PrintWriter out = response.getWriter()
PrintWriter adalah object yang digunakan untuk mengeluarkan teks pada user
Contoh Keluaran Program
Memulai Servlet Pertama Menggunakan
Java editor NetBeans, buat project aplikasi web baru ◦ Pada Menubar, pilih File -> New Project ◦ Pilih kategori Web ◦ Pada bagian kanan, pilih Web Application
Memulai Servlet Pertama
Memulai Servlet Pertama
Memulai Servlet Pertama Untuk menambah Servlet ke aplikasi, klik kanan pada Source Package, pilih New -> Servlet atau Pada
menubar, pilih File -> New File. Pilih kategori Web, kemudian pilih Servlet
Memulai Servlet Pertama
Memulai Servlet Pertama Pada jendela baru, beri nama ServletPertama Dan beri nama packagenya dengan jeni.servlet
Memulai Servlet Pertama
Memulai Servlet Pertama
Memulai Servlet Pertama
IDE telah menciptakan dan mengimplementasikan sebagian method yang bernama processRequest.
Ada tanda "+" di bagian kiri bawah pada coding, jika di-klik, dapat dilihat bahwa ternyata method processRequest adalah method yang akan dipanggil oleh doGet dan doPost.
Content dari method processRequest membentuk fungsionalitas dasar dari Servlet.
Hapus semua content yang ada di dalam blok method processMethod. Kemudian copy-paste, content yang ada pada method doGet (pada contoh program Hello World yang ada pada slide sebelumnya).
Memulai Servlet Pertama
Memulai Servlet Pertama Untuk memunculkan hasilnya pada Web Browser, project harus dijalankan, dengan cara : Klik kanan pada nama project, kemudian pilih Run Project
Memulai Servlet Pertama
Siklus Hidup Servlet
Siklus hidup Servlet menjelaskan bagaimana Servlet diload, di-instansiasi, inisialisasi, menangani, dihancurkan dan akhirnya di-garbage collected.
Siklus hidup Servlet dikendalikan oleh Container tempat dimana Servlet tersebut dibangun.
Siklus hidup Servlet dapat menangani masalah pada performa dan resource yang dialami CGI, dan keamanan yang berhubungan dengan low level server API programming.
Siklus Hidup Servlet Instantiation
Pada tahap ini, servlet class di-load ke dalam memory, kemudian servlet container membuat instance dari class tersebut.
Sebuah servlet class di-load ke dalam memory, di-instantiated, dan di-inisialisasi hanya setelah sebuah request dibuat. (Lazy Loading)
Waktu start-up bagi aplikasi yang lebih cepat
Sedikit kelebihan beban untuk setiap panggilan pertama ke masing-masing servlet
Tiap servlet hanya sekali mengalami proses instantiation dalam siklus hidupnya, dimana overhead yang berkaitan dengan proses loading servlet class ke dalam memory hanya terjadi sekali.
Pada tahap ini, Container memanggil servlet constructor tanpa argument.
Siklus Hidup Servlet Initialization
Seperti halnya pada tahap Instantiation, Servlet melalui tahap initialization hanya sekali. Hanya setelah melalui tahap ini, object instance dapat disebut sebagai Servlet. Method yang dipanggil Container pada tahap ini adalah method init() public void init(ServletConfig config)
Instance dari object ServletConfig bertanggung jawab untuk menaikkan status dari sebuah class biasa menjadi suatu servlet.
Object ini memuat informasi konfigurasi servlet, dan menyediakan cara bagi servlet untuk dapat mengakses informasi dan fasilitas dari aplikasi melalui penggunaan object ServletContext.
Siklus Hidup Servlet Initialization
Code untuk konfigurasi atau initialisasi tidak diletakkan di constructor servlet melainkan pada method init.
Jika ada implementasi lebih lanjut pada method ini, maka super.init(config) harus dipanggil.
Setelah proses inisialisasi, servlet telah mampu untuk menangani request dari client.
Method ini hanya dapat dipanggil ketika rever me-reload servlet. Servlet tidak dapat me-reload sebuah servlet, kecuali server telah menghancurkan servlet tersebut menggunakan method destroy.
Siklus Hidup Servlet Service
Pada tahap ini, servlet dapat berulangkali dipanggil oleh container untuk menyediakan fungsionalitasnya.
public void service(ServletRequest req, ServletResponse res)
object ServletRequest dan ServletResponse di-passing ke method ini untuk menyediakan method untuk mengekstraksi informasi dari request user dan method untuk menghasilkan response.
servlet container melakukan pemanggilan method service menggunakan thread terpisah.
biasanya hanya ada satu servlet instance yang aktif, yang menempati memory, dan menangani banyak request.
Siklus Hidup Servlet Service pada
servlet turunan dari HttpServlet, method service tidak di-override langsung, melainkan ada beberapa method yang dapüat di-override . public void doGet(HttpServletRequest req, HttpServletResponse) public void doPost(HttpServletRequest req, HttpServletResponse) public void doPut(HttpServletRequest req, HttpServletResponse) public void doTrace(HttpServletRequest req, HttpServletResponse) Setiap method di atas berhubungan dengan method HTPP tertentu (GET, POST, dll)
Siklus Hidup Servlet Destruction
Pada saat sebuah servlet telah dihilangkan dari memori, hal ini akan disebut sebagai fase destruction
Ada waktu-waktu tertentu dimana sebuah servlet container akan berjalan out of memory, atau untuk mendeteksi jumlah dari memori yang tersisa dengan cara menghapus satu atau lebih instance servlet dari memori.
Servlet mana yang dikeluarkan dari memori ditentukan oleh servlet container dan hal ini tidak dapat langsung dikontrol oleh developer.
Sebuah container juga akan membebaskan instance servlet pada saat container tersebut di shut down.
Method yang akan dipanggil sebelum container tersebut selesai adalah method destroy().
Pada fase ini, servlet seharusnya mampu untuk secara eksplisit membebaskan resource yang harus dihandle seperti koneksi ke database dan sebagainya.
Siklus Hidup Servlet Garbage Collection
Menangani requests dan responses
Tujuan utama dari sebuah servlet adalah untuk menyediakan content yang dinamik bagi user.
Dynamic content adalah sebuah content yang berubahubah response-nya pada kondisi yang bervariasi.
Contoh dynamic content:kondisi request dari user, waktu, dan 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.
Form Data dan Parameter getParameter Contoh aplikasi yang me-respon kepada user dipresentasikan dalam bentuk form, adalah sebagai berikut ini :
Diberikan form diatas, yang mengambil nama user, dan kita ingin untuk memberikan response tertentu kepada nama user tersebut.
Method getParameter
Java telah menyediakan method getParameter didalam object HttpServletRequest.
Fungsi method getParameter : mengembalikan sebuah value dari elemen pertama dari nama yang diberikan.
Method ini akan mengambil sebuah parameter String (nama dari element form dimana valuenya dapat diambil kembali)
Method ini akan mengembalikan response sebuah String(sebuah value dari form elemen spesifik dari form).
Method getParameterValues Fungsi
: untuk mendapatkan semua value.
Method ini akan mengambil value dalam bentuk String sebagai nama dari elemen form, akan tetapi akan mempunyai nilai kembalian String array.
Method getParameterNames
Fungsi
: mengembalikan sebuah enumeration dari nama yang berasal dari elemen-elemen form yang telah digabungkan pada saat user merequest.
Mengambil kembali informasi dari sebuah URL request
Bagian-bagian dari URL Request : Http://[host]:[port]/[requestPath]?[queryString]
Host – request.getServerName() 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(). Query String – request.getQueryString()
Contoh request URL : http://www.myjedi.net:8080/HelloApp/greetUser?name=Jedi
Mengambil kembali informasi dari sebuah URL request
Tabel berikut ini merepresentasikan hasil apabila kita memanggil method tersebut :
Informasi pada Header
Informasi pada header bisa didapat dari dalam servlet dengan memanggil method-method berikut ini dari HTTPServletRequest: o getHeader(String name) – mengembalikan value dari spesifik header sebagai String. Jika spesifik header tidak ada, maka akan memiliki nilai kembalian null . o getHeaders(String name) – hampir sama dengan getHeader(), hanya jika ia mengembalikan semua value pada spesifik header sebagai objek enumeration. o getHeaderNames() – method ini akan mengembalikan sebuah objek enumeration dari semua header termasuk HTTP request. o getIntHeader(String name) – mengembalikan value dari spesifik header sebagai int. Jika spesifik header tidak tersedia, method ini akan memiliki nilai kembalian -1. o getDateHeader(String name) – mengembalikan value dari spesifik header sebagai sebuah long value yang merepresentasikan sebuah object Date. Jika header tidak dikonversikan menjadi sebuah Date, method ini akan mendapat IllegalArgumentException.
OUTPUT GENERATION
Method khusus lainnya dalam objek HttpServletResponse adalah : o setContentType – ini menginformasikan browserclient dari tipe MIME dari output mengenai penerimaan. Semua isi yang telah digenerate telah menjadi HTML. o GetOutputstream - method ini menerima instance dari object OutputStream yang dihubungkan dengan response kita ke user. Menggunakan OutputStream, kita dapat menggunakan object dan method Java I/O standar untuk menghasilkan semua jenis output.
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> Baris ini dijalankan sebagai kedua elemen root dari file konfigurasi yang mendeklarasikan(lewat atributnya) informasi utama untuk isi servlet sehingga dapat menjalankan file sabagai file descriptor deployment yang valid.
Konfigurasi Aplikasi Web
<servlet> Setiap instance dari elemen ini mendefinisikan pemetaan URL ke servlet. Berikut ini node anak yang dimiliki :
o <servlet-name> - nama logis yang disediakan oleh developer dimana akan digunakan untuk semua referensi yang akan datang ke servlet ini. o <servlet – class> - persyaratan nama class dari servlet yang harus dipenuhi. o (Pilihan) – mempunyai entri dan nilai dari elemen yang memberitahu container, servlet harus diinstantiate dan diinisialisasi pada startup container/aplikasi, dengan melewati aturan loading normal lazy.
Konfigurasi Aplikasi Web
<servlet-mapping> Setiap instance dari elemen ini mendefinisikan pemetaan URL ke servlet. Berikut ini node anak yang dimiliki : o <servlet-name> - nama logis dari servlet untuk dipetakan. o - pola URL dimana servlet ini akan dipetakan.
<session-config> Elemen ini mendefinisikan rincian konfigurasi untuk pengaturan session. <welcome-file-list> Elemen ini mendefinisikan komponen web yang akan secara otomatis di-load jika user memasukkan request untuk aplikasi tanpa menspesifikasi sumber yang utama.
Packaging aplikasi web
Struktur dari aplikasi web sebagai perintah oleh spesifikasi servlet :
Aplikasi dapat dideploy ke server menggunakan struktur file ini, atau sebagai file JAR yang diubah yang dinamakan file WAR. File WAR lebih padat dan portabel; mereka dapat diubah diinstal ke dalam berbagai container yang mengikuti spesifikasi Servlet.
Me-generate file WAR dari project Enterprise yang ada
Me-generate file WAR dari project Enterprise yang ada
Pengenalan Ant
Salah satu contoh build tool yang dapat secara otomatis 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.
Pada dasarnya, Ant membaca dalam file build (secara tradisionil bernama build.xml). File build ini terbuat dari target, dimana pada dasarnya mendefinisikan rincian bagaimana target menjalankan aktivitasnya.
Pengenalan Ant
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
Ant Struktur
direktori yang direkomendasikan untuk pengembangan aplikasi web :
Ant
Keuntungan mempunyai struktur direktori terpisah dari Apache : o Isi dari direktori source lebih mudah diadministrasi, dipindah, atau di-backup jika versi deployment tidak intermixed. o Kontrol source code lebih mudah diatur pada direktori yang berisi hanya file source (tidak ada kelas yang dicompile,dsb) o File-file yang membuat distribusi mampu diinstal dari aplikasi lebih mudah untuk dipilih ketika hirarki deployment terpisah.
Ant
Untuk melakukan packaging dari sebuah app menggunakan struktur ini, jalankan baris perintah berikut (dalam direktori yang sama yang berisi build file. ant dist
Ini akan memanggil target dist dalam build file dimana akan me-generate file WAR dan menempatkannya ke dalam direktori dist. File WAR ini akan dapat di-generate ke dalam container target servlet menggunakan tool admin yang disediakan oleh container.
Deployment ke dalam server
Container servlet biasanya berisi tool administratif yang dapat digunakan untuk men-deploy aplikasi web.
Langkah yang diminta untuk men-deploy file WAR yang digenerate ke dalam Sun Application Server 8.1 : ◦ Langkah pertama, log-in ke dalam console administratif. Ini dapat diakses dengan memasukkan URL berikut ke dalam browser Anda : http://localhost:[ADMIN_PORT] dimana ADMIN_PORT adalah port yang dikonfigurasi selama instalasi untuk menangani permintaan administratif. ◦ Kedua, klik kiri pada tab Web Application pada panel kiri, kemudian klik tombol Deploy yang ditemukan dalam panel kanan.
Deployment ke dalam server.
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
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. ◦ 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.
ServletContext
Object ServletContext adalah object yang memberikan servlet akses ke context aplikasi.
Anggap context aplikasi sebagai area dimana aplikasi berpindah.
Area disediakan oleh setiap container setiap aplikasi web dengan setiap context aplikasi dipisah dari yang lainnya
Mempunyai akses ke context ini sangat penting karena dengan servlet ini dapat menerima parameter dan data aplikasi yang bermacam-macam, menyimpan data yang dapat diterima oleh berbagai komponen dalam aplikasi.
Parameter Aplikasi
Dalam banyak cara yang sama parameter inisialisasi dapat disediakan untuk servlet individu, selain itu juga dapat disediakan untuk digunakan oleh seluruh aplikasi.
Elemen XML yang digunakan di sini adalah . Setiap instance dari elemen yang mendefinisikan parameter untuk digunakan oleh keseluruhan aplikasi.
<param-name> dan <param-value> bekerja dalam cara yang sama seperti .
Untuk menjaga file web.xml tetap valid, semua entri harus ditempatkan sebelum entri <servlet> apapun.