JENI 3 - 02 Servlet (1)

56

Click here to load reader

Transcript of JENI 3 - 02 Servlet (1)

Page 1: JENI 3 - 02 Servlet (1)

Versi 0.1

ServletServlet

Page 2: JENI 3 - 02 Servlet (1)

TujuanTujuanPada 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

Page 3: JENI 3 - 02 Servlet (1)

PengenalanPengenalan

Servlet merupakan Class dari bahasa pemrograman Java yang

digunakan untuk memperluas kemampuan dari server yang

diakses aplikasi host melalui model pemrograman Request-

Response.

Servlet mampu untuk :

◦ Mengimplementasi interface Servlet

◦ Menerima Request yang datang dari CLass Java, Web Client atau

Servlet lainnya

◦ Menghasilkan Response

Page 4: JENI 3 - 02 Servlet (1)

PengenalanPengenalan

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

Page 5: JENI 3 - 02 Servlet (1)

Common Gateway Interface Common Gateway Interface (CGI)(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

Page 6: JENI 3 - 02 Servlet (1)

Servlet vs CGIServlet 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

Page 7: JENI 3 - 02 Servlet (1)

Servlet vs CGIServlet 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.

Page 8: JENI 3 - 02 Servlet (1)

Contoh Program ServletContoh Program Servlet

Page 9: JENI 3 - 02 Servlet (1)

Penjelasan Program ServletPenjelasan Program Servlet

javax.servlet dan javax.servlet.http merupakan package yang menyediakan interface-interface dan class-class 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.

Page 10: JENI 3 - 02 Servlet (1)

Penjelasan Program Servlet Penjelasan Program Servlet (lanjutan)(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 HttpServletResponsememuat 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))

Page 11: JENI 3 - 02 Servlet (1)

Penjelasan Program Servlet Penjelasan Program Servlet (lanjutan)(lanjutan)

PrintWriter out = response.getWriter()

PrintWriter adalah object yang digunakan untuk mengeluarkan teks pada user

Page 12: JENI 3 - 02 Servlet (1)

Contoh Keluaran ProgramContoh Keluaran Program

Page 13: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai 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

Page 14: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai Servlet Pertama

Page 15: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai Servlet Pertama

Page 16: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai 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

Page 17: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai Servlet Pertama

Page 18: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai Servlet Pertama

Pada jendela baru, beri nama ServletPertama

Dan beri nama packagenya denganjeni.servlet

Page 19: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai Servlet Pertama

Page 20: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai Servlet Pertama

Page 21: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai 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).

Page 22: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai Servlet Pertama

Page 23: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai Servlet Pertama

Untuk memunculkan hasilnya pada Web Browser, project harus dijalankan, dengan cara :

Klik kanan pada nama project, kemudian pilih Run Project

Page 24: JENI 3 - 02 Servlet (1)

Memulai Servlet PertamaMemulai Servlet Pertama

Page 25: JENI 3 - 02 Servlet (1)

Siklus Hidup ServletSiklus Hidup Servlet

Siklus hidup Servlet menjelaskan bagaimana Servlet di-load, 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.

Page 26: JENI 3 - 02 Servlet (1)

Siklus Hidup ServletSiklus Hidup ServletInstantiationInstantiation

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.

Page 27: JENI 3 - 02 Servlet (1)

Siklus Hidup ServletSiklus Hidup ServletInitializationInitialization

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.

Page 28: JENI 3 - 02 Servlet (1)

Siklus Hidup ServletSiklus Hidup ServletInitializationInitialization

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.

Page 29: JENI 3 - 02 Servlet (1)

Siklus Hidup ServletSiklus Hidup ServletServiceService

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.

Page 30: JENI 3 - 02 Servlet (1)

Siklus Hidup ServletSiklus Hidup ServletServiceService

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)

Page 31: JENI 3 - 02 Servlet (1)

Siklus Hidup ServletSiklus Hidup ServletDestructionDestruction

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.

Page 32: JENI 3 - 02 Servlet (1)

Siklus Hidup ServletSiklus Hidup ServletGarbage CollectionGarbage Collection

Menangani requests dan responses

Tujuan utama dari sebuah servlet adalah untuk menyediakan content yang dinamik bagi user.

Dynamic content adalah sebuah content yang berubah-ubah 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.

Page 33: JENI 3 - 02 Servlet (1)

Form Data dan Parameter

getParameterContoh 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.

Page 34: JENI 3 - 02 Servlet (1)

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).

Page 35: JENI 3 - 02 Servlet (1)

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.

Page 36: JENI 3 - 02 Servlet (1)

Method getParameterNames

Fungsi : mengembalikan sebuah enumeration dari nama yang berasal dari elemen-elemen form yang telah digabungkan pada saat user me-request.

Page 37: JENI 3 - 02 Servlet (1)

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

Page 38: JENI 3 - 02 Servlet (1)

Mengambil kembali informasi dari sebuah URL request

Tabel berikut ini merepresentasikan hasil apabila kita memanggil method tersebut :

Page 39: JENI 3 - 02 Servlet (1)

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.

Page 40: JENI 3 - 02 Servlet (1)

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.

Page 41: JENI 3 - 02 Servlet (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> 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.

Page 42: JENI 3 - 02 Servlet (1)

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 <load – on – startup> (Pilihan) – mempunyai entri dan nilai dari elemen yang memberitahu container, servlet harus di-instantiate dan diinisialisasi pada startup container/aplikasi, dengan melewati aturan loading normal lazy.

Page 43: JENI 3 - 02 Servlet (1)

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 <url-pattern> - 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.

Page 44: JENI 3 - 02 Servlet (1)

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.

Page 45: JENI 3 - 02 Servlet (1)

Me-generate file WAR dari project Enterprise yang ada

Page 46: JENI 3 - 02 Servlet (1)

Me-generate file WAR dari project Enterprise yang ada

Page 47: JENI 3 - 02 Servlet (1)

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.

Page 48: JENI 3 - 02 Servlet (1)

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

Page 49: JENI 3 - 02 Servlet (1)

Ant

Struktur direktori yang direkomendasikan untuk pengembangan aplikasi web :

Page 50: JENI 3 - 02 Servlet (1)

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 di-compile,dsb)

o File-file yang membuat distribusi mampu diinstal dari aplikasi lebih mudah untuk dipilih ketika hirarki deployment terpisah.

Page 51: JENI 3 - 02 Servlet (1)

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.

Page 52: JENI 3 - 02 Servlet (1)

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 di-generate 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.

Page 53: JENI 3 - 02 Servlet (1)

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

Page 54: JENI 3 - 02 Servlet (1)

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.

Page 55: JENI 3 - 02 Servlet (1)

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.

Page 56: JENI 3 - 02 Servlet (1)

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 <context-param>. Setiap instance dari elemen yang mendefinisikan parameter untuk digunakan oleh keseluruhan aplikasi.

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

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