Jakarta Tomcat adalah web application server, yang mempunyai kemampuan sebagai Servlet container dan JSP container di mana kita bisa mendeploy Servlet dan JSP. Di atas Jakarta Tomcat, Servlet dan JSP akan bekerja melayani request dari client, yang lumrahnya adalah berupa browser.
Untuk bisa menjalankan Jakarta Tomcat, dibutuhkan Java Development Kit (JDK). Untuk instalasi Jakarta Tomcat, Anda bisa mendownload binary dari http://jakarta.apache.org , dalam format .zip, .tar.gz. Yang kita perlu lakukan hanyalah mendecompress file tersebut.
Dalam bekerja dengan Jakarta Tomcat, kita mempunyai sebuah directory yang dikenal sebagai TOMCAT_HOME. TOMCAT_HOME adalah directory dimana Jakarta Tomcat diinstall. Selanjutnya di bawah TOMCAT_HOME kita akan menemukan beberapa subdirectory, diantaranya bin/, conf/, logs/ dan webapp/. Di dalam subdirectory bin/ terdapat file-file executable terutama untuk menjalankan dan menghentikan Jakarta Tomcat. Di dalam subdirectory conf/ terdapat file-file untuk configuration. Di dalam subdirectory logs/ terdapat file-file log. Dan subdirectory webapp/ adalah di mana kita bisa meletakkan aplikasi Web yang kita bangun dengan Servlet dan JSP. Di bawah subdirectory webapp/ kita bisa mengcreate subdirectory. Sub directory ini akan dijadikan sebagai Context oleh Jakarta Tomcat.
Kita menjalankan Jakarta Tomcat dengan mengexecute startup.sh di subdirectory bin/. Sedangkan untuk menghentikan Tomcat kita mengexecute shutdown.sh di sub directory bin/ juga.
Secara default Jakarta Tomcat siap melayani request dari client melalui port 8080. Melalui Web browser, kita bisa menghubungi http://localhost:8080
Aplikasi WEB
Teknologi inti untuk mengembangkan aplikasi Web dengan Java adalah Servlet. Servlet adalah sebuah class yang digunakan untuk menerima request dan memberikan response, terutama melalui protokol HTTP. Anda menulis source code dari Servlet, lalu mengcompile dan mendeploy di java web server. Selanjutnya client dapat berinteraksi dengan Servlet melalui browser.
Servlet bisa dipandang sebagai class yang bisa digunakan untuk menulis response dalam format HTML. Ia ditulis sebagaimana lumrahnya sebuah class di dalam bahasa pemrograman Java. Servlet disimpan sebagai file .java. Untuk mengirimkan response dalam format HTML, Anda bisa menulisnya melalui obyek PrintWriter, yang didapatkan dari HttpServletResponse.
Dalam perjalananya, dikembangkan teknologi Java Server Page (JSP) dimana Anda bisa menulis script untuk aplikasi Web dengan bahasa Java. Berbeda dengan Servlet, JSP bisa dipandang sebagai HTML yang di dalamnya bisa mempunyai kode-kode Java. JSP disimpan sebagai file .jsp. Menulis JSP adalah seperti menulis file HTML, kecuali di dalamnya dapat disisipkan kode-kode Java sebagai presentation logic. Kode-kode Java ini disisipkan melalui directive, sebagai scriplet, atau sebagai expression.
Servlet dan JSP mempunyai kemampuan yang kembar. Keduanya bisa membaca input yang dikirimkan melalui form di Web, mengakses database melalui JDBC, mengolah data dan menulis response ke browser. Response lumrahnya dalam format HTML.
Perbedaan Servlet dan JSP lebih kepada proses pengembangannya. Sedangkan dalam operasinya, keduanya adalah sama. Oleh web application server, JSP akan direwrite menjadi Servlet, dicompile dan selanjutnya akan diperlakukan sebagaimana Servlet.
Cara Kerja Servlet
Servlet bekerja melayani request dari client, yang lumrahnya adalah Web browser. Untuk bisa melayani client, Servlet terlebih dahulu harus dideploy di web application server, yang menyediakan kemampuan sebagai Servlet container. Client memanggil Servlet dengan mengirimkan HTTP request ke web application server. HTTP request ini bisa di transfer dengan method GET, POST atau lainnya. Method GET selalu terjadi jika user membuka sebuah URL. Method POST bisa digunakan saat user mensubmit sebuah form.
Saat web application server menerima HTTP request dari client, ia akan menyerahkan request ini ke Servlet container. Servlet container akan mengcreate dua buah obyek yaitu obyek HttpServletRequest dan obyek HttpServletResponse. Obyek HttpServletRequest mengencapsulate HTTP request dari client, sedangkan obyek HttpServletResponse dipersiapkan untuk mengencapsulate HTTP response ke client.
Selanjutnya Servlet container akan menginvoke method dari Servlet dengan melewatkan dua obyek ini. Servlet yang diinvoke oleh Servlet container ditentukan oleh URL yang dikirimkan oleh Web browser, dan pemetaan yang dibuat melalui configuration. Dalam configuration dapat ditentukan bahwa URL dengan pola tertentu akan dilayani oleh Servlet tertentu.
Servlet bisa membaca data yang dikirimkan oleh client melalui obyek HttpServletRequest. Melalui obyek ini Servlet membaca parameter, cookies, dan juga informasi tentang client. Selanjutnya untuk mengembalikan response ke client, Servlet bias melakukannya melalui obyek HttpServletResponse. Lumrahnya Servlet menuliskan response dalam format HTML. Sebelum menuliskan response, Servlet terlebih dahulu bisa mengolah data yang dikirimkan oleh client, mengakses dengan database dan melakukan prosesproses lain.
Context
Sebuah Context adalah sebuah aplikasi Web yang terpisah, berdiri sendiri, independen. Sebuah Context mempunyai configuration masing-masing. Library dari sebuah Context juga tidak bisa dibaca oleh Context lain. Obyek di sebuah Context tidak bisa mengakses obyek di Context lain.
Di atas sebuah web application server seperti Jakarta Tomcat bisa dideploy lebih dari satu Context. Kita bisa membuat sebuah Context dengan mengcreate sebuah subdirectory di bawah TOMCAT_HOME/webapp/. Sebuah Context yang lengkap mempunyai subdirectory WEB-INF/ di mana terdapat web.xml yang merupakan configuration file dari Context ini. Di dalam WEBINF/ bisa terdapat subdirectory classes/ dan lib/.
Subdirectory classes/ adalah di mana file-file .class diletakkan, sedangkan lib/ adalah di mana file-file .jar, yang merupakan kumpulan file-file .class, diletakkan.
Java Servlet
Java Servlet ditulis sebagai lumrahnya Java class lain. Ia disimpan dalam file berekstension .java. Sebuah Java Servlet harus merupakan sub-class dari HttpServlet. Untuk melayani request dari client, kita perlu meng-override method service(). Parameter yang dilewatkan ke dalam method service() ini berupa obyek HttpServletRequest dan obyek HttpServletResponse.
Untuk lebih spesifik terhadap HTTP method, kita juga bisa mengoverride method doGet() dan atau doPost(). Kedua method ini mempunyai parameter yang sama dengan service().
Method doGet() akan dijalankan jika client mengirimkan HTTP request dengan method GET. Contoh dari method GET, adalah jika user meng click sebuah link di halaman Web. Dalam kasus ini, Web browser akan mengirimkan HTTP request dengan method GET ke server.
Method doPost() akan dijalankan jika client mengirimkan HTTP response dengan method POST. Ini terjadi misalnya, saat user mengisi HTML form dengan method POST, dan men-submit request tersebut ke server.
Di dalam method service(), doGet(), atau doPost() ini kita bisa membaca parameter yang dikirimkan client, mengolah data, mengakses database dan menulis response ke client. Servlet bekerja melayani request dari client, yang lumrahnya adalah Web browser. Untuk bisa melayani client, Servlet terlebih dahulu harus di deploy di web application server, yang menyediakan kemampuan sebagai Servlet container. Client memanggil Servlet dengan mengirimkan HTTP request ke web application server. HTTP request ini bisa di-transfer dengan method GET, POST atau lainnya. Method GET selalu terjadi jika user membuka sebuah URL. Method POST bisa digunakan saat user men-submit sebuah form.
Saat web application server menerima HTTP request dari client, ia akan menyerahkan request ini ke Servlet container. Servlet container akan mengcreate dua buah obyek yaitu obyek HttpServletRequest dan obyek HttpServletResponse. Obyek HttpServletRequest meng-encapsulate HTTP request dari client, sedangkan obyek HttpServletResponse dipersiapkan untuk meng-encapsulate HTTP response ke client.
Selanjutnya Servlet container akan meng-invoke method dari Servlet dengan melewatkan dua obyek ini. Servlet yang di-invoke oleh Servlet container ditentukan oleh URI yang dikirimkan oleh Web browser, dan pemetaan yang dibuat melalui configuration. Dalam configuration dapat ditentukan bahwa URI dengan pola tertentu akan dilayani oleh Servlet tertentu.
Servlet bisa membaca data yang dikirimkan oleh client melalui obyek HttpServletRequest. Melalui obyek ini Servlet membaca parameter, cookie,dan juga informasi tentang client. Selanjutnya untuk mengembalikan response ke client, Servlet bisa melakukannya melalui obyek HttpServletResponse. Lumrahnya Servlet menuliskan response dalam format HTML.
Sebelum menuliskan response, Servlet terlebih dahulu bisa mengolah data yang dikirimkan oleh client, mengakses dengan database dan melakukan proses-proses lain.
Deployment Servlet di Jakarta Tomcat
Untuk melakukan deployment, kita perlu mempunyai Context. Ini bisa dibuat dengan membuat subdirectory di bawah TOMCAT_HOME/webapp/. Untuk mendeploy Servlet, pertama kita meng-compile Servlet. Lalu meletakkan file-file .class ke sub-directory WEB-INF/classes di bawah directory yang dibuat untuk Context. Jika dibutuhkan kita bisa meletakkan file-file .jar di sub-directory WEBINF/lib. Selanjutnya kita bisa memanggil dari browser, sesuai Context dan nama Servlet yang telah kita buat.
Kita bisa juga meng-edit web.xml, di subdirectory WEB-INF/ di bawah directory dari Context kita. Melalui web.xml kita, di antaranya, bisa membuat mapping yang mengatur bahwa pola URL tertentu akan dilayani oleh Servlet tertentu.
Initialization
Kita bisa melakukan initialization terhadap Servlet sebelum Servlet melayani client.
1. init()
2. init(ServletConfig)
3. ServletConfig
4. getInitParameter()
5. getInitParameterNames()
HttpServletRequest
Class HttpServletRequest digunakan untuk meng-encapsulate HTTP request dari client. Untuk membaca parameter-parameter yang dikirimkan client, tersedia method-method getParameter(), getParameterNames() dan getParameterValues().
Untuk mendapatkan header dari HTTP request tersedia method getHeader(), dan membaca cookie tersedia method getCookie(). Untuk mendapatkan informasi tentang server di mana Servlet bekerja, tersedia method getServerName() dan getServerPort(). Untuk mendapatkan informasi tentang client yang memanggil Servlet, tersedia method getRemoteAddr(), getRemoteHost() dan getRemoteUser().
HttpServletResponse
Class HttpServletResponse digunakan untuk meng-encapsulate HTTP response yang dikirimkan Servlet ke client. Method getWriter() bisa digunakan untuk mendapatkan obyek PrintWriter. Method getOutputStream() bisa digunakan untuk mendapatkan obyek ServletOutputStream.
Melalui obyek PrintWriter atau ServletOutputStream, Kita bisa menuliskan response ke client. Obyek PrintWriter cocok jika response Kita adalah character, misal dalam format HTML, sedangkan obyek ServletOutputStream cocok jika response kita adalah binary, misalnya berupa graphics.
Method setHeader() bisa digunakan untuk menuliskan header, dan method setCookie() bisa digunakan untuk menuliskan cookie. Method setStatus() bisa digunakan untuk mengirimkan status code ke client.