Archive

Posts Tagged ‘Java’

One Click Upload File pada JSP (Java Server Pages)

January 15th, 2009

jsp-logoDisini aku mencoba mengembangkan dan memodifikasi hasil surfing bersama om google untuk teknik “One Click Upload File“. Aku menggunakan JQuery untuk membuat teknik tersebut pada clientside, sebagaimana kita ketahui JQuery merupakan salah satu framework AJAX yang diminati dan populer saat ini, yang dilengkapi oleh plugin-plugin yang fantastik. Agar teknik One Click Upload ini bisa berjalan dengan baik aku menggunakan plugin  one-click upload.

Plugin tersebut bisa direview pada url http://www.michaelmitchell.co.nz/one-click-upload/ , pada url tersebut diberikan contoh untuk serverside menggunakan PHP, untuk itu aku mencoba menggunakan JSP (Java Server Pages) sebagai serverside yang bertugas untuk merespon request dan melakukan proses upload file ke server.

Demo aplikasi ini bisa dilihat disini

Berikut ini potongan dari penggunaan plugin one-click upload yang aku gunakan pada demo tersebut.

$(document).ready(function() {
 
	$('#upload').upload({
		name: 'file',
		method: 'post',
		enctype: 'multipart/form-data',
		action: '/FileUpload/doupload.jsp', //Ubah menjadi /FileUpload/Upload jika ingin mencoba servlet
		onSubmit: function() {
			$('#loading').show();
			$('#result').hide();
            $('#upload').hide();
		},
		onComplete: function(data) {
			$('#loading').hide();
			$('#result').html(data);
			$('#result').fadeIn('slow');
            $('#upload').fadeIn('slow');
		}
	});
 
})

Sedangkan untuk seversidenya sebagai berikut

<%@page contentType="text/html" pageEncoding="UTF-8" language="java"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
   <%@ page import="java.util.List" %>
   <%@ page import="java.util.Iterator" %>
   <%@ page import="java.io.File" %>
   <%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
   <%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
   <%@ page import="org.apache.commons.fileupload.*"%>
 
    <%
    String fullFile="";
    String realPath="";
    long sizerule = 102400; //(dalam byte) bisa diubah sesuai dengan kebutuhan
 
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
 
            if(!isMultipart){
                out.print("Request bukan multipart !!!<br>");
                return;
 
            }
 
               FileItemFactory factory = new DiskFileItemFactory();
               ServletFileUpload upload = new ServletFileUpload(factory);
               List items = null;
               try{
                   items = upload.parseRequest(request);
               }catch(FileUploadException e){}
 
               Iterator itr = items.iterator();
 
            while(itr.hasNext()){
                FileItem item = (FileItem) itr.next();
                if(item.isFormField()) {
                } else {
                    fullFile = item.getName().trim(); //Memperoleh nama_file.ekstensi
                    long filesize = item.getSize(); //Memperoleh ukuran file
 
                    //Memperoleh path tujuan upload
                    realPath = config.getServletContext().getRealPath("/") + "uploadedfile\\" + fullFile;
 
                    if(fullFile.trim().equals("")){
                       out.println("Inputan Anda masih kosong!!!<br>");
                    }else if(fullFile.indexOf(".jpg")==-1){
                       out.println("File Anda harus bertipe *.jpg <br>");
                    }else if(filesize > sizerule){
                       out.println("Ukuran file <b>"+fullFile+"</b> tidak boleh lebih dari "+
                                  (sizerule/1024)+" KB !!!<br>");
                    }else{
                            try {
                               File savedFile = new File(realPath);
                               item.write(savedFile);
                               out.print("File <b>"+fullFile+"</b> berhasil disimpan <br>");
 
                               /* File dihapus (buang saja/jadikan sebagai baris komentar pada
                                * bagian ini jika Anda ingin memperoleh/melihat hasil pada
                                * path tujuan upload)
                                */
                                new File(realPath).delete();
 
                            } catch (Exception ex) {
                                out.println("Gagal menyimpan file!!! <br>");
                                break;
                            }
                    }
                }
 
            }
%>

Sourcecode bisa diunduh disini

Untuk proses upload file aku memanfaatkan library commons-fileupload-1.2.1.jar dan commons-io-1.4.jar yang sudah aku sertakan pada file sourcecode.

Aku juga menyertakan sourcecode untuk servlet pada file yang Anda unduh tersebut jika ingin mencoba penanganan upload file pada serverside oleh servlet.

Selamat mencoba :wink:

Java, Javascript , , ,

Penerapan SQLite pada Java

January 14th, 2009

sqliteSebenarnya sudah lama aku ingin posting artikel ini, karena pikirku sudah banyak tutorial tentang SQLite pada pemrograman JAVA jadi aku urungkan untuk posting. Namun karena permintaan salah seorang temanku  akhirnya online juga nih postingan. :mrgreen:

Sebagaimana kita ketahui SQLite merupakan embedded database sifatnya serverless dan portable dimana semua data disimpan dalam satu file tunggal dan sudah pasti menggunakan perintah-perintah SQL untuk proses manipulasi data pada database tersebut.
Dari kelebihan tersebut menjadikan SQLite ini sangat populer dikalangan para developer software.

Untuk penggunaan SQLite pada pemrograman JAVA diperlukan SQLite JDBC Driver yang dapat diunduh pada situs http://zentus.com/sqlitejdbc/
Pada situs tersebut juga sudah memberikan contoh sederhana bagaimana cara penggunaan SQLite pada JAVA. Namun aku juga mencoba membuat Demo penggunaan SQlite pada JAVA yang diimplementasikan dalam aplikasi sederhana input data mahasiswa.

Screenshot :

sqlite1

sqlite2

Sourcecode demo tersebut bisa diunduh disini.

Selamat mencoba :wink:

Java ,

DFA(Deterministic Finite Automata) Simulator

December 21st, 2008

Topik ini aku tulis cuma pengen mereview tugas kuliahku beberapa hari yang lalu yaitu akudiberikan tugas untuk membuat sebuah DFA Simulator.

Sebenarnya topik yang membahas tentang DFA sudah sangat banyak sekali bertebaran di Internet, jadi aku cuma mengulas sedikit dan langsung ke intinya saja.

Sebagaimana kita tahu, DFA mempunyai ciri :
1. Tiap stata tidak boleh memiliki nilai transisi kosong.
2. Terdiri dari 1 transisi dari suatu stata pada 1 simbol masukan.

DFA terdiri 5 tupel (Q, Σ, δ, q0, F) yang terdiri dari:

1. Himpunan Hingga Stata (Q)
2. Himpunan Hingga Simbol Masukan (Σ)
3. Fungsi Transisi (δ : S × Σ → S)
4. Stata Awal (q0 ∈ Q)
5. Himpunan Stata Penerima (F ⊆ Q)

Disini aku asumsikan DFA dengan simbol M, dan berikut contoh sederhana dari DFA:
M = (S, Σ, T, s, A) dimana,

- S = {S1, S2}
- Σ = {0,1}
- s = S1
- A = {S1}
- T didefinisikan oleh tabel transisi berikut:

0 1
S1 S2 S1
S2 S1 S2

Sehingga diagram stata untuk  M jika digambarkan menjadi:

diagram stata

Suatu masukan diterima jika simbol masukan tersebut berhenti pada stata penerima.

Contoh kalimat yang diterima: 1010

Baiklah berikut ini DFA simulator sederhana dan sifatnya masih hardcode dan statis yang aku bikin dengan pemrograman JAVA, untuk mengimplementasikan contoh diatas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class DFA {
    public static void main(String[] args) {
        String input = "1010";
        String[] status = { "terima", "tolak" };
        int[][] next = { { 1, 0 },
                         { 0, 1 },
                       };
        int stata = 0;
 
        for (int i = 0; i < input.length(); i++) {
            stata = next[stata][Integer.parseInt(
				    String.valueOf(input.charAt(i)))];
        }
        System.out.println(status[stata]);
    }
}

Pada kode diatas Himpunan Hingga Stata direpresentasikan dalam bentuk index array, untuk index 0 merupakan stata S1 dan index 1 merupakan stata S2. Sedangkan Himpunan Hingga Simbol Masukan direpresentasikan dalam bentuk angka 0 dan 1.

Untuk versi lebih dinamis dari simulator diatas silahkan unduh disini

Java ,

Penetapan Zona Waktu Setempat

December 19th, 2008

Mungkin hal ini kelihatannya sepele, namun akan sangat diperlukan jika kita membangun suatu aplikasi berbasis web yang bergantung pada proses beracuan pada zona waktu pada suatu wilayah yang berada pada suatu negara.

Seringkali hal ini terlupakan, namun akan sangat fatal akibatnya yaitu waktu yang diinginkan tidak sinkron atau tidak sesuai dengan harapan. Syukur-syukur zona waktu yang kita maksud sama dengan zona waktu server hosting yang kebetulan server tersebut berada pada satu wilayah dengan kita. Namun jika lokasi server hosting tidak satu wilayah bahkan beda negara pastinya terjadi perbedaan zona waktu.

Untuk menghindari hal tersebut aku akan memberikan contoh cara penetapan zona waktu setempat dengan menggunakan JSP. Mungkin cara ini sudah banyak yang tahu, namun aku cuma ingin mereview saja.

Kita bisa menggunakan kelas java.util.TimeZone untuk melakukan penetapan zona waktu setempat. Pada kelas tersebut kita manfaatkan method setDefault untuk melakukan penetapan zona yang dikembalikan oleh method getDefault. Berikut ini contoh kodenya:

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
<html>
 <head>
    <title>TimeZone</title>
 <%@ page import="java.util.Calendar, java.util.TimeZone" %>
 </head>
 <body> 
<%!
  public String waktuSetempat(String zona){
    String AMPM;
    TimeZone tz = TimeZone.getDefault();
    TimeZone id = TimeZone.getTimeZone(zona);
    tz.setDefault(id);
	Calendar cal = Calendar.getInstance();
	if(cal.get(Calendar.AM_PM)==1)
		 AMPM = "PM";
	else
		 AMPM = "AM";
 
    String info = cal.get(Calendar.DATE)+"/"+
		      (cal.get(Calendar.MONTH)+1)+"/"+
		      cal.get(Calendar.YEAR)+" - "+
		      cal.get(Calendar.HOUR)+":"+
                      cal.get(Calendar.MINUTE)+":"+
		      cal.get(Calendar.SECOND)+" "+AMPM;
    return info;
  }
%>
<%
 out.print("Waktu Jakarta : ");
 out.println(waktuSetempat("GMT+07"));
 out.println("<br>");
 out.print("Waktu Tokyo : ");
 out.println(waktuSetempat("GMT+09"));
 out.println("<br>");
 out.print("Waktu Cairo : ");
 out.println(waktuSetempat("GMT+02"));
 out.println("<br>");
 out.print("Waktu Amsterdam : ");
 out.println(waktuSetempat("GMT+01"));
 out.println("<br>");
 out.print("Waktu Alaska : ");
 out.println(waktuSetempat("GMT-09"));
 out.println("<br>");
 out.print("Waktu Santiago : ");
 out.println(waktuSetempat("GMT-04"));
%>
</body>
</html>

Untuk output bisa dilihat disini

Java , ,

Paging ala om Google pada JSP

October 22nd, 2008

Mungkin sudah tidak asing lagi bagi Anda yang sering menyelam didunia web dengan istilah Paging. Namun pembuatan paging ini cukup membutuhkan sedikit usaha agar menjadi sangat dinamis dan indah. Setelah iseng-iseng surfing di internet akhirnya ketemu juga tag untuk paging di JSP. Berikut ini aku akan contohkan bagaimana membuat paging ala google.

Silahkan unduh file library pager-taglib.jar dan tag descriptor pager-taglib.tld
Letakan file pager-taglib.jar pada direktori /WEB-INF/lib dan file descriptor pager-taglib.tld pada direktori /WEB-INF
Kemudian pada file konfigurasi web.xml sertakan kode xml berikut:

<web-app>
 
  <taglib>
    <taglib-uri>
      http://jsptags.com/tags/navigation/pager
    </taglib-uri>
    <taglib-location>
      /WEB-INF/pager-taglib.tld
    </taglib-location>
  </taglib>
 
</web-app>

Untuk databasenya silahkan unduh terlebih dahulu disini.

Setelah itu ketikan kode berikut :
Read more…

Java ,

Taglib untuk manipulasi gambar pada JSP

October 21st, 2008

Taglib pada JSP mungkin sudah sering digunakan oleh Anda yang terbiasa dengan pemrograman tersebut. Berikut ini aku akan menjelaskan bagaimana taglib pada JSP digunakan untuk memanipulasi gambar. Jadi Anda tidak usah repot-repot menuliskan kode yang kompleks dan membutuhkan waktu banyak untuk melakukan editing foto ataupun gambar berbasis web.

Disini aku menggunakan jimagetaglib untuk tag manipulasi gambar tersebut. Anda dapat unduh disini , kemudian deploy jimagetaglib-0.5.1.war ke server tomcat Anda, setelah itu jalankan file test.jsp.
Jika server tomcat Anda tidak menyediakan tool untuk deploy, Anda bisa ekstrak file jimagetaglib-0.5.1.war pada sever tomcat kemudian pastikan :

  • File-file class dari jimagetaglib berada pada direktori /WEB-INF/classes
  • File descriptor jit-taglib.tld berada pada pada direktori /WEB-INF
  • Konfigurasi web.xml berada pada direktori /WEB-INF dan sudah seperti dibawah ini :
<web-app>
	<servlet>
	<servlet-name>DrawImageServlet</servlet-name>
	    <servlet-class>
            net.sourceforge.jimagetaglib.servlet.DrawImageServlet
            </servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>DrawImageServlet</servlet-name>
		<url-pattern>/jit</url-pattern>
	</servlet-mapping>
	<taglib>
		<taglib-uri>jit</taglib-uri>
		<taglib-location>/WEB-INF/jit-taglib.tld</taglib-location>
	</taglib>
</web-app>

Restart server tomcat Anda, kemudian jalankan.

Contoh penggunaan tag ini sebagai berikut:

Blur dan Gray filter dengan border = 1:

<jit:image src="/images/Younha.jpg" border="1">
   <jit:filter filter="net.sourceforge.jimagetaglib.filter.BlurFilter" />
   <jit:filter filter="net.sourceforge.jimagetaglib.filter.GrayFilter" />
</jit:image>

Hasil :

Posterize, Sharpen dan Threshold128 filter :

    <jit:image src="/images/Younha.jpg">
	<jit:filter filter="net.sourceforge.jimagetaglib.filter.PosterizeFilter" />
	<jit:filter filter="net.sourceforge.jimagetaglib.filter.SharpenFilter" />
	<jit:filter filter="net.sourceforge.jimagetaglib.filter.Threshold128Filter" />
    </jit:image>

Hasil :

Invert dan Sharpen filter kemudian resize dengan dimensi maksimum = 150 pixel (mempertahankan rasio) :

   <jit:image src="/images/Younha.jpg">
	<jit:filter filter="net.sourceforge.jimagetaglib.filter.InvertFilter" />
	<jit:filter filter="net.sourceforge.jimagetaglib.filter.SharpenFilter" />
	<jit:resize max="150" />
   </jit:image>

Hasil :

border = 1, Croping (x = 80, y = 25, width = 50 and height = 50), kemudian resize dengan dimensi maksimum = 150 pixel (berdasarkan gambar asli) :

    <jit:image src="/images/Younha.jpg" border="1">
	<jit:subimage x="80" y="25" width="50" height="50" />
	<jit:resize max="200" />
    </jit:image>

Hasil :

Contoh lengkap diatas dapat diunduh disini. Untuk mempelajari tag ini lebih lanjut silahkan kunjungi http://jimagetaglib.sourceforge.net/jit-taglib.tld.html

Selain taglib diatas Anda bisa juga menggunakan Image taglib cara penggunaannya bisa dilihat di http://www.servletsuite.com/servlets/imagetag.htm

Untuk memperoleh library ij.jar unduh disini, dan file descriptor taglib120.tld disini.

Java ,

Floating Point untuk J2ME MIDP 1.0

July 1st, 2008

J2ME (Java 2 Micro Edition) untuk MIDP1.0 tidak mendukung double dan floating point, namun bagi sobat yang juga programmer JAVA jangan khawatir karena telah dibuat class Real yang bisa didownload di http://real-java.sourceforge.net/Real.java untuk detail deskripsinya di http://real-java.sourceforge.net/Real.html

Read more…

Java ,