Beberapa catatan penting tentang JSP


Mungkin ini hanya sekelumit sharing tentang pengalaman saya menggunakan J2EE, terutama jsp. Walaupun sederhana, namun saya ingin menuliskan di sini sekaligus sebagai dokumentasi saya. Pertama, jsp sepertinya sangat sensitif dengan karakter whitespace. Jika kita mengembalikan dokumen teks (html, json, dsb.) mungkin tidak menimbulkan masalah. Namun ketika kita mengembalikan objek biner, seperti gambar, maka sebelum pengiriman array byte ke browser, kita perlu memastikan bahwa dalam satu file jsp kita tidak ada whitespace yang muncul sebelum pengiriman tersebut. Untuk memastikan ini, maka kita dapat menambahkan elemen jsp-config pada file web.xml kita. Berikut contohnya:


<jsp-config>
 <jsp-property-group>
 <url-pattern>*.jsp</url-pattern>
 <trim-directive-whitespaces>true</trim-directive-whitespaces>
 </jsp-property-group>
 </jsp-config>

Kedua, sebaiknya kita sediakan halaman khusus yang menampilkan pesan kesalahan HTTP maupun Exception yang terjadi dari aplikasi jsp/servlet. Untuk menyediakan ini, maka pada file web.xml perlu ditambahkan elemen berikut:

    <error-page>
        <error-code>404</error-code>
        <location>/pagenotfound.jsp</location>
    </error-page>
    <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/error.jsp</location>
    </error-page>

Pada contoh di atas, untuk kesalahan 404, maka akan ditampilkan halaman bernama pagenotfound.jsp. Sedangkan jika terjadi Exception dari Java Runtime, maka akan dibukan file error.jsp.

Iklan

Parsing JSON dengan google-gson


Melanjutkan artikel contoh pengaksesan SInTA RESTful, ada satu layanan SInTA yang mengembalikan json array objek yang memiliki struktur class sebagai berikut :

public class SearchData {
    private String judul;
    private String nama;
    private String prodi;
    private String tahun;
    private String[] mtk;
    private String abstrak;

    // semua get dan set method terhadap atribut di atas
} 

Dalam sebuah aplikasi client yang memanggil layanan RESTful SInTA ini, kita harus melakukan parsin format JSON Array Objek yang pada umumnya memiliki format :

[{“field”:”value”, …}, …]

Oleh karena saya menggunakan bahasa pemrograman Java untuk mengakses layanan SInTA ini, saya mencoba menggunakan pustaka berlisensi Apache yang bernama google-gson. Saya merasa lebih nyaman ketika menggunakan pustaka ini untuk memparsing data JSON. Berikut adalah main program yang saya gunakan untuk memparsing JSON Array objek di atas:

public class TestQueryWS {

    public static void main(String[] args) {

        try {
            String query = "kompresi sms";
            String username = "<masukkan username Anda>";
            String key = "<masukkan key API Anda>";

            RestResponse result = Rootsinta.search(query, username, key);
            String data = result.getDataAsString();

            Gson gson = new Gson();
            Type listType = new TypeToken<List<SearchData>>() {}.getType();

            List<SearchData> s = new ArrayList<SearchData>();
            s = gson.fromJson(data, listType);

            for(SearchData i:s) {
                System.out.println(i.getJudul());
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
}

Hasilnya sangat memuaskan!

Akses SInTA RESTful dengan Java


Sekarang, saya akan memaparkan bagaimana mudahnya mengakses web service SInTA dengan menggunakan Netbean. Saya menggunakan Netbeans 6.7. Berikut beberapa tahapan yang perlu dilakukan:

Pada bagian (tab) Services, tambahkan Sinta WS

Setelah itu Anda akan mendapatkan sebuah item Web Service bernama sinta seperti pada gambar berikut:

Jika ingin dilihat WADLnya, silahkan klik kanan sinta, pilih View WADL.

Selanjutnya, Anda buat sebuah project baru:

  • Pilih New > Project > Java > Java Application
  • beri nama SintaSample, klik create Main Class
  • klik Finish
  • Dalam posisi jendela editor Main Class, dragging salah satu method sinta WS (Misal pustaka) dari jendela Services ke dalam jendela editor.
  • muncul dialog sebagai berikut :

  • klik OK
  • secara otomatis Netbeans akan membuatkan template buat Anda
  • di sana Netbeans juga membuatkan dua packages org.netbeans.saas.root dan org.netbeans.saas. Berikut contoh method yang dihasilkan dalam package org.netbeans.saas.root terhadap layanan pustaka:
        public static RestResponse pustaka(String nim, String username, String key) throws IOException {
            String[][] pathParams = new String[][]{};
            String[][] queryParams = new String[][]{{"nim", nim}, {"username", username}, {"key", key}};
            RestConnection conn = new RestConnection("http://222.124.22.27:81/sinta/resources/pustaka", pathParams, queryParams);
            sleep(1000);
            return conn.get();
        }
    
  • di dalam kedua package tersebut sudah tersedia class-class dispatcher untuk request dan retrieve
  • sekarang tinggal Anda masukan data parameter yang dibutuhkan!

Observer Pattern untuk Swing


Salah satu design pattern yang bermanfaat sekali bagi saya dalam pengembangan aplikasi Java Swing adalah Observer. Pada prinsipnya design pattern ini menerapkan konsep “langganan”. Dari sebuah class subject yang menghasilkan sebuah kejadian tertentu di daftarkan ke sebuah Observer atau yang akan mengerjakan sesuatu berdasar kejadian yang dimunculkan oleh class subject tersebut. Adapun Class Diagram dari design pattern Observer ini dapat dilihat di Observer Design Pattern UML.

Dalam kesempatan ini, saya mencoba menerapkan pattern tersebut ke sebuah aplikasi Swing sederhana yang dapat menampilkan progress bar di sebuah dialog, dimana untuk pengontrol nilainya berdasarkan pada eksekusi sebuah thread dari class lain. Java sudah menyediakan sebuah class dan interface untuk penerapan design pattern Observer ini, yaitu java.util.Observable dan java.util.Observer. Untuk contoh penerapannya, class dialog yang menampilkan progress bar didefinisikan sebagai sebuah class yang menerapkan java.util.Observer. Sedangkan untuk class pengontrol nilainya akan diturunkan dari java.util.Observable.

Baca lebih lanjut

Alfresco di Tomcat 6.0.16


Rasanya tenaga ini habis ketika masa-masa kuliah telah dimulai. Banyak sekali pekerjaan yang harus diselesaikan. Untuk teman-teman yang belum sempat saya membalas komentarnya, saya minta maaf. Tapi saat ini saya kangen untuk sedikit menulis dari apa yang sedang saya lakukan saat ini. Disamping harus pegang kelas, semester ini saya melakukan penelitian untuk mengembangan sistem information retrieval dengan topik khusus. Yang jelas pekerjaan ini tidak dapat dilakukan saya sendiri. Arsitekturnya tidak begitu beda jauh dengan lainnya, masih menggunakan Apache Tomcat, Alfresco, JSF, Lucene, Weka dan MySQL :D. Intinya mencari produk-produk yang dapat memberikan keleluasaan dalam bergerak, tanpa dibatasi ketakutan pelanggaran ini dan itu.

Hari ini saya menyelesaikan pemasangan OpenSuse 11.0 di mesin baru. Dengan harga 5.2jt kami mendapat komputer rakitan dengan mother GigaByte, Core 2 Duo ( Intel(R) Core(TM)2 Duo CPU     E7200  @ 2.53GHz stepping 06 ), RAM 4G, DVD RW, dan HD SATA 320 GByte. Sangat lumayan. Dan setelah diuji coba memang sangat bagus untuk menjalankan aplikasi yang akan kami kembangkan.

Setelah memasang OpenSuse 11.0, saya memutuskan untuk memasang MySQL yang disertakan oleh OpenSuse 11.0 dan memasang Apache Tomcat 6.0.16 yang saya pasang dari paket Netbeans 6.1. Selanjutnya saya mencoba memasang Alfresco versi yang dikeluarkan tahu lalu, yaitu Community Network – v2.1.0 (482). Dasar dari pemasangan ini saya menggunakan dokumentasi dari wiki.alfresco.com. (Download and install Alfresco in Linux dan Install Tomcat6). Berikut beberapa langkah yang saya lakukan :

  1. setelah memasang apache-tomcat di /opt/apache-tomcat-6.0.16, selanjutnya saya lakuk perubahan pada file bin/catalina.sh dengan menambahkan baris berikut :
    JAVA_OPTS="-Xms512m -Xmx1024m -Xss256k -XX:PermSize=128m"
  2. selanjutnya, saya modifikasi file CATALINA_HOME/conf/catalina.properties dan mengubah parameter shared.loader= menjadi :
    shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar
  3. selanjutnya, saya menjalankan file db_setup.sql (yang dibawakan dalam satu paket alfresco-community-tomcat-2.1.0.tar.gz) untuk membuat database alfresco dan user account alfresco di mysql:
    mysql -u root <db_setup.sql
  4. setelah selesai, saya jalankan Tomcat:
    $CATALINA_HOME/bin/startup.sh
  5. saya kunjungi http://localhost:8080. kemudian saya masuk ke Tomcat Manager (http://localhost:8080/manager/html), dan saya lakukan deploy alfresco.war.
  6. selama proses deploy tidak ada masalah, dan alfresco dapat di start dengan baik.
  7. Akhirnya alfresco dapat berjalan di atas Tomcat 6.0.16.

Memasang ZK OpenSource Ajax


Satu lagi hasil dari komunitas yang perlu dipertimbangkan adalah ZK, sebuah pustaka Ajax yang sangat komplet baik untuk penanganan antarmuka (tampilan, form, dsb.), web service dan sebagainya. Jika kita dapat menggunakan Spring atau Strut, dengan ZK kita bisa menggabungkannya dengan JSP (melalui JSTL) ataupun JSF. Dari demo yang disediakan sangat menawan hati. Membuat saya sendiri juga melirik produk ini.

Saya mungkin sudah telat tentang produk ini, karena saya sendiri baru masuk ke dunia pemrograman web J2EE kurang lebih baru 1 tahun ini. Saya mencoba untuk memasang ZK ini di atas TOMCAT 6.0.16. Caranya sendiri juga mudah. Berdasar informasi dokumentasi yang disediakan, saya melakukan langkah-langkah berikut:

  1. ekstrak paket apache-tomcat-6.0.12
  2. ekstrak juga paket zk-bin-3.0.6.tar.gz atau zip
  3. lalu copy semua file .jar dari zk-bin-3.0.6/dist/lib, zk-bin-3.0.6/dist/lib/ext dan zk-bin-3.0.6/dist/lib/zkforge ke dalam $CATALINA_HOME/lib
  4. jalankan tomcat
  5. untuk mendapatkan demo, silahkan download zk-demo-3.0.6.zip, lalu ekstrak.
  6. jalankan apache-tomcat manager dari web browser Anda
  7. pada item deploy WAR, silahkan browse dan pilih file zkdemo.war, dan klik deploy.
  8. jika berhasl akan terbuat sebuah context application baru bernama zkdemo.
  9. jika dikunjungi zkdemo, kita akan mendapatkan sejumlah contoh aplikasi AJAX yang dibangun dengan ZK. Menarikkkkk

Untuk pengembangan aplikasi webnya sendiri, kita dapat menggunakan Eclipse (dengan memasang zkstudio eclipse plugin) atau Netbeans.

Tutorial Akses DB dengan JSP


Kita akan coba belajar membuat sebuah halaman JSP sederhana dengan Netbeans 6.1 yang dapat melakukan query ke database Java DB (Derby). Paket yang harus disiapkan pada Netbeans 6.1 tentu saja paket J2EE dan Glassfish. Dalam glassfish sudah tersedia paket Java DB yang langsung dapat kita gunakan. Saya sendiri menggunakan Glassfish V2UR2. Untuk memulai belajar ini, pastikan bahwa platform Server di Netbean Anda sudah tercatat Glassfish dengan cara melihat dari menu Tools > Servers. Jika sudah tercatat, kita akan siapkan terlebih dahulu sebuah database di Derby. Katakanlah database kita ini akan mencatat data mahasiswa pada sebuah tabel dengan nama siswa. Klik jendela Services pada Netbeans, sehingga nampak bagi Anda item Databases. Silahkan Anda ekpan dengan cara klik tombol + pada item Databases. Klik kanan item Java DB, lalu pilih Start Server. Setelah database Derby jalan, klik kanan kembali pada item Java DB, lalu pilih Create Database… Ketiklah nama database, misal: wordpress, lalu ketik juga username dan password untuk database tersebut, setelah itu klik tombol OK. Anda akan mendapatkan sebuah item koneksi jdbc ke database Anda:

jdbc:derby://localhost:1527/wordpress

Klik kanan pada item tersebut, dan pilih Connect…. Setelah Anda masuk ke database Anda, pada item Tables, klik kanan dan pilih Create Table… Ketik Siswa pada item Table Name:, kemudian masukkan definisi 4 field untuk tabel tersebut :

  • nim  char(5) primary key
  • nama varchar(100) not null
  • email varchar(100)
  • tgllahir date

Baca lebih lanjut