Kamis, 15 Desember 2011

URL dan URLConnection (Java)


Kelas URL digunakan untuk merepresentasikan suatu sumber pada Web. Setiap sumber memiliki alamat, yang unik (tidak bisa sama), dan memiliki informasi yang cukup sehingga web browser bisa mencari sumber tersebut dan mengambilnya. Alamat ini disebut "url" atau "universal resource locator".

Suatu objek beritpe kelas URL melambangkan alamat tersebut. Jika kita sudah memiliki objek bertipe URL, maka kita bisa membuka URLConnection ke alamat tersebut. Suatu url biasanya berupa string, misalnya "http://java.lyracc.com/belajar/java-untuk-pemula/bab-i-pendahuluan". Ada juga yang disebut url relatif. URL relatif adalah lokasi suatu sumber relatif terhadap url lain, yang biasanya disebut landasan (base) atau konteks (context) dari url relatif tersebut. Misalnya jika konteksnya adalah http://java.lyracc.com/belajar/java-untuk-pemula/ maka url relatif dari "bab-i-pendahuluan" akan menunjuk pada http://java.lyracc.com/belajar/java-untuk-pemula/bab-i-pendahuluan.

Suatu objek bertipe URL bukan string sederhana, akan tetapi dibangun dari kumpulan string yang membentuk suatu url. ObjekURL juga bisa dibuat dari objek URL lain, yang merupakan konteksnya, dan string lain yang berisi relatif urlnya. Konstruktornya memiliki bentuk seperti :
public URL(String alamatURL) throws MalformedURLException
dan
public URL(URL konteks, String alamatRelatif) throws MalformedURLException
Lihat bahwa kedua konstruktor akan melempar pengecualian bertipe MalformedURLException jika string yang diberikan bukan nama url legal. Kelas MalformedURLException merupakan kelas turunan dari IOException yang wajib ditangani, sehingga konstruktor di atas harus dipanggil dalam pernyataan try ... catch atau ditulis di dalam subrutin yang melempar pengecualian ini.

Konstruktur jenis kedua akan lebih nyaman digunakan untuk applet. Dalam applet, tersedia dua metode yang bisa digunakan untuk mengambil konteks URL. Metode getDocumentBase() pada kelas Applet mengembalikan objek bertipe URL. Objek URLini adalah lokasi tempat halaman HTML yang berisi applet tersebut berada. Dengan ini, kita bisa memerintahkan applet untuk kembali dan mengambil file lain yang disimpan di tempat yang sama. Misalnya,
URL url = new URL(getDocumentBase(), "data.txt");
membuat URL baru yang merujuk pada file bernama data.txt pada komputer yang sama dan pada direktori yang sama pada halaman web di mana applet tersebut sedang berjalan.

Metode lainnya, yaitu getCodeBase(), mengembalikan URL yang merupakan lokasi di mana applet tersebut berada (belum tentu sama dengan lokasi HTML-nya).

Setelah kita memiliki objek URL yang benar, kita bisa memanggil openConnection() untuk membuka koneksi pada URLtersebut. Metode ini mengembalikan objek bertipe URLConnection. Objek URLConnection bisa digunakan untuk membukaInputStream untuk membaca halaman atau file pada alamat URL tersebut, yaitu dengan menggunakan metodegetInputStream(). Misalnya :
URL url = new URL(alamatURL);
URLConnection koneksi = url.openConnection();
InputStream dataURL = connection.getInputStream();
Metode openConnection() dan getInputStream dapat melempar pengecualian IOException. Jika InputStream berhasil dibuka, kita bisa menggunakannya dengan cara biasa, termasuk membungkusnya dalam aliran input jenis lain, misalnyaBufferedReader. Membaca dari aliran ini tentunya juga bisa melemparkan pengecualian.

Salah satu metode instansi yang berguna dalam kelas URLConnection adalah getContentType(), yang mengembalikan Stringyang menjelaskan jenis informasi pada URL yang ditunjuk. Hasilnya bisa bernilai null jika jenisnya belum diketahui, atau tidak bisa ditentukan. Jenis dokumen bisa saja belum tersedia hingga aliran input berhasil dibuat, sehingga lebih baik menggunakangetContentType() setelah getInputStream() berhasil dilakukan.

String yang dikembalikan oleh getContentType() ditulis dalam format yang disebut MIME, misalnya "text/plain", "text/html", "image/jpeg", "image/gif", dan banyak lagi lainnya. Semua jenis MIME terdiri dari dua bagian, yaitu bagian umum, seperti "text" atau "image", dan bagian khususnya, misalnya "html" atau "gif". Jika kita hanya tertarik pada data teks misalnya, kita hanya perlu menguji apakah hasil keluaran getContentType() dimulai dengan "text". (Jenis MIME pertama kali dimaksudkan untuk menjelaskan isi email. Namanya adalah singkatan dari "Multipurpose Internet Mail Extensions". Kini, MIME digunakan secara umum untuk menjelaskan jenis suatu informasi atau file pada suatu sumber).

Mari kita lihat contoh singkat bagaimana membaca data dari suatu URL. Subrutin berikut akan membuka koneksi ke URL tertentu, mengecek apakah jenisnya berupa teks, kemudian mengkopi hasilnya ke layar. Beberapa operasi dalam subrutin ini mungkin melempar pengecualian. Kita akan menambahkan "throws Exception" di kepala subrutin untuk meneruskan penanganan pengecualian ini kepada program utama yang memanggil subrutin ini.
    static void bacaTeksDariURL( String alamatURL ) throws Exception {
        // Subrutin ini mencetak isi dari alamat URL yang
        // diberikan ke layar. Semua kesalahan akan ditangani
        // oleh program yang memanggil subrutin ini
 
        /* Buka koneksi ke URL, dan ambil aliran input
         * untuk membaca data dari URL. */
 
        URL url = new URL(alamatURL);
        URLConnection koneksi = url.openConnection();
        InputStream dataURL = koneksi.getInputStream();
 
        /* Cek apakah konten bertipe teks */
 
        String jenisKonten = koneksi.getContentType();
        if (jenisKonten == null || jenisKonten.startsWith("text") == false)
            throw new Exception("URL tidak bertipe teks.");
 
        /* Kopi karakter dari aliran input ke layar
         * hingga akhir file ditemukan (atau kesalahan ditemui) */
 
        while (true) {
            int data = dataURL.read();
            if (data < 0)
                break;
            System.out.print((char)data);
        }
    } // akhir bacaTeksDariURL()

Tidak ada komentar:

Posting Komentar