1. Buatlah struktur tabel di sebuah database MySQL,dengan struktur data seperti tampak gambar di bawah ini (misal nama database : dbpegawai2, nama tabel : staff, pada tutorial ini menggunaka tools : PHPMyAdmin)
    pic1
  2. Buatlah class DBKoneksi.java yang bertugas sebagai koneksi database MySQL dengan Java.
    import java.sql.*;
        import java.util.ResourceBundle;
        public class DBKoneksi {
         private Connection con;
         public DBKoneksi() {
         initDB();
         }
         public void initDB() {
         String dbuser = "nasrul";
         String dbpass = "rahasia";
         String dbname = "dbpos";
         String dbhost = "localhost";
         try {
         String url = "jdbc:mysql://" + dbhost + ":3306/" + dbname;
         Class.forName("com.mysql.jdbc.Driver");
         con = DriverManager.getConnection(url, dbuser, dbpass);
         } catch (Exception ee) {
         System.out.println("GAGAL KONEKSI DATABASE");
         ee.printStackTrace();
         }
         }
         public Connection getKoneksi() {
         try {
         if (this.con != null || this.con.isClosed()) {
         this.initDB();
         }
         } catch (SQLException ee) {
         ee.printStackTrace();
         }
         return this.con;
         }
         public void closeKoneksi() {
         try {
         if (this.con != null) {
         this.con.close();
         }
         } catch (SQLException ee) {
         System.out.println("GAGAL TUTUP KONEKSI");
         ee.printStackTrace();
         }
         }
        }
  3. Buat class Staff.java yang berfungsi sebagai Java Beans / POJO yang mempresetasikan field-field di tabel staff.
          import java.io.Serializable;
        public class Staff implements Serializable{
         //buat variabel u/ mapping field di tabel staff
         private int id;
         String nama;
         String alamat;
         String foto;
         //buat konstruktor
         public Staff() {
         }
         //buat method setter & getter dari variabel di atas
         public int getId() {
         return id;
         }
         public void setId(int id) {
         this.id = id;
         }
         public String getNama() {
         return nama;
         }
         public void setNama(String nama) {
         this.nama = nama;
         }
         public String getAlamat() {
         return alamat;
         }
         public void setAlamat(String alamat) {
         this.alamat = alamat;
         }
         public String getFoto() {
         return foto;
         }
         public void setFoto(String foto) {
         this.foto = foto;
         }
        }
  4. Buat class DAOStaff.java yang berfungsi sebagai akses object yang di dalamnya terdapat fungsi-fungsi untuk menyimpan data ke database dan upload file.
           import java.sql.PreparedStatement;
        import java.sql.ResultSet;
        import java.sql.SQLException;
        import java.sql.Statement;
        import java.util.ArrayList;
        import java.util.List;
        
        public class DAOStaff {
         //koneksi db, panggil class koneksi db
         DBKoneksi dbkon = null;
         //konstruktor memanggil koneksi
         public DAOStaff() {
         this.dbkon = new DBKoneksi();
         }
         //fungsi2
         public List<Staff> getAll() {
         List<Staff> ls = new ArrayList<Staff>();
         String sql = "SELECT * FROM staff";
         try {
         //buat statement query
         Statement st = dbkon.getKoneksi().createStatement();
         //eksekusi dan tangkap hasilnya
         ResultSet rs = st.executeQuery(sql);
         //looping data staff
         //panggil model terlebih dahulu
         Staff obj = null;
         while (rs.next()) {
         obj = new Staff();
         //panggil kolom2 di model Staff
         obj.setId(rs.getInt("id"));
         obj.setNama(rs.getString("nama"));
         obj.setAlamat(rs.getString("alamat"));
         obj.setFoto(rs.getString("foto"));
         //masukan / tambahan ke data List Staff (ls)
         ls.add(obj);
         }
         //tutup koneksi
         rs.close();
         st.close();
         dbkon.closeKoneksi();
         } catch (Exception e) {
         e.printStackTrace();
         }
         return ls;
         }
         public void simpan(Staff obj) {
         //define query
         String sql = "INSERT INTO staff "
         + " (nama,alamat,foto)"
         + " VALUES (?,?,?)";
         try {
         //prepareStatement
         PreparedStatement ps = dbkon.getKoneksi().prepareStatement(sql);
         //mapping ke field staff
         ps.setString(1, obj.getNama());
         ps.setString(2, obj.getAlamat());
         ps.setString(3, obj.getFoto());
         ps.executeUpdate();
         //putus koneksi
         ps.close();
         dbkon.closeKoneksi();
         } catch (SQLException ex) {
         ex.printStackTrace();
         }
         }
        }

     

  5. Buat file jsp untuk form input data staff dan upload foto dengan proses form pada servlet ProsesStaff (misal : nama file : form_staff.jsp, asumsi form menggunakan CSS bootstrap)
           <h3>Form Staff</h3>
        <form class="form-horizontal well" method="POST" action="ProsesStaff" 
         enctype="multipart/form-data">
         
         Nama     
             
         </div>     
         Alamat     
             
         </div>     
         Foto     
             
         </div>     
        
              Simpan     
         </div>     </form>

    pic2

  6. Buat file servlet ProsesStaff.java untuk memproses input data staff dan proses upload file.
    Sebelum classnya tambahkan kode

    @MultipartConfig
      @MultipartConfig
        public class ProsesStaff extends HttpServlet {
         protected void processRequest(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
        ...
        }
    }
  7. Menangkap proses request form di method doPost pada class ProsesStaff di servlet
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
         //tentukan lokasi penyimpanan file foto
         String lokasi = new File("C:\\Users\\risbang\\Documents\\NetBeansProjects\\javaWebNasrul\\
         web\\images").getAbsolutePath();
         //tangkap request form
         final Part filePart = request.getPart("foto");
         String nama = request.getParameter("nama"); // ? 1
         String alamat = request.getParameter("alamat"); // ? 2
         String fileName = getFileName(filePart); // ? 3
    
         OutputStream out = null;
         InputStream filecontent = null;
         final PrintWriter writer = response.getWriter();
         try {
         out = new FileOutputStream(new File(lokasi + File.separator
         + fileName));
         filecontent = filePart.getInputStream();
         int read = 0;
         final byte[] bytes = new byte[1024];
        
         while ((read = filecontent.read(bytes)) != -1) {
         out.write(bytes, 0, read);
         }
         //panggil model
         DAOStaff dao = new DAOStaff();
         Staff obj = new Staff();
         //set field nama dari penangkapan di atas
         obj.setNama(nama); // ? 1
         obj.setAlamat(alamat); // ? 2 
         obj.setFoto(fileName); // ? 3 
         dao.simpan(obj);
         //jika telah selesai semua arahkan ke suatu halaman
         response.sendRedirect("index.jsp?hal=staff");
         // writer.println("New file " + fileName + " created at " + lokasi);
         LOGGER.log(Level.INFO, "File{0}being uploaded to {1}",
         new Object[]{fileName, lokasi});
         } catch (FileNotFoundException fne) {
         LOGGER.log(Level.SEVERE, "Problems during file upload. Error: {0}",
         new Object[]{fne.getMessage()});
         } finally {
         if (out != null) {
         out.close();
         }
         if (filecontent != null) {
         filecontent.close();
         }
         if (writer != null) {
         writer.close();
         }
         }
         }
  8. Tetap pada class ProsesStaff.java di servlet, setelah method doPost, buat method baru getFileName(), untuk mendapatkan nama filenya yang akan di simpan pada field foto di database.
    private String getFileName(Part part) {
         String contentDisp = part.getHeader("content-disposition");
         String[] items = contentDisp.split(";");
         for (String s : items) {
         if (s.trim().startsWith("filename")) {
         return s.substring(s.indexOf("=") + 2, s.length() - 1);
         }
         }
         return "";
         }
  9. Pada deployment descriptor (web.xml) pada servlet ProsesStaff, tambahkan proses upload file, seperti tampak kode di bawah ini :
            <servlet>
         <servlet-name>ProsesStaff</servlet-name>
         <servlet-class>nf.lp3.org.controller.ProsesStaff</servlet-class>
         <multipart-config></multipart-config>
         </servlet>
  10. Tampilkan data staff yang telah diinput dan foto staff yang telah diupload, pada file dataStaff.jsp
       <%@page import="java.util.*,nf.lp3.org.model.*" %>
        <%
        //ciptakan obj dari model DAOStaff 
        DAOStaff dao = new DAOStaff();
        //panggil fungsi menampilkan data staff
        List<Staff> daftarStaff = dao.getAll(); 
        %> 
        <h3>Data Staff</h3>
        <table class="table table-striped">
         <thead>
         <tr>
         <th>NO</th>
         <th>NAMA</th>
         <th>ALAMAT</th>
         <th>FOTO</th>
         </tr>
         </thead>
         <tbody>
         <%
         int no = 1;
         for(Staff data : daftarStaff){
         %>
         <tr>
         <td><%= no %></td>
         <td><%= data.getNama() %></td>
         <td><%= data.getAlamat()%></td>
         <td><img src="images/<%= data.getFoto() %>"/></td>
         </tr>
         <% 
         no++;
         } 
         %> 
         </tbody>
        </table>
  11. Setelah datanya berhasil disimpan ke database, akan tampak data dan foto yang telah berhasil diupload.
    pic3
  12. Berhasil, selamat mencoba. (nasrul)
Iklan