Monthly Archives: August 2015

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

Advertisements

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.

Request, Session dan Application Context dalam JSP

Persis seperti pendahulunya (servlet) karena jsp juga mengimplementasikan HTTPServlet dalam core nyaj maka dari itu memiliki kemampuan untuk memproses request, session dan application context. Namun kapabilitas ini, dapat langsung digunakan di dalam page jsp tanpa harus bersentuhan dengan .java file, sehingga dapat mix langsung dengan html.
Berikut contoh penggunaan request, session dan application context dalam 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>Objects JSP</title>
</head>
<body>
	<%
		String userName = request.getParameter("userName");
		if(userName != null){
			session.setAttribute("userName", userName);
			application.setAttribute("userName", userName);			
		}
	%>
	<br />
	Request object is <%=userName %>
	<br />
	Session object is <%=session.getAttribute("userName") %>
	<br />
	Application object is <%=application.getAttribute("userName") %>
	<br />
</body>
</html>

output :

User mengakses path aplikasi tanpa request parameter


User mengakses path aplikasi dengan request parameter, sehingga param tersebut menjadi session dan context object

tanpa parameter 2


User mengakses path aplikasi tanpa request parameter, request menjadi null, namun session dan context object tetap ada


User mengakses path aplikasi pada browser lain (Google Chrome), request dan session bernilai null, karena session bersifat one per user/ machine, namun context object masih tetap ada karena container tersebut masih berjalan.

Page Directive JSP

Page directive dalam JSP yang dimaksudkan adalah memasukkan komponen lain diluar suatu page jsp. Page directive terdiri atas 2 macam yaitu untuk melakukan import terhadapat komponent- komponen java diluar page JSP dan untuk melakukan render page jsp lain kedalam suatu jsp.Berikut contoh penggunaan page directive jsp.
HelloWorld.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>Hello World JSP</title>
</head>
<body>
<%
	String a = "JSP USER";
	out.println("<h3>Hello World "+a+"<h3>");
%>
</body>
</html>

PageDirective.jsp

<%@ page import="java.util.Date"%>
<%@ 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>Page Directive</title>
</head>
<body>
	<%@include file="HelloWorld.jsp" %>
	<br /> the time is <%=new Date() %>
</html>

output