Java itu hebat..
Buat bikin aplikasi desktop bisa. Aplikasi mobile bisa. Aplikasi web apalagi. Kehebatan Java disebabkan salah satunya oleh adanya banyak library dan framework siap pakai yang tersedia di Java untuk berbagai keperluan. Nah.. salah satunya adalah framework untuk pengembangan aplikasi web.
Spring MVC merupakan framework berbasis Model-View-Controller yang paling banyak digunakan yang tersedia pada platform Java Enterprise Edition. Kalau pada artikel terdahulu saya sudah menulis tentang konsep MVC secara umum serta contoh penerapannya menggunakan CodeIgniter maka pada tulisan ini saya akan mencontohkan penerapan MVC pada Java.
Akan tetapi tidak menggunakan framework apapun, alias murni menggunakan Java :D.
Masih belum percaya hebatnya Java? hehee..
Kita buat dulu aturan mainnya tentang pembagian tugas pada MVC
–View : Bagian ini diwujudkan dalam bentuk halaman web menggunakan JSP dan JSTL
–Controller : Bagian ini diimplementasikan dengan menggunakan Servlet yang berguna mengatur aliran request-response dan penghubung antara Model dan View
Pertama buatlah Controller menggunakan Servlet.
Pada method doGet() tambahkan logika untuk mengecek halaman apa yang sedang diakses oleh user sekaligus proses penangananya.
file : MahasiswaController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
package controller; import dao.MahasiswaDao; import java.io.IOException; import java.sql.SQLException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import model.Mahasiswa; public class MahasiswaController extends HttpServlet { MahasiswaDao mahasiswaDao; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { /*** Mendapatkan nilai parameter page yang menunjukkan halaman apa yang sedang diakses user ***/ String page=request.getParameter("page"); String view=null; mahasiswaDao=new MahasiswaDao(); /*** Proses Pengecekan Halaman Sekaligus Langkah Penanganannya ***/ if(page!=null){ if(page.equals("tambah")){ view="formTambah"; }else if(page.equals("edit")){ view="formEdit"; String nim=request.getParameter("nim"); Mahasiswa mahasiswa=mahasiswaDao.getMahasiswa(nim); request.setAttribute("mahasiswa", mahasiswa); }else if(page.equals("hapus")){ view="index"; String nim=request.getParameter("nim"); mahasiswaDao.hapusMahasiswa(nim); List<Mahasiswa> mahasiswas=mahasiswaDao.getAllMahasiswa(); request.setAttribute("mahasiswas", mahasiswas); } }else{ view="index"; List<Mahasiswa> mahasiswas=mahasiswaDao.getAllMahasiswa(); request.setAttribute("mahasiswas", mahasiswas); } /*** Mengarahkan Response Sesuai dengan Nilai Parameter Page ***/ String url="/WEB-INF/"+view+".jsp"; request.getRequestDispatcher(url).forward(request, response); } catch (SQLException ex) { Logger.getLogger(MahasiswaController.class.getName()).log(Level.SEVERE, null, ex); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } |
Saya contohkan, pada saat parameter page bernilai null, yaitu pada saat URL berbentuk seperti ini
1 |
http://localhost:8084/MvcNative/mahasiswa |
Maka kode penangananya adalah dibawah ini
1 2 3 |
view="index"; List<Mahasiswa> mahasiswas=mahasiswaDao.getAllMahasiswa(); request.setAttribute("mahasiswas", mahasiswas); |
Ini berarti view yang akan ditampilkan bernama index.
Model yang digunakan adalah mahasiswaDao yang menjalankan method getAllMahasiswa() untuk mendapatkan daftar mahasiswa yang kemudian disimpan pada variabel mahasiswas.
Variabel tersebut dikirmkan ke View untuk ditampilkan dengan menggunakan
1 |
request.setAttribute("mahasiswas", mahasiswas); |
Untuk proses penanganan request yang berupa POST kurang lebih sama.
Tinggal tambahkan kode pengecekan pada method doPost().
Oh iyaa hampir lupa, kita perlu menambahkan konfigurasi Servlet pada web.xml atau menggunakan annotation terserah sesuka kalian.
file : web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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_3_0.xsd"> <servlet> <servlet-name>Mahasiswa</servlet-name> <servlet-class>controller.MahasiswaController</servlet-class> </servlet> <servlet-mapping> <servlet-name>Mahasiswa</servlet-name> <url-pattern>/mahasiswa</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app> |
Selanjutnya kita buat Model-nya.
Kelas ini yang bertanggung jawab mengenai masalah interaksi dengan database. Controller hanya tahu beresnya sadja dan View hanya tahu cara menamplikannya sadja jadi jangan dicampuradukkan seperti es campur ya hehee.. 😀
file : MahasiswaDao.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
package dao; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import model.Mahasiswa; public class MahasiswaDao { MysqlDataSource dataSource; Connection connection; public MahasiswaDao() throws SQLException{ dataSource=new MysqlDataSource(); dataSource.setServerName("localhost"); dataSource.setUser("root"); dataSource.setPassword(""); dataSource.setDatabaseName("MvcNative"); connection=dataSource.getConnection(); } public void tambahMahasiswa(Mahasiswa mahasiswa) throws SQLException{ PreparedStatement ps=connection.prepareStatement("INSERT INTO mahasiswa values(?,?,?,?,?)"); ps.setString(1, mahasiswa.getNim()); ps.setString(2, mahasiswa.getNama()); ps.setInt(3, mahasiswa.getUmur()); ps.setString(4, mahasiswa.getAsalSekolah()); ps.setString(5, mahasiswa.getAlamat()); ps.execute(); } public List<Mahasiswa> getAllMahasiswa() throws SQLException{ List<Mahasiswa> mahasiswas=new ArrayList<Mahasiswa>(); PreparedStatement ps=connection.prepareStatement("SELECT * FROM mahasiswa"); ResultSet rs=ps.executeQuery(); while(rs.next()){ Mahasiswa mahasiswa=new Mahasiswa(); mahasiswa.setNim(rs.getString("nim")); mahasiswa.setNama(rs.getString("nama")); mahasiswa.setUmur(rs.getInt("umur")); mahasiswa.setAsalSekolah(rs.getString("asal_sekolah")); mahasiswa.setAlamat(rs.getString("alamat")); mahasiswas.add(mahasiswa); } return mahasiswas; } public Mahasiswa getMahasiswa(String nim) throws SQLException{ PreparedStatement ps=connection.prepareStatement("SELECT * FROM mahasiswa where nim=?"); ps.setString(1, nim); ResultSet rs=ps.executeQuery(); Mahasiswa mahasiswa=new Mahasiswa(); while(rs.next()){ mahasiswa.setNim(rs.getString("nim")); mahasiswa.setNama(rs.getString("nama")); mahasiswa.setUmur(rs.getInt("umur")); mahasiswa.setAsalSekolah(rs.getString("asal_sekolah")); mahasiswa.setAlamat(rs.getString("alamat")); } return mahasiswa; } public void updateMahasiswa(Mahasiswa mahasiswa) throws SQLException{ PreparedStatement ps=connection.prepareStatement("UPDATE mahasiswa set nama=?,umur=?,asal_sekolah=?," + "alamat=? where nim=?"); ps.setString(1, mahasiswa.getNama()); ps.setInt(2, mahasiswa.getUmur()); ps.setString(3, mahasiswa.getAsalSekolah()); ps.setString(4, mahasiswa.getAlamat()); ps.setString(1, mahasiswa.getNim()); ps.executeUpdate(); } public void hapusMahasiswa(String nim) throws SQLException{ PreparedStatement ps=connection.prepareStatement("DELETE FROM mahasiswa where nim=?"); ps.setString(1, nim); ps.executeUpdate(); } } |
Terakhir adalah membuat View.
Saya contohkan view index untuk menampilkan data Semua Mahasiswa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
<%-- Document : index Created on : Mar 17, 2013, 6:54:37 PM Author : awanlabs --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> <style type="text/css"> h1{ border-bottom: 1px solid appworkspace; } table,th,td{ border:1px solid activeborder; border-collapse: collapse; } table{ margin-top: 10px; } td{ font-family: helvetica; padding: 5px; } a{ text-decoration: none; } #tambah{ font-size: 18px; display: block; background: beige; width: 105px; padding: 5px; border: 1px solid activeborder; } #tambah:hover{ background: burlywood; } </style> </head> <body> <h1>Data Mahasiswa</h1> <a id="tambah" href="<c:url value="?page=tambah"/>">Tambah Data</a> <table> <thead> <tr> <th>Nim</th> <th>Nama</th> <th>Umur</th> <th>Asal Sekolah</th> <th>Alamat</th> <th>#</th> </tr> </thead> <tbody> <c:forEach items="${mahasiswas}" var="mahasiswa"> <tr> <td>${mahasiswa.nim}</td> <td>${mahasiswa.nama}</td> <td>${mahasiswa.umur}</td> <td>${mahasiswa.asalSekolah}</td> <td>${mahasiswa.alamat}</td> <td><a href="<c:url value="?page=edit&nim=${mahasiswa.nim}"/>">Edit</a> | <a href="<c:url value="?page=hapus&nim=${mahasiswa.nim}"/>">Hapus</a></td> </tr> </c:forEach> </tbody> </table> </body> </html> |
Kali ini cukup segini dulu.
Untuk contoh lengkap CRUD-nya akan saya tulis pada tulisan mendatang hehee 😀
Terimakasih mas Agung tutorial “Java : Bermain-main dengan MVC Tanpa Menggunakan Framework” mudah dimengerti, kalau bisa tolong dishare juga source codennya.thx sebelumnya..
source code barusan saya upload disini https://github.com/blinkawan/JavaMvcNoFramework
btw itu untuk DAO masih ada yang kurang tepat soal pengaturan connection-nya, nanti saya perbaiki. Jangan lupa di kroscek ulang
Sip ..thx mas Agung share codingnya