Servlet 3 – Penggunaan RequestDispatcher untuk Melakukan Forward Request


Dalam javadoc, RequestDispatcher merupakan :

Defines an object that receives requests from the client and sends them to any resource (such as a servlet, HTML file, or JSP file) on the server. The servlet container creates the RequestDispatcher object, which is used as a wrapper around a server resource located at a particular path or given by a particular name.

Dengan begitu, RequestDispatcher dapat kita gunakan untuk memforward request ke halaman lain, contohnya misal saat ini kita akan memcoba membuat sebuah halaman untuk manipulasi data Person, dimana hanya menggunakan sebuah Servlet. Misal saat pengguna membuka halaman :

Jika untuk melakukan render halaman dilakukan, maka hal ini akan sangat menyulitkan, oleh sebab itu ada baiknya jika kita membuat halaman daftar person dan create person pada file yang berbeda, misal kita membuat halaman list.html untuk menampilkan data seluruh person.

<!doctype html>
<html>
    <head>
        <title>List of Person</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <table border="1">
            <thead>
                <tr>
                    <th>Id</th>
                    <th>First Name</th>
                    <th>Last Name</th>
                    <th>Birthday</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>1</td>
                    <td>Eko Kurniawan</td>
                    <td>Khannedy</td>
                    <td>29 Desember 1988</td>
                </tr>
                <tr>
                    <td>1</td>
                    <td>Eko Kurniawan</td>
                    <td>Khannedy</td>
                    <td>29 Desember 1988</td>
                </tr>
                <tr>
                    <td>2</td>
                    <td>Eko Kurniawan</td>
                    <td>Khannedy</td>
                    <td>29 Desember 1988</td>
                </tr>
                <tr>
                    <td>3</td>
                    <td>Eko Kurniawan</td>
                    <td>Khannedy</td>
                    <td>29 Desember 1988</td>
                </tr>
                <tr>
                    <td>4</td>
                    <td>Eko Kurniawan</td>
                    <td>Khannedy</td>
                    <td>29 Desember 1988</td>
                </tr>
                <tr>
                    <td>5</td>
                    <td>Eko Kurniawan</td>
                    <td>Khannedy</td>
                    <td>29 Desember 1988</td>
                </tr>
            </tbody>
        </table>
    </body>
</html>

dan membuat halaman create.html untuk menampilkan form halaman input data person.

<!doctype html>
<html>
    <head>
        <title>Create New Person</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>Create New Person</h1>
        <form method="POST">
            <table>
                <tbody>
                    <tr>
                        <td>First Name :</td>
                        <td><input type="text" name="first_name"/></td>
                    </tr>
                    <tr>
                        <td>Last Name :</td>
                        <td><input type="text" name="last_name"/></td>
                    </tr>
                    <tr>
                        <td>Birthday :</td>
                        <td><input type="text" name="birthday"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value="Create"/></td>
                    </tr>
                </tbody>
            </table>
        </form>
    </body>
</html>

setelah itu baru buat servlet untuk menangani request browser.

package khannedy.web.servlet;

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;

@WebServlet(name = "Person", urlPatterns = {"/Person"})
public class PersonServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String action = request.getParameter("action");
        if (action == null) {
            action = "list";
        }

        if (action.equals("create")) {
            request.getRequestDispatcher("/WEB-INF/page/create.html").forward(request, response);
        } else if (action.equals("list")) {
            request.getRequestDispatcher("/WEB-INF/page/list.html").forward(request, response);
        } else {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
        }

    }
}

hasilnya adalah :

Screenshot-List of Person - Google Chrome

Screenshot-List of Person - Google Chrome

Screenshot-Create New Person - Google Chrome

Screenshot-Create New Person - Google Chrome

Iklan

Servlet 3 – Menyimpan Data ke Database MySQL Menggunakan JDBC


Pada artikel ini, saya menulis artikel tentang cara menyimpan data ke database MySQL menggunakan JDBC melalui servlet 3. Hal pertama yang perlu dilakukan adalah membuat database dan tabel di MySQL.

create database belajar;

use belajar;

create table barang(
     id integer primary key auto_increment,
     nama varchar(100) not null,
     harga_beli integer not null,
     harga_jual integer not null
)type=InnoDB;

Selanjutnya buatlah koneksi ke database yang telah dibuat, kita akan menggunakan WebListener untuk membuat koneksi tersebut.

package khannedy.web.listener;

import java.sql.Connection;
import java.sql.DriverManager;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ConnectionListener implements ServletContextListener {

    public static final String CONNECTION_KEY = "your_connection_key";

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/belajar", "root", "root");
            sce.getServletContext().setAttribute(CONNECTION_KEY, connection);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        try {
            Connection connection = (Connection) sce.getServletContext().getAttribute(CONNECTION_KEY);
            connection.close();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

Setelah itu buat halaman HTML untuk menampung input data yang akan dikirim ke servlet

<!doctype html>
<html>
    <head>
        <title>Menambah Data</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>Tambah Data Barang</h1>
        <form method="post" action="SaveData">
            <table>
                <tbody>
                    <tr>
                        <td>Nama</td>
                        <td><input type="text" name="nama"/></td>
                    </tr>
                    <tr>
                        <td>Harga Beli</td>
                        <td><input type="text" name="harga_beli"/></td>
                    </tr>
                    <tr>
                        <td>Harga Jual</td>
                        <td><input type="text" name="harga_jual"/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value="Process"/></td>
                    </tr>
                </tbody>
            </table>
        </form>
    </body>
</html>

Setelah itu, buat servlet dimana digunakan untuk melakukan proses simpan data ke database MySQL.

package khannedy.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
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 khannedy.web.listener.ConnectionListener;

@WebServlet(name = "SaveData", urlPatterns = {"/SaveData"})
public class SaveDataServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try {
            Connection connection = (Connection) getServletContext().getAttribute(ConnectionListener.CONNECTION_KEY);

            String sql = "insert into barang (nama, harga_beli, harga_jual) values (?, ?, ?);";

            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setString(1, request.getParameter("nama"));
            statement.setInt(2, Integer.parseInt(request.getParameter("harga_beli")));
            statement.setInt(3, Integer.parseInt(request.getParameter("harga_jual")));
            statement.executeUpdate();
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet SaveDataServlet</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Berhasil Menambah Data Barang</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

Hasilnya :

Screenshot-Menambah Data - Google Chrome

Screenshot-Menambah Data - Google Chrome

Screenshot-Servlet SaveDataServlet - Google Chrome

Screenshot-Servlet SaveDataServlet - Google Chrome

Screenshot-echo@echo-ubuntu: ~ - Terminal

Screenshot-echo@echo-ubuntu: ~ - Terminal