Servlet 3 – Upload File


Pada artikel ini saya akan membahas tentang cara upload file (berkas) menggunakan Servlet 3. Saat ini upload file selalu digunakan pada jenis website apapun, seperti upload gambar photo profile, upload dokumen, dan lain-lain.

Untuk melakukan upload, kita perlu membuat sebuah halaman dengan form input yang menggunakan metode POST dan enctype-nya multipart/form-data, contoh :

<!doctype html>
<html>
    <head>
        <title>Upload File</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <form name="uploadform" action="UploadFile" method="POST" enctype="multipart/form-data">
            <input type="file" name="upload"/>
            <input type="submit" value="Upload"/>
        </form>
    </body>
</html>

Setelah itu, kita dapat membuat halaman Servlet 3 untuk menangani upload data file tersebut :

package khannedy.web.servlet;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
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.Part;

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

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        Part part = req.getPart("upload");

        String temp = part.getHeader("content-disposition").split(";")[2].trim();
        String filename = temp.substring("filename=\"".length(), temp.length() - 1);

        InputStream inputStream = part.getInputStream();
        FileOutputStream stream = new FileOutputStream(getServletContext().getRealPath("upload") + "/" + filename);

        int i = -1;
        while ((i = inputStream.read()) != -1) {
            stream.write(i);
        }

        stream.close();
        inputStream.close();

        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet SayHelloServlet</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<a href=\"upload/" + filename + "\">");
            out.println("Download Here");
            out.println("</a>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

hasilnya :

Screenshot-Upload File - Google Chrome

Screenshot-Upload File - Google Chrome

Screenshot-Servlet SayHelloServlet - Google Chrome

Screenshot-Servlet SayHelloServlet - Google Chrome

Iklan

Custom Validator dalam Java Server Faces 2


Java

Java

Salah satu hal yang sangat memudahkan untuk para pengguna Java Server Faces adalah kemudahan ketika melakukan proses validasi terhadap input yang dimasukkan oleh pengguna website. JSF mendukung pembuatan custom validator, dimana kita dapat membuat validator yang sesuai dengan yang kita inginkan.

Secara default, JSF memiliki validator untuk melakukan validasi seperti angka, tanggal, panjang input, dan lain-lain. Namun JSF tidak memiliki validator untuk melakukan proses validasi terhadap hal yang spesifik, misal validator untuk memvalidasi bahwa input masuk NIM harus sesuai dengan ketentuan Universitas 😀 Oleh karena itu, mau tidak mau, kita harus membuatnya secara manual. Namun pembuatan validator di Java Server Faces sangatlah mudah.

Membuat Kelas Validator

Validator dalam JSF direpresentasikan oleh sebuah interface Validator (javax.faces.validator.Validator), sehingga jika kita akan membuat Validator baru, maka kita harus membuat kelas yang mengimplementasi interface Validator tersebut. Misal saya akan membuat Validator untuk melakukan validasi Nim : Baca lebih lanjut

Membangun Website CRUD Menggunakan Java Server Faces dan MongoDB [1] Pengantar


 

MongoDB

MongoDB

 

Selamat datang di tutorial membangun website CRUD menggunakan Java Server Faces dan MongoDB. Pada artikel ini kita akan belajar membangun website CRUD (Create, Read, Update, Delete) menggunakan Java Server Faces dan sistem basis data MongoDB. Tutorial ini akan dibagi menjadi beberapa bagian, diantaranya :

  1. Pengantar
  2. Merancang Data Tier
  3. Merancang Logic Tier
  4. Merancang Presentation Tier
  5. Implementasi

Teknologi dan Alat yang Digunakan

Ada beberapa teknologi dan alat yang akan digunakan dalam tutorial ini, yaitu : Baca lebih lanjut

Ada Hal Baru Apa di Java Persistence API 2?


Tahu Java Persistece API kan? “

Bagi yang pernah mendalami dunia Java Enterprise Edition tentu tahu dengan Java Persistece API, atau lebih singkatnya dipanggil JPA

Baru beberapa bulan saja Java Enterprise Edition 6 Release, dan ternyata JPA pun sekarang sudah versi 2. Sebelumnya di Java Enterprise Edition 5, JPA adalah JPA 1, dan di Java Enteprrise Edition 4, JPA itu gabung dengan EJB.

To The Point Aja!

“Ada hal baru apa sih di JPA 2?”

BANYAK SEKALI!!!

Yang paling menarik adalah Collection Mapping, Criteria API dan Caching. Mari kita bahas satu-satu 😀

Collection Mapping

Pada versi 1, JPA tidak mendukung fitur collection mapping, apalagi kalo collection-nya adalah single field, seperti Integer, String dan sebagainya. Walaupun bisa, namun hanya Collection of Entity, dan itu juga harus ada relasi One-to-Many atau Many-to-Many.

Namun pada versi 2 saat ini, sekarang JPA sudah support Collection Mapping, baik itu menggunakan List, Set, ataupun menggunakan Map. Jadi biasanya pada versi 1 saya terbiasa menggunakan fitur Hibernate Framework untuk Collection Mapping, namun sejak versi 2, saya tidak perlu lagi menggunakan fitur Hibernate Framework. Jadi kita dapat dengan mudah menjalankan project JPA 2 di manapun, mau itu di Glassfish, JBoss ataupun Geronimo.

Criteria API

Jika anda pengguna Hibernate Framework pasti sudah familiar dengan yang namanya Criteria. Dan sekarang di JPA versi 2, kita juga sudah dapat menggunakan Criteria untuk melakukan Query. 

Apa itu Criteria API?”

Sederhana saja: biasanya jika kita akan melakukan query kita menggunakan JPQL (Java Persistece Query Language), seperti :

select a from Employee a where a.name like %eko

Artinya, kita tetap harus melakukan coding SQL untuk melakukan Query. Dan sejak versi 2 ini, kita tidak perlu membuat JPQL itu. Kita dapat dengan mudah menggunakan Criteria API untuk melakukan proses Query. Hal ini sangat berguna saat kita akan membuat Query yang dinamis.

Caching

Sebenarnya setiap JPA Implementation sudah memiliki Caching sejak JPA versi 1, baik itu EclipseLink, TopLink, Hibernate, semuanya sudah memiliki mekanisme Caching sendiri-sendiri. Lantas kenapa sekarang JPA versi 2 ada caching nya? Tentu harus, karena dengan JPA 2 mendukung Caching, itu artinya sekarang proses Caching untuk semua implementasi akan terstandarisasi.

Caching sangat berguna untuk optimisasi proses Query, dengan Caching, bahkan bisa saja kita melakukan Query ke database, namun sebenarnya kita tidak menyentuh sedikitpun ke database. Dan hal ini dapat membuat proses query menjadi lebih cepatCaching itu merupakan proses duplikasi data dari database ke memori, yang notabenenya proses hit ke database itu adalah mahal dibandingkan hit ke memori. Mahal dari segi Disk-IO sampai mahal dari segi Kecepatan

Kesimpulan

Itu hanya beberapa fitur yang baru, sebenarnya banyak sekali fitur baru di JPA, jadi kesimpulannya SAATNYA KITA BERALIH KE JPA VERSI 2

Java Enterprise 6 in Preview


sekarang Java Enterprise 6 dah mulai di release versi Previewnya, hmm sepertinya detik-detik releasenya JEE6 dah didepan mata nih 😀

kalo mo coba download versi Previewnya silahkan kesini :

Java Enterprise Edition 6

di JEE6 ini bakal banyak yang baru seperti :

  • EJB 3.1
  • WebBeans
  • JSF 2
  • JPA 2
  • Servlet 3

and many more, silahkan coba sendiri 😀