Mengubah Project Aplikasi Web Maven Menjadi Servlet 4
Pada project berbasis web yang di-generate menggunakan Apache Maven pada artikel sebelumnya, spesifikasi servlet yang digunakan adalah servlet 2.3, ini dapat diperhatikan pada file web.xml
,serta Project Facets di Project Properties. Sedangkan teknologi servlet terbaru saat tulisan ini dibuat sudah mencapai Servlet 4.1. ( Sedangkan Servlet 5 saat ini masih dalam tahap pengembangan oleh komunitas Eclipse Jakarta EE )
Kali ini, subrutin ingin menujukan kepada pembaca bagaimana mengubah project pertama maven yang semula menggunakan teknologi Servlet 2.3 menjadi Servlet 4.1. Untuk keperluan itu, diasumsikan pembaca sudah mengikuti artikel subrutin sebelumnya yang membahas tentang project aplikasi web menggunakan Apache Maven. Jika pembaca belum mengikuti seri tulisan sebelumnya, silahkan merujuk pada tautan berikut:
- Prasyarat
Pada tutorial ini, programmer diasumsikan sudah mengenerate aplikasi web menggunakan archetype-web-app
sekaligus mengimpornya kedalam Eclipse IDE, sebagaimana dibahas pada artikel berjudul Membangun Project Aplikasi Java Berbasis Web via Apache Maven (Bagian -1)
mvn archetype:generate -DgroupId=com.subrutin -DartifactId=hello-servlet-v4 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
- Servlet-api dan jsp-api
Setelah proses impor ke Eclipse IDE, akan muncul error berikut,
the superclass javax.servlet.http.httpservlet was not found on the java build path
Programmer dapat menambahkan dependensi berikut pada pom.xml
<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>4.0.3</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp/jakarta.servlet.jsp-api --> <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>2.3.6</version> <scope>provided</scope> </dependency>
Perhatikan disini, pom.xml
telah ditambahkan depedensi jsp-api
versi 2.3.6 dan servlet-api
versi 4. Berikutnya ubah web.xml
dengan schema servlet 2.5 menjadi seperti berikut
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>Archetype Created Web Application</display-name> </web-app>
Jalankan program tersebut menggunakan Apache Tomcat, aplikasi akan berjalan di browser pada http://localhost:8080/hello-servlet-v4
seperti gambar berikut
- Menghilangkan web.xml
Semenjak Apache Tomcat 7 (Servlet v3.x). Programmer dapat menghapus file web.xml
dan menggantinya dengan anotasi @WebServlet
sebagai deployment descriptor dari Servlet.
package com.subrutin.helloservlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/halo") public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); String title = "Halo Servlet"; String docType ="<!DOCTYPE html>"; out.println(docType+"<html><head><title>" + title + "</title></head>" + "<body>Halo ini servlet 4</body></html>"); } }
Perhatikan pada baris 12, dimana ditulis anotasi @WebServlet("/halo")
yang menandakan class HelloServlet
akan dipanggil oleh container saat URL /halo
diakses oleh pengguna. Bandingkan dengan spesifikasi sebelum menggunakan servlet 3, dimana programmer harus menuliskan deployment descriptor pada web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>hello-servlet</servlet-name> <servlet-class>com.subrutin.helloservlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello-servlet</servlet-name> <url-pattern>/halo</url-pattern> </servlet-mapping> </web-app>
Perhatikan perbedaan penulisan yang cukup signifikan antara penggunaan web.xml
dan anotasi, penggunaan anotasi @WebServlet("/halo")
dipandang lebih mudah dan lebih sederhana dibandingkan menggunakan tag xml