Membuat Aplikasi Pertama Menggunakan Maven Archetype Quickstart

Membuat aplikasi menggunakan maven secara default, memberikan developer paket- paket opsional agar bisa memilih paket apa saja yang akan dikembangkan. Walaupun, maven sendiri memberikan keleluasaan developer dalam memilah dan memilih dependency maupun plugin yang akan digunakan dalam suatu aplikasi. Berikut langkah- langkah dalam membuat aplikasi menggunakan maven command

1. Buat direktori misalnya sampleapp. Lalu panggil perintah archetype generate

linux@linux $mkdir sampleapp
linux@linux $cd sampleapp
linux@linux $mvn archetype:generate 

mvn archetype:generate
2. Untuk pertama kali, maven akan mendownload daftar artifact yang masih belum ada dalam directory m2 kita

Download Repository

3. Setelah selesai mendownload, akan muncul pilihan artifact maven archetype quickstart

4.Selanjutnya akan ada inputan code interactive mode agar kita memasukkan informasi yang dibutuhkan oleh maven.

  • Define value for property ‘groupId ‘ : property untuk root package dari project)
  • Define value for property ‘artifactId ‘ : property untuk nama aplikasi
  • Define value for property ‘version’ : property untuk nomor versi aplikasi (bisa kosongkan secara default 0.0.1-SNAPSHOT)
  • Define value for property ‘package’ : property untuk nama application package
5. Selesai. Project bisa diimport kedalam IDE

Instalasi dan Konfigurasi Maven pada Fedora dan Windows

Proses instalasi dan konfigurasi maven dapat dibilang cukup mudah. Karena proses yang dilakukan sama degnan proses instalasi JAVA/ JDK pada umumnya. Mulai dari install, setup path dan test. Berikut langkah- langkah dalam instalasi java pada OS LINUX ( dist. yang saya gunakan Fedora ).

  1. Download Apache Maven
  2. Pada download page apache maven terdapat system requirement yang harus dipenuhi. Link download juga tersedia dalam bentuk binary dan source
  3. Let’s say hasil download maven terdapat pada ” /home/linux/APACHE_MAVEN”. Kemudian, extract file tersebut sehingga menjadi directory APACHE_MAVEN
  4. Lakukan setup path maven supaya console bisa mengenali direktori M2_HOME kita dengan cara :
    linux@linux $ export M2_HOME = /home/linux/APACHE_MAVEN
    linux@linux $ export PATH = /home/linux/APACHE_MAVEN/bin:${PATH}</pre>
    <pre>
  5. Lakukan test konfigurasi dengan cara :
    mvn --version

Berikut langkah- langkah yang instalasi dan konfigurasi maven pada OS Windows.

  1. Download Apache Maven
  2. Pada download page apache maven terdapat system requirement yang harus dipenuhi. Link download juga tersedia dalam bentuk binary dan source
  3. Let’s say hasil download maven terdapat pada “C:\Users\…\Downloads\Compressed\APACHE_MAVEN.zip”. Kemudian, extract file tersebut sehingga menjadi directory APACHE_MAVEN
  4. Lakukan setup path maven supaya console bisa mengenali direktori M2_HOME kita dengan cara
  5. Lakukan test konfigurasi dengan cara :
    mvn --version

 

Pengenalan Apache Maven

Apache Maven adalah sebuah software yang berguna sebagai build tools untuk membangun sebuah aplikasi JAVA. Sebagai build tools maven dapat diibaratkan seperti toolbox untuk membangun sebuah rumah yang bisa terdiri dari berbagai macam alat yang disatukan dalam satu tempat. Maven sudah dijadikan standar pembuatan aplikasi oleh banyak developer di dunia. Dasar dijadikannya maven sebagai standar pembuatan aplikasi adalah karena portabilitas, flexibilitas, dan efektifitas yang diberikan oleh maven untuk membangun sebuah aplikasi yang baik. Beberapa permasalahan umum yang biasa ditemui developer yang telah diberikan solusi oleh maven sbb :

  1. Multiple jars : banyaknya jar yang bertautan antar satu dengan yang lain memaksa developer untuk mencari satu persatu berikut memilah dan memilih supaya sesuai dengan kebutuhan project. Multiple jars, juga terkadang menyulitkan developer untuk mengimport project dari satu IDE dengan IDE yang lain dikarenakan kompatibilitas antar IDE yang berbeda.
  2. Dependency and version : Maven menangani permasalahan multiple jar dengan memberikan fasilitas dependency management. Selain itu, management version juga terkadang menjadi masalah developer untuk mengupgrade aplikasi dari versi sebelumnya. Hal ini, juga telah disediakan fasilitas oleh maven agar developer mudah mengatur versi sebuah aplikasi.
  3. Project structure : Setiap developer pasti memiliki style dan aturan masing- masing dalam membuat program. Hal ini, tentu menjadi masalah jika developer A ingin membagi projectnya dengan developer B karena developer B mau tidak mau harus mempelajari rule packaging dan letak- letak konfigurasi dalam program tersebut. Nah, dengan menggunakan maven, developer tidak perlu membuat aturan ataupun konfigurasi masing- masin. Maven telah membuat standar untuk berbagai macam jenis project. Jadi, walaupun pindah IDE ataupun platform project, maven memastikan agar struktur project tersebut seragam.
  4. Building, publishing and deploying : yup, untuk building pastilah maven bisa, namun bagaimana jika kita ingin mempublish project kita agar bisa reusable dan bisa digunakan oleh orang lain. Maven telah menyediakan fasilitas untuk mempublikasi project kita di  PUBLISH MAVEN.  Untuk deploy project , kita juga bisa menggunakan maven semisal menggunakan Jetty Server. Artinya, kita tidak perlu deploy project secara manual melalui console yang disediakan Application Server untuk deploy, namun kita bisa secara langsung menggunakan maven untuk melakukan proses deploy tersebut.
  5. Supported by All JAVA IDE : Karena maven telah digunakan sebagai standar internasional,  maka hampir seluruh IDE java yang populer seperti Eclipse, Netbeans, Intellij IDEA sudah mensupport project maven. Sehingga, jika kita ingin berpindah dari satu IDE ke IDE yang lain itu akan sangat mudah dilakukan.

Kesimpulannya, dengan menggunakan maven developer lebih dimanjakan dalam membuat aplikasi dengan fasiitas- fasilitas yang telah disediakan oleh maven. Maka dari itu, mulai dari sekarang

Menggunakan JSTL pada jsp

JSTL ( JSP Standard Tag Library ) merupakan standard tag yang digunakan oleh jsp untuk menggantikan tag scriplet, expression dan description pada jsp. Penggunaan JSTL memungkinkan developer untuk memproses request dan response menggunakan java secara langsung dalam jsp. Pembahasan kali ini mengenai jstl untuk menghandle pengiriman data dari servlet maupun file jsp lainnya. Untuk mengelola penerimaan data pada JSTL, dapat mengunakan tag . Berikut contoh penggunaan jstl untuk handling object.

User.java

package com.zisal.requestandattribute;


import java.io.Serializable;

public class User implements Serializable{
	
	private static final long serialVersionUID = -7218260160925418313L;
	
	private String name;
	private String address;
	private String phone;
	private String zip;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getZip() {
		return zip;
	}
	public void setZip(String zip) {
		this.zip = zip;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", address=" + address + ", phone="
				+ phone + ", zip=" + zip + "]";
	}	
}

File User.java dijadikan sebagai DTO (data transfer object) untuk menampung data.

Input.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Input</title>
</head>
<body>

	<form method="post" action="process.jsp">
		Name : <input type="text" name="name">
		<br />
		Address : <input type="text" name="address">
		<br />
		Phone : <input type="text" name="phone">
		<br />
		zip code : <input type="text" name="zip">
		<br />
		<input type="submit" value="send"> 
	</form>
</body>
</html>

File Input.jsp diatas digunakan untuk menerima inputan dari user kemudian dikirimkan menuju file process.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Process</title>
</head>
<body>
	<jsp:useBean id="user" class="com.zisal.requestandattribute.User" scope="request">
		<jsp:setProperty property="name" name="user" param="name"/>
		<jsp:setProperty property="address" name="user" param="address"/>
		<jsp:setProperty property="phone" name="user" param="phone"/>
		<jsp:setProperty property="zip" name="user" param="zip"/>
	</jsp:useBean>
	
	Name : <jsp:getProperty property="name" name="user"/>
	<br />
	Address : <jsp:getProperty property="address" name="user"/>
	<br />
	Phone : <jsp:getProperty property="phone" name="user"/>
	<br />
	Zip : <jsp:getProperty property="zip" name="user"/>
	<br />
	
</body>
</html>

File Process.jsp diatas digunakan untuk menerima request dari Input.jsp kemudian inputan tersebut diwrapping dalam bentuk object User dan ditampilkan menggunakan tag . Tag diatas, sebenarnya dapat digantikan dengan code berikut.

<jsp:setProperty property="*" name="user"/>

output :

Menggunakan RequestDispatcher pada Servlet dan JSP

RequestDispatcher dapat digunakan sebagai penerus data dari servlet menuju jsp. Apabila sebelumnya kita menggunakan session untuk menyimpan data dan memforward data tersebut menuju jsp. Kali ini kita akan menggunakan RequestDispatcher untuk meneruskan request dari suatu page menuju servlet kemudian langsung diproses oleh page receiver. Berikut contoh penggunaan RequestDispatcher

package com.zisal.loginapp;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Login
 */
@WebServlet(urlPatterns = "/Login")
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String userId = request.getParameter("userId");
		String password = request.getParameter("password");
		
		LoginService loginService = new LoginService();
		boolean result = loginService.authenticate(userId, password);
		if(result){
			request.setAttribute("user", loginService.getUserName(userId));
			RequestDispatcher dispatcher = request.getRequestDispatcher("Success.jsp");
			dispatcher.forward(request, response);			
		}else{
			response.sendRedirect("index.jsp");
		}
	}
}

Request dari page sebelumnya akan disimpan dalam attribut “user” kemudian akan diteruskan ke page Success.jsp melalui RequestDispatcher.

LoginDetail.jsp

<%@page import="com.zisal.loginapp.User"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
	<%
		User user =  (User) request.getAttribute("user");		
		if(user != null){
			out.println("<h3>You Logged in as ".concat(user.getUserName())+"</h3>");
		}
	%>
</body>
</html>

Pada LoginDetail.jsp, page tersebut akan menangkap request dari page lain dengan attribu “user”.

output :

Membuat Aplikasi MVC dengan Menggunakan Servlet

Konsep MVC ( Model, View Controller ) merupakan paradigma pemrograman yang memisahkan antara data layer pada model, presentation layer pada view dan business layer pada controller. Paradigma pemisahan ini ditujukan agar supaya pengembangan aplikasi menjadi lebih mudah, lebih terkontrol , reusable component dan memudahkan dalam proses maintenance. Secara teknis, aplikasi MVC dalam mengunakan servlet dipisah menjadi sebagai berikut. Model dibuat menggunakan standar POJO class, View dibuat menggunakan JSP, sedangkan controller dibuat menggunakan servlet untuk mengendalikan request dan response. Sehingga, servlet akan bekerja untuk mengambil data dari POJO class, kemudian menampikannya pada JSP. Berikut contoh aplikasi MVC menggunakan servlet.

Model = User.java

package com.zisal.loginapp;

import java.io.Serializable;

public class User implements Serializable{
	
	private static final long serialVersionUID = -7218260160925418313L;
	
	private String userId;
	private String userName;
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName + "]";
	}		
}

view awal = index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Index Page</title>
</head>
<body>
	<form action="Login" method="post">
		User Name : <input type="text" name="userId">
		<br />
		Password : <input type="password" name="password">
		<br />
		<input type="submit" value="Login">
	</form>
	
	<%@ include file="LoginDetail.jsp" %>
</body>
</html>

User akan menginputkan data kedalam form dalam index.jsp kemudian request tersebut akan diproses oleh servlet Login.java

package com.zisal.loginapp;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Login
 */
@WebServlet(urlPatterns = "/Login")
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String userId = request.getParameter("userId");
		String password = request.getParameter("password");
		
		LoginService loginService = new LoginService();
		boolean result = loginService.authenticate(userId, password);
		if(result){
			request.getSession().setAttribute("user", loginService.getUserName(userId));
			response.sendRedirect("Success.jsp");
		}else{
			response.sendRedirect("index.jsp");
		}
	}
}

Servlet Login.java tersebut akan memproses post method dari inputan form index.jsp Inputan userId, dan password kemudian akan diproses untuk autentikasi menggunakan class LoginService. apabila result = true, maka akan inputan tersebut akan disimpan dalam bentuk session dan page akan di-redirect menuju Success.jsp. jika result = false, maka page akan di-redirect ke halaman awal.

LoginService.java

package com.zisal.loginapp;

import java.util.HashMap;

public class LoginService {

	HashMap<String, String> users = new HashMap<String, String>();
	
	public LoginService() {
		users.put("admin", "admin application");
		users.put("user", "user application");
	}
	
	public boolean authenticate(String userName, String password){			
		if(userName == null || userName.trim() == "" || userName.length()<=0 ){		
			return false;
		}else{
			if(password == null || password.trim() == "" || password.length()<=0){
				return false;
			}else{
				return true;
			}
		}		
	}
	
	public User getUserName(String userId){
		User user = new User();
		user.setUserId(userId);	
		user.setUserName(users.get(userId));		
		return user;
	}
}

Pada LoginService.java secara default akan dipersiapkan 2 user (admin, user), kemudian terdapat method authenticate dan method getUSerName untuk memperoleh detail user object.

success.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Success Page</title>
</head>
<body>
	<h3>Login Successfull</h3>
	<%@ include file="LoginDetail.jsp" %>
</body>
</html>

LoginDetail.jsp untuk menangkap data session yang telah dibuat oleh servlet.

<%@page import="com.zisal.loginapp.User"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
	<%
		User user =  (User) session.getAttribute("user");		
		if(user != null){
			out.println("<h3>You Logged in as ".concat(user.getUserName())+"</h3>");
		}
	%>
</body>
</html>

output :

Menggunakan JSPInit dan InitParam

JSP dapat menggunakan inisiasi parameter yang dapat digunakan sebagai nilai awal sebuah parameter untuk mencegah exception. inisiasi parameter JSP dapat dilakukan dengan menggunakan deployment descriptor(web.xml) yang artinya inisiasi tersebut sudah diset sebelum aplikasi dijalankan. Berikut contoh inisiasi parameter jsp.
Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>ContohWeb</display-name>
  <welcome-file-list>
    <welcome-file>JSPInit.jsp</welcome-file>    
  </welcome-file-list>
  <servlet>
  	<servlet-name>JSPInit</servlet-name>
  	<jsp-file>/JSPInit.jsp</jsp-file>
  	<init-param>
  		<param-name>defaultUser</param-name>
  		<param-value>Default User Name</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>JSPInit</servlet-name>
  	<url-pattern>/JSPInit.jsp</url-pattern>
  </servlet-mapping>
</web-app>

dari sourcecode diatas, terdapat sebuah JSP dengan nama file JSPInit.jsp. konfigurasi servlet dari file tersebut adalah dengan nama init param “defaultUser” dengan nilai “Default User Name”.

JSPInit.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>JSP Init Param</title>
</head>
<body>
	<%!
		 public void jspInit(){
			String defaultUser = getServletConfig().getInitParameter("defaultUser");
			ServletContext context = getServletContext();
			context.setAttribute("defaultUser", defaultUser);
		} 
	%>
	
	Default User Servlet Config : <%=getServletConfig().getInitParameter("defaultUser") %>
	<br />
	Nilai variabel user setelah jspInit override : <%=getServletContext().getAttribute("defaultUser") %>
</body>
</html>

Output :

Berdasarkan source code diatas, initial parameter dapat diperoleh dengan getServletConfig().getInitParameter(“KEY”). Kemudian, method jspInit() digunakan untuk mengoverride parent class dari JSP itu sendiri agar supaya setiap class JSPInit diakses, initial parameter dapat dijadikan sebagai default parameter dalam servlet context.

Follow

Get every new post delivered to your Inbox.