Pada kesempatan kali ini saya akan memberikan tutorial tentang membuat shopping cart dengan java servlet, hal ini diperlukan untuk anda yang ingin membuat toko online dengan java web.
Mungkin anda pernah mengunjungi sebuah situs toko online seperti tokopedia, lazada dan bukalapak. Dimana, mereka menggunakan sistem keranjang (cart) untuk setiap pemesanan yang dilakukan oleh pengunjung/pembeli.
Sistem shopping cart ini memang paling banyak di gunakan tidak hanya toko online diindonesia tetapi juga banyak digunakan situs-situs luar lainnya seperti amazon, ebay dsb.
Langsung saja ke tutorial cara membuat shopping cart dengan servlets dan JSP.
Membuat Shopping Cart dengan Java Servlet dan JSP
Prerequisite :
- Download library JSTL disini.
- Download library standard disini.
- Buat database dengan nama Latihan_addcart, lalu import dengan database berikut disini
Setelah di download semua, sekarang buat project baru di IDE anda, kali ini saya menggunakan netbeans sebagai editor.
- Buat project di netbeans, klik File – New Project buat nama dengan latihan_addCartDinamicÂ
- Lalu ekstrak library yang sudah didownload tadi dan jadikan satu dalam sebuah folder lib
- Lalu sekarang import keduanya dengan cara klik kanan pada Libraries lalu klik Add Jar/Folder lalu masukkan kedua library tersebut.
- buat 2 buat Source Packages baru dengan nama net.tutorialpedia.cart , net.tutorialpedia.Model , net.tutorialpedia.Controller. Lihat gambar!
- Pada package net.tutorialpedia.model buat sebuah java class baru dengan nama KoneksiDB. Lalu isi dengan code berikut ini :
package net.tutorialpedia.model; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; /** * * @author TutorialPedia.NET */ public class KoneksiDB { private Connection conn; private Statement st; public static void ambilKoneksi() { try { String db = "jdbc:mysql://localhost:3306/latihan_addcart"; String user = "root"; String pass = ""; Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection(db, user, pass); } catch (Exception x) { System.out.println("Terjadi kesalahan ambil koneksi : " + x); } } public void koneksi() { try { String db = "jdbc:mysql://localhost:3306/latihan_addcart"; String user = "root"; String pass = ""; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(db, user, pass); st = conn.createStatement(); } catch (Exception x) { System.out.println("Terjadi kesalahan koneksi : " + x); } } public void diskonek(ResultSet rs) { try { if (rs != null) { rs.close(); } st.close(); conn.close(); } catch (Exception x) { System.out.println("Terjadi kesalahan diskoneksi : " + x); } } public ResultSet ambilData(String sql) { ResultSet rs = null; try { koneksi(); rs = st.executeQuery(sql); } catch (Exception x) { System.out.println("Terjadi kesalahan ambil data : " + x); } return rs; } }
kode diatas digunakan untuk membuat koneksi antar program dan database
- Lalu buat java class baru pada net.tutorialpedia.Model dengan nama ProdukModel lalu isi kode dengan berikut :
package net.tutorialpedia.model; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; /** * * @author TutorialPedia.NET */ public class ProdukModel { String id_produk,kd_produk,nm_produk,harga_produk,qty; KoneksiDB db = null; public ProdukModel() { db = new KoneksiDB(); } public String getId_produk() { return id_produk; } public void setId_produk(String id_produk) { this.id_produk = id_produk; } public String getKd_produk() { return kd_produk; } public void setKd_produk(String kd_produk) { this.kd_produk = kd_produk; } public String getNm_produk() { return nm_produk; } public void setNm_produk(String nm_produk) { this.nm_produk = nm_produk; } public String getHarga_produk() { return harga_produk; } public void setHarga_produk(String harga_produk) { this.harga_produk = harga_produk; } public String getQty() { return qty; } public void setQty(String qty) { this.qty = qty; } public List tampil() { List data = new ArrayList(); ResultSet rs = null; try { String sql = "select * from produk order by kd_produk asc"; rs = db.ambilData(sql); while (rs.next()) { ProdukModel pm = new ProdukModel(); pm.setId_produk(rs.getString("id_produk")); pm.setKd_produk(rs.getString("kd_produk")); pm.setNm_produk(rs.getString("nm_produk")); pm.setHarga_produk(rs.getString("harga_produk")); pm.setQty(rs.getString("qty")); data.add(pm); } db.diskonek(rs); } catch (Exception a) { System.out.println("Terjadi kesalahaan tampil produk, pada :\n" + a); } return data; } }
- Sekarang kita beralih ke package Controller, buat sebuah servlet baru dengan nama CartController lalu isi kodenya dengan berikut ini :
package net.tutorialpedia.controller; import net.tutorialpedia.cart.CartBean; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class CartController extends HttpServlet { //public static final String addToCart public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String strAction = request.getParameter("action"); if(strAction!=null && !strAction.equals("")) { if(strAction.equals("add")) { addToCart(request); } else if (strAction.equals("Update")) { updateCart(request); } else if (strAction.equals("Delete")) { deleteCart(request); } } response.sendRedirect("Cart.jsp"); } protected void deleteCart(HttpServletRequest request) { HttpSession session = request.getSession(); String strItemIndex = request.getParameter("itemIndex"); CartBean cartBean = null; Object objCartBean = session.getAttribute("cart"); if(objCartBean!=null) { cartBean = (CartBean) objCartBean ; } else { cartBean = new CartBean(); } cartBean.deleteCartItem(strItemIndex); } protected void updateCart(HttpServletRequest request) { HttpSession session = request.getSession(); String strQty = request.getParameter("qty"); String strItemIndex = request.getParameter("itemIndex"); CartBean cartBean = null; Object objCartBean = session.getAttribute("cart"); if(objCartBean!=null) { cartBean = (CartBean) objCartBean ; } else { cartBean = new CartBean(); } cartBean.updateCartItem(strItemIndex, strQty); } protected void addToCart(HttpServletRequest request) { HttpSession session = request.getSession(); String strKd_produk = request.getParameter("kd_produk"); String strNm_produk = request.getParameter("nm_produk"); String strHarga = request.getParameter("harga"); String strQty = request.getParameter("qty"); CartBean cartBean = null; Object objCartBean = session.getAttribute("cart"); if(objCartBean!=null) { cartBean = (CartBean) objCartBean ; } else { cartBean = new CartBean(); session.setAttribute("cart", cartBean); } cartBean.addCartItem(strKd_produk, strNm_produk, strHarga, strQty); } }
- Sekarang beralih ke package net.tutorialpedia.cart lalu buat sebuah java class baru dengan nama CartBean, isi dengan kode berikut ini:
package net.tutorialpedia.cart; /** * * @author barbarian */ import java.util.ArrayList; public class CartBean { private ArrayList alCartItems = new ArrayList(); private int dblOrderTotal ; public int getLineItemCount() { return alCartItems.size(); } public void deleteCartItem(String strItemIndex) { int iItemIndex = 0; try { iItemIndex = Integer.parseInt(strItemIndex); alCartItems.remove(iItemIndex - 1); calculateOrderTotal(); } catch(NumberFormatException nfe) { System.out.println("Error while deleting cart item: "+nfe.getMessage()); nfe.printStackTrace(); } } public void updateCartItem(String strItemIndex, String strQty) { int dblTotalHarga = 0; int dblHarga = 0; int iQty = 0; int iItemIndex = 0; CartItemBean cartItem = null; try { iItemIndex = Integer.parseInt(strItemIndex); iQty = Integer.parseInt(strQty); if(iQty>0) { cartItem = (CartItemBean)alCartItems.get(iItemIndex-1); dblHarga = (int) cartItem.getHarga(); dblTotalHarga= dblHarga*iQty; cartItem.setQuantity(iQty); cartItem.setTotalHarga(dblTotalHarga); calculateOrderTotal(); } } catch (NumberFormatException nfe) { System.out.println("Error while updating cart: "+nfe.getMessage()); nfe.printStackTrace(); } } public void addCartItem(String strKd_produk, String strNm_produk, String strHarga, String strQty) { int dblTotalHarga = 0; int dblHarga = 0; int iQty = 0; CartItemBean cartItem = new CartItemBean(); try { dblHarga = Integer.parseInt(strHarga); iQty = Integer.parseInt(strQty); if(iQty>0) { dblTotalHarga = dblHarga*iQty; cartItem.setKd_produk(strKd_produk); cartItem.setNm_produk(strNm_produk); cartItem.setHarga(dblHarga); cartItem.setQuantity(iQty); cartItem.setTotalHarga(dblTotalHarga); alCartItems.add(cartItem); calculateOrderTotal(); } } catch (NumberFormatException nfe) { System.out.println("Error while parsing from String to primitive types: "+nfe.getMessage()); nfe.printStackTrace(); } } public void addCartItem(CartItemBean cartItem) { alCartItems.add(cartItem); } public CartItemBean getCartItem(int iItemIndex) { CartItemBean cartItem = null; if(alCartItems.size()>iItemIndex) { cartItem = (CartItemBean) alCartItems.get(iItemIndex); } return cartItem; } public ArrayList getCartItems() { return alCartItems; } public void setCartItems(ArrayList alCartItems) { this.alCartItems = alCartItems; } public double getOrderTotal() { return dblOrderTotal; } public void setOrderTotal(int dblOrderTotal) { this.dblOrderTotal = dblOrderTotal; } protected void calculateOrderTotal() { int dblTotal = 0; for(int counter=0;counter<alCartItems.size();counter++) { CartItemBean cartItem = (CartItemBean) alCartItems.get(counter); dblTotal+=cartItem.getTotalHarga(); } setOrderTotal(dblTotal); } }
- Tambahkan java class baru di package yang sama dengan CartBean.java buatlah dengan nama CartItemBean.java lalu isi dengan kode berikut:
package net.tutorialpedia.cart; public class CartItemBean { private String strKd_produk; private String strNm_produk; private int dblHarga; private int iQty; private int dblTotalHarga; public String getKd_produk() { return strKd_produk; } public void setKd_produk(String strKd_produk) { this.strKd_produk = strKd_produk; } public String getNm_produk() { return strNm_produk; } public void setNm_produk(String strNm_produk) { this.strNm_produk = strNm_produk; } public double getHarga() { return dblHarga; } public void setHarga(int dblHarga) { this.dblHarga = dblHarga; } public int getQty() { return iQty; } public void setQuantity(int qty) { iQty = qty; } public double getTotalHarga() { return dblTotalHarga; } public void setTotalHarga(int dblTotalHarga) { this.dblTotalHarga = dblTotalHarga; } }
- Sekarang kita sudah selesai dengan Model dan juga Controllernya langkah berikutnya adalah kita akan membuat view nya pada halaman JSP (Java Server Pages). Apa itu jsp? Baca: Pengertian JSP (Java Server Pages)
- untuk view cukup dengan 2 buah halaman jsp ini saja yaitu index.jsp dan Cart.jsp dimana index.jsp berfungsi untuk menampilkan daftar barang, dan Cart.jsp untuk menampilkan barang apa saja yang sudah ditambahkan/dibeli. Klik index.jsp lalu masukkan kode berikut ini :
<%@page import="java.util.List"%> <%@page import="java.util.ArrayList"%> <%@page import="net.tutorialpedia.model.ProdukModel"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Latihan AddCart | TutorialPedia.NET</title> </head> <body> <h2>Daftar Produk</h2> <% ProdukModel pm = new ProdukModel(); List<ProdukModel> data = new ArrayList<ProdukModel>(); String ket = request.getParameter("ket"); if (ket == null) { data = pm.tampil(); } for (int x = 0; x < data.size(); x++) { %> <table width="75%" border="1"> <tr> <td> <form name="ModelDetail" method="POST" action="CartController"> Kode Produk : <%=data.get(x).getKd_produk()%> <input type="hidden" name="kd_produk" value="<%=data.get(x).getKd_produk()%>"><br> Nama Produk : <%=data.get(x).getNm_produk()%><input type="hidden" name="nm_produk" value="<%=data.get(x).getNm_produk()%>"><br> Harga : <%=data.get(x).getHarga_produk()%> <input type="hidden" name="harga" value="<%=data.get(x).getHarga_produk()%>"><br> Stok : <%=data.get(x).getQty()%> <input type="hidden" name="harga" value="<%=data.get(x).getQty()%>"><br> Quantity :<input type="text" name="qty" value="1"/><br><br> <input type="hidden" name="action" value="add"> <input type="submit" name="addToCart" value="Add To Cart"> </form> </td> </tr> </table> <% }%> </body> </html>
- Untuk Cart.jsp tambahkan kode berikut:
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Latihan AddCart | TutorialPedia.NET</title> </head> <body> <%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%> <h1>Keranjang</h1> <table width="75%" border="1"> <tr> <td>Kode Produk</td> <td>Nama Produk</td> <td>Quantity</td> <td>Harga</td> <td>Total</td> </tr> <jsp:useBean id="cart" scope="session" class="net.tutorialpedia.cart.CartBean" /> <c:if test="${cart.lineItemCount==0}"> <tr> <td colspan="4"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">- Cart is currently empty -<br/> </tr> </c:if> <c:forEach var="cartItem" items="${cart.cartItems}" varStatus="counter"> <form name="item" method="POST" action="CartController"> <tr> <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><c:out value="${cartItem.kd_produk}"/></b><br/></td> <td> <c:out value="${cartItem.nm_produk}"/></font></td> <td> <input type='hidden' name='itemIndex' value='<c:out value="${counter.count}"/>'> <input type='text' name="qty" value='<c:out value="${cartItem.qty}"/>' size='2'> <input type="submit" name="action" value="Update"> <input type="submit" name="action" value="Delete"> </td> <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Rp. <c:out value="${cartItem.harga}"/></font></td> <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Rp. <c:out value="${cartItem.totalHarga}"/></font></td> </tr> </form> </c:forEach> <tr> <td colspan="2"> </td> <td> </td> <td></td> <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Subtotal: Rp. <c:out value="${cart.orderTotal}"/></font></td> </tr> </table> <p><a href="index.jsp" >Continue Shopping</a> </p> <p><a href="#" >Checkout</a></p> </body> </html>
Sekarang coba run project anda dengan cara klik kanan pada project Latihan_addCartDinamic – klik run.
Jika terdapat error seperti pada gambar berikut, itu dikarenakan kita belum mengimport library MySQL.
Cara import library MySQ
klik kanan pada libraries lalu klik Add Library cara libray MySQL JDBC Driver lalu klik Add LibraryÂ
Sekarang coba klik run.
Error tersebut sudah tidak muncul lagi, dan berikut ini adalah tampilan halaman depan.
ketika kita mencoba memilih produk yang diinginkan lalu memasukkan jumlah quantity yang diinginkan, maka dia akan tersimpan sementara pada halaman Cart.jsp
Membuat shopping cart seperti ini hampir sama dengan shopping cart pada umumnya, hanya saja ini versi paling simple yang bisa anda pelajari.
Demikian Membuat Shopping Cart dengan Java Servlet dan JSP.
Gan Saya mau bertanya di dalam barang kan terdapat stok, seharusnya kita hanya bisa membeli barang dengan stok yang tersedia dan tidak melebihi stok, dan langsung mengurangi stok pada database mysql
saya mau tanya, pada saat saya klik “Add To Cart”, tidak link ke cart.jsp, itu kenapa ya?
di cek lagi di controller nya
udah di cek berkali-kali tapi sama aja hasilnya
ko saya coba programnya error ya?
org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP
PWC6199: Generated servlet error:
source value 1.5 is obsolete and will be removed in a future release
PWC6199: Generated servlet error:
target value 1.5 is obsolete and will be removed in a future release
PWC6199: Generated servlet error:
To suppress warnings about obsolete options, use -Xlint:-options.
PWC6199: Generated servlet error:
package net.tutorialpedia.model does not exist
PWC6197: An error occurred at line: 20 in the jsp file: /index.jsp
PWC6199: Generated servlet error:
cannot find symbol
symbol: class ProdukModel
location: class org.apache.jsp.index_jsp
PWC6197: An error occurred at line: 20 in the jsp file: /index.jsp
PWC6199: Generated servlet error:
cannot find symbol
symbol: class ProdukModel
location: class org.apache.jsp.index_jsp
PWC6197: An error occurred at line: 20 in the jsp file: /index.jsp
PWC6199: Generated servlet error:
cannot find symbol
symbol: class ProdukModel
location: class org.apache.jsp.index_jsp
PWC6197: An error occurred at line: 20 in the jsp file: /index.jsp
PWC6199: Generated servlet error:
cannot find symbol
symbol: class ProdukModel
location: class org.apache.jsp.index_jsp
kalau errornya begitu kenapa gan?
ada beberapa library yang perlu ditambah gan.
library JSTL
library standard kan?
sudah saya tambahkan tapi masih, begitu bang.
saya kok error bergini ya ?
Terjadi kesalahaan tampil produk, pada :
java.lang.NullPointerException
sudah tak cari” referensi belum selai, apanya itu gan?