0% menganggap dokumen ini bermanfaat (0 suara)
214 tayangan77 halaman

Kelas-3 Pemrograman Java

Program ini merangkum rencana pelaksanaan pembelajaran mata pelajaran Pemrograman Java untuk kelas XII semester 5. Pembelajaran akan membahas tentang tipe data, variabel, input/output file, dan membuat program sederhana menggunakan bahasa pemrograman Java.

Diunggah oleh

Ferry Ardiansyah
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
214 tayangan77 halaman

Kelas-3 Pemrograman Java

Program ini merangkum rencana pelaksanaan pembelajaran mata pelajaran Pemrograman Java untuk kelas XII semester 5. Pembelajaran akan membahas tentang tipe data, variabel, input/output file, dan membuat program sederhana menggunakan bahasa pemrograman Java.

Diunggah oleh

Ferry Ardiansyah
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 77

RENCANA PELAKSANAAN PEMBELAJARAN

A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali


Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/5
Pertemuan Ke- : 1,2
Alokasi Waktu : 16 x 45 Menit
Standar Kompetensi : Membuat program aplikasi web berbasis java

Kompetensi Dasar : Menjelaskan File I/O (Input/Output), tipe data dan Variabel pada
Java

Indikator :
 Menjelaskan Konsep dari I/O di Java dan Filestreams tipe data dan sifat-sifatnya.( Rasa ingin tahu )
 Menjelaskan Konsep variabel pada Java. ( Rasa ingin tahu )
B. Tujuan Pembelajaran :
 Menjelaskan Tipe data pada Java
 Mengetahui cara penulisan Variabel dan tipe data
C. Materi Ajar :
Program komputer adalah rangkaian instruksi yang diberikan agar komputer dapat bekerja. Suatu
pekerjaan yang mungkin sederhana bagi manusia tidak dapat dimengerti oleh komputer. Manusia
harus memberikan petunjuk kepada komputer bagaimana melakukan suatutugas dalam bentuk
bahasa pemrograman. Bahasa pemrograman berbeda dengan bahasa manusia, karena komputer
membutuhkan aturan yang lebih baku apa yang boleh dan apa yang tidak boleh dalam suatu
bahasa pemrograman. Aturan ini disebut sintaks bahasa.Sintaks bahasa pemrograman ditentukan
berdasarkan apa yang bisa dilakukan oleh komputer, misalnya loop (perulangan), cabang
(branch), atau fungsi. Hanya program dengan sintaks yang benar yang dapat dikompilasi atau
diinterpretasi yang pada akhirnya bisa dijalankan di komputer. Kompiler akan memberikan pesan
kesalahan apabila ada kesalahan dalam sintaks sehingga kita memperbaikinya.Untuk menjadi
programmer yang sukses, kita harus mengerti secara detail sintaks dari bahasa pemrograman
yang kita akan gunakan. Tetapi, sintaks hanya sebagian cerita. Kita ingin program yang kita buat
berjalan sesuai dengan yang kita inginkan. Artinya program tersebut harus benar secara logika.
Program yang benar secara logika disebut memiliki semantik yang benar.
package selamatdatang;

public class SelamatDatang {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Selamat Datang!");
}

Halaman 1 dari 77
}

Definisi paket (package)

package selamatdatang;

Package dalam Java merupakan kumpulan dari berbagai kode yang terangkum dalam satu
paket. Untuk memudahkan penulisan dan pembagian logika suatu program, satu paket terbagi
menjadi beberapa berkas (file) di mana setiap file memiliki fungsi atau tugas yang sangat
khusus, misalnya satu file berfungsi untuk mendeklarasikan konstanta dan kelas, sementara file
yang lain berisi implementasi kelas dan prosedurnya.

Pada contoh aplikasi SelamatDatang di atas, paket ini hanya berisi satu buah file yang isinya
terdiri dari satu kelas dan satu metode.

Definisi paket tidak selalu diperlukan, tetapi hal ini merupakan kebiasaan baik untuk melatih
kita berfikir secara logis dan sistematis.

Komentar

/**
* @param args
*/
// TODO Auto-generated method stub

Komentar tidak akan diproses oleh kompiler tetapi berguna bagi programmer lain. Bahasa Java
memiliki 3 jenis komentar :

 /* text */ — Compiler akan mengabaikan kata kata antara /* dan */

 /** documentation */ — Ini merupakan komentar yang dipergunakan khusus untuk


dokumentasi. Kompiler akan mengabaikan komentar dari /* hingga */. Alat bantu javadoc akan
memproses komentar dokumentasi untuk membuat dokumentasi secara otomatis dari sumber
program.

 // text — Kompiler akan mengabaikan segala sesuatu dari // hingga akhir baris

Definisi Kelas

public class SelamatDatang {


...
}

Kelas merupakan bagian integral dari bahasa Java karena Java merupakan bahasa berorientasi
objek. Setiap aplikasi harus terdiri dari satu kelas. Di sini kita definisikan kelas SelamatDatang
sebagai kelas utama.

Metode main

Dalam bahasa pemrograman Java, setiap aplikasi harus memiliki satu buah metode main yang
bentuknya seperti berikut :

public static void main(String[] args) {

Halaman 2 dari 77
...
}

Metode main mirip dengan fungsi main pada bahasa C/C++ di mana fungsi ini merupakan
pintu gerbang dimulanya suatu program. Metoda main dapat dipanggil dengan menyertakan
variabel, baik hanya satu variabel, banyak variabel atau bahkan tidak ada sama sekali.

Yang terakhir adalah perintah berikut untuk menampilkan Selamat Datang pada komputer
Anda.

System.out.println("Selamat Datang!");
D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
E. Langkah Pembelajaran :
Pertemuan Ke 1
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi tentang Menjelaskan
File Input/Output pada java kepada siswa
dengan rasa tanggung jawab dengan memberikan
penjelasannya
4. Guru memberi motivasi siswa secara komunikatif
dan kreatif dengan memberi penjelasan tentang
Menjelaskan File Input/Output pada java

2 Kegiatan inti 70’ Diskusi &


a. Eksplorasi Pengamatan
1. Guru membagi siswa menjadi kelompok-kelompok
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi secara komunikatif tentang
Menjelaskan File Input/Output pada java
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang Menjelaskan File
Input/Output pada java
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
File Input/Output
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang File
Input/Output pada java dengan bertanggungjawab.

Halaman 3 dari 77
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

Variabel dan Tipe Data


Nama merupakan hal penting dalam teknik pemrograman. Dalam suatu program, nama
digunakan untuk menyebut sesuatu. Untuk menggunakan "sesuatu" tersebut, programmer harus
mengerti bagaimana aturan pemberian nama dan aturan untuk menggunakan nama tersebut
dalam programnya. Atau dengan kata lain, programmer harus mengerti sintaks dan semantik dari
nama.

Menurut aturan sintaks Java, nama merupakan rangkaian dari 1 atau lebih karakter. Harus
dimulai dengan huruf dan harus terdiri dari huruf, angka atau karakter garis bawah '_'. Berikut
ini adalah contoh nama yang diperbolehkan:

N n rate x15 quite_a_long_name HelloWorld

Hurus kecil dan huruf besar dianggap berbeda, sehingga HelloWorld, helloworld,
HELLOWORLD, dan heLLOwoRLD adalah nama yang berbeda-beda. Beberapa kata tertentu
merupakan nama yang memiliki kegunaan tertentu oleh Java, dan tidak dapat dipergunakan oleh
programmer. Kata-kata ini disebut reserved words (kata-kata cadangan) misalnya: class,
public, static, if, else, while, dan lain-lain.

Hal lain yang penting adalah compound names atau nama campuran, yaitu yang merupakan nama
biasa yang dihubungkan dengan titik, misalnya System.out.println. Idenya adalah "sesuatu"
pada Java dapat terdiri dari "sesuatu" yang lain. Nama System.out.println artinya System
menampung out dan out menampung println. Kita sebut "sesuatu" sebagai identifier (pengenal)
tidak peduli apakah ia berupa nama tunggal atau campuran.

Program melakukan manipulasi data yang disimpan dalam memori. Dalam bahasa mesin, data
hanya bisa diambil dengan menyebut alamatnya di memori. Dalam bahasa pemrograman tingkat
tinggi seperti Java, nama bisa digunakan untk mengganti alamat data tersebut di memori. Tugas
komputer adalah untuk melacak di mana data tersebut di simpan, sedangkan programmer

Halaman 4 dari 77
menggunakan nama untuk memerintahkan komputer mengambil data tersebut dari memori.
Nama yang digunakan seperti ini disebut variable.

Variabel sebenarnya berarti lebih kompleks. Variabel bukan isi dari data, tapi lokasi di memori
yang menyimpan data tersebut. Variabel bisa diibaratkan sebagai kotak penyimpanan data,
bukan isi kotaknya. Karena data di dalam kotak bisa berubah, variabel hanya dapat dipercaya
pada satu saat saja, walaupun tempatnya selalu sama.

Dalam bahasa Java, satu-satunya cara untuk memasukkan data ke dalam variabel adalah dengan
menggunakan assignment statement, atau pernyataan pemberian nilai. Pernyataan ini berbentuk:

variable = ekspresi;

di mana ekspresi menyatakan apapun yang berhubungan dengan nilai suatu data. Ketika
komputer menjalankan instruksi ini, komputer akan menghitung dan menyimpan hasilnya ke
dalam variabel. Contoh:

kecepatan = 40;

Variable dalam pernyataan di atas adalah kecepatan dan ekspresinya adalah angka 40.
Komputer menghitung pernyataan ini dan menyimpan 40 ke dalam variabel kecepatan, dan
mengganti apapun yang telah disimpan sebelumnya.

Sekarang misalnya kita ingin melakukan perhitungan yang lebih kompleks:

jarak = kecepatan * waktu

Di sini, * merupakan operasi perkalian. Komputer mengambil data yang disimpan dalam variabel
kecepatan dan waktu, melakukan perkalian, dan menyimpan hasilnya dalam jarak.

Variabel dalam bahasa Java didesign untuk menyimpan hanya 1 jenis tipe data. Kompiler akan
menampilkan kesalahan sintax apabila variabel ini dicoba untuk diberi tipe data jenis lain. Oleh
karena itu Java disebut bahasa pemrograman bertipe kuat atau strongly typed language.

Ada 8 tipe data primitif dalam bahasa Java.

Jenis
Deskripsi Ukuran Minimum Maksimum
Data
Hanya bisa berisi
boolean 1-bit
benar atau salah
char Karakter Unicode 16-bit
byte Bilangan bulat 8-bit -127 128
short Bilangan bulat 16-bit -32768 32767
- 214748364
int Bilangan bulat 32-bit
2147483648 7
- 922337203
long Bilangan bulat 64-bit 9223372036 685477580
854775808 7

Halaman 5 dari 77
1.401298464 3.40282346
float Bilangan riil 32-bit 32481707e- 638528860
45 e+38
4.940656458 1.79769313
double Bilangan riil 64-bit 41246544e- 486231570
324 e+308

Suatu variabel baru dapat digunakan apabila telah dideklarasikan. Pernyataan deklarasi variabel
digunakan untuk mendeklarasikan satu atau lebih variabel dan memberinya nama. Ketika
komputer mengeksekusi deklarasi variabel, komputer akan menyediakan ruangan di memori
kemudian menyimpan alamat ini sesuai dengan nama variabel yang diberikan. Deklarasi variable
berbentuk seperti :

nama_tipe nama_variabel;

nama_variabel dapat berupa sebuah nama variabel atau beberapa nama sekaligus yang dipisah
dengan koma. Gaya pemrograman yang baik yaitu dengan mendeklarasikan satu variabel dalam
satu pernyataan, kecuali variabel tersebut berhubungan erat satu sama lain. Misalnya:

float num;
String nama;
String nama;
boolean bol;
int x,y;

Atau pendeklarasian variabel bisa juga dilakukan sekaligus dengan pemberian nilainya, seperti
pada contoh berikut:

int num = 1000;


char ch = 'e';
float angka = -1.504;
boolean bol = true;

Jenis-jenis Variabel

Java memiliki beberapa jenis variabel yang dapat dikelompokkan sebagai berikut :

 Instance Variables (tidak statis). Dalam bahasa pemrograman berorientasi objek, objek
menyimpan variabel yang tidak dideklarasikan dengan kata kunci static dalam kategori non-
statis, atau dapat berubah-ubah. Suatu kelas dapat dijelmakan ke dalam beberapa objek. Nilai
yang terkandung dalam variabel tak-statis ini berbeda untuk setiap objeknya.
 Class Variables (statis). Variabel ini merupakan bagian integral dari suatu kelas, dan tidak ada
satu objek pun yang dapat menyatakan kepemilikan atas variabel ini. Variabel yang
dideklarasikan sebagai statis digunakan bersama oleh semua objek. Variabel ini lebih bersifat
global yang nilainya sama untuk setiap objek pada kelas yang bersangkutan.
 Local Variables. Variabel ini didefinisikan di dalam suatu metoda (method) atau dalam suatu
prosedur. Variabel ini bersifat lokal karena hanya dapat diakses oleh metoda atau prosedur
tersebut.
 Parameter. Paramater atau argumen adalah variabel yang digunakan pada saat suatu metoda
atau prosedur dipanggil. Parameter berguna untuk memberikan nilai awal untuk diteruskan
(pass) ke dalam suatu prosedur atau metoda.

Halaman 6 dari 77
Literal

Pada bagian ini akan dijelaskan tentang literal, yaitu rangkaian kata atau huruf yang menyatakan
suatu nilai. Misalnya

int angka = 10;

Pada pernyataan di atas, yang dinamakan literal adalah 10, karena 10 berarti bilangan bulat atau
integer. Pada bahasa pemrograman java, terdapat beberapa jenis literal yang melambangkan
bilangan bulat, riil, kalimat, atau boolean.

Literal Bilangan Bulat

Bilangan bulat dapat dilambangkan dalam beberapa bentuk. Bilangan bulat biasa dilambangkan
dengan deretan angka yang dimulai dengan angka yang bukan nol.

int angka = -10;

Bilangan oktal adalah bilangan bulat berbasis 8, yang berarti hanya dapat terdiri dari angka-
angka 0 hingga 7. Bilangan oktal ditulis seperti bilangan bulat biasa dimulai dengan 0.

// 22 basis delapan atau 18 dalam desimal


int angka = 022;

Bilangan heksadesimal adalah bilangan berbasis 16. Bilangan heksadesimal dilambangkan


dengan 0 hingga 9 dan a hingga f dan dimulai dengan 0x.

// 2a heksadesimal atau 42 dalam desimal


int angka = 0x2a;

Long integer. Seperti dijelaskan pada bab terdahulu long integer membutuhkan memori sebesar
64bit, yang artinya kita dapat menyimpan bilangan bulat hingga 2 ^ 64. Untuk merepresentasikan
long integer, tambahkan huruf L pada akhir bilangan.

int angka = 22L;

Literal Karakter

Kita dapat melambangkan suatu karakter dengan tanda petik tunggal misalnya ‘a’ atau ‘3′ atau
‘=’. Suatu karakter dapat juga dilambangkan dengan kode ASCII nya. Caranya dengan
memulainya dengan \u00 (garis miring terbalik) kemudian diikuti dengan kode ASCII nya dalam
bentuk heksadesimal.

// huruf 'A' dalam ASCII


char huruf = '\u0041';

Selain itu ada beberapa karakter lain selain alfabet yang dapat dilambangkan dengan escape
sequence. Berikut ini beberapa contohnya.

\n = tombol enter atau baris baru.


Halaman 7 dari 77
\r = carriage return.

\t = tombol tab.

\b = tombol backspace.

\\ = karakter \

\’ = karakter ‘

\” = karakter ”

Literal Boolean

Nilai true dan false pada java merupakan literal boolean. Suatu variabel bertipe boolean hanya
dapat memiliki nilai true atau false.

boolean ok = true;

Ingat bahwa boolean true atau false TIDAK menggunakan tanda petik tunggal seperti ekspresi
pada karakter.

Literal Bilangan Riil

Bilangan riil, misalnya -0.00127 atau 415.842, pada java dapat disimpan baik sebagai float atau
double. Bilangan real dapat direpresentasikan dalam bentuk desimal biasa, pecahan, atau
eksponen (dilambangkan dengan e atau E).

Ukuran
Tipe Rentang Presisi (jumlah digit)
bytes bit
float 4 32 +/- 3.4 x 1038 6-7
308
double 8 64 +/- 1.8 x 10 15

Imbuhan akhir d atau D dan f atau F dapat pula ditambahkan untuk menentukan tipenya secara
eksplisit. Berikut beberapa contohnya.

double d = 3.27E+32;
float f = 4f;
float pi = 3.14159;

Literal String

String merupakan untaian huruf dan angka yang tersusun menjadi satu kalimat. Dalam bahasa
java, string bukan merupakan tipe primitif, tetapi merupakan kelas. String pada java tidak
disimpan dalam bentuk array seperti pada C. Java menyediakan beberapa metoda untuk
melakukan penggabungan, modifikasi, atau perbandingan. String ditulis di antara dua tanda petik
ganda seperti contoh berikut.

String salam = "Selamat Datang";

String juga dapat mengandung karakter spesial seperti dibahas pada literal karakter. Misalnya

Halaman 8 dari 77
String hallo = "Selamat Datang \"Bapak Presiden\"";
System.out.println("Hallo Bambang\nSelamat pagi,\nSemoga hari anda cerah\n";

Berikut ini adalah beberapa contoh lainnya.

// Contoh string kosong


String teks = "";

// Contoh string berisi "


teks = "\"";

// String dapat juga dipisah menjadi beberapa baris


teks = "ini baris pertama " +
"dan ini lanjutannya."
Literal Null
Literal terakhir pada bahasa java adalah literal null. Null merupakan kondisi di mana suatu objek
tidak diberi alokasi memori. Pada saat suatu objek dideklarasikan, komputer akan
mengalokasikan memori untuk objek tersebut. Apabila objek tersebut telah selesai dipergunakan,
kita dapat melepas lokasi memori yang digunakan oleh objek tersebut sehingga memori itu dapat
digunakan oleh objek lain. Berikut ini adalah contohnya
obj = null;
Literal null berfungsi memberi tahu garbage collector (pemulung memori) bahwa objek tersebut
tidak lagi terpakai. Kemudian memori akan dilepaskan agar dapat digunakan oleh objek lain.
Pertemuan Ke 2
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi tentang Tipe data dan
variabel kepada siswa dengan rasa tanggung jawab
dengan memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif
dan kreatif dengan memberi penjelasan tentang Tipe
data dan variabel

2 Kegiatan inti 70’ Diskusi


a. Eksplorasi ,praktek&
1. Guru membagi siswa menjadi kelompok-kelompok Pengamatan
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi dan praktek secara komunikatif
tentang Tipe data dan variabel
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang Tipe data dan variabel
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi dan prakteknya secara mandiri dan
bertanggungjawab sedangkan kelompok lain
merespon secara demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
Tipe data dan variabel
c. Konfirmasi

Halaman 9 dari 77
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang Tipe data dan
variabel dengan bertanggungjawab.
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

Sumber dan media pembelajaran


 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
F. Penilaian :
 Tes Tertulis ;

Diketahui Oleh Boyolali, 12 juli 2012


Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

Halaman 10 dari 77
RENCANA PELAKSANAAN PEMBELAJARAN

A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali


Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/5
Pertemuan Ke :1
Alokasi Waktu : 8 x 45 Menit
Standar Kompetensi : Membuat program aplikasi web berbasis java

Kompetensi Dasar : Menjelaskan ExceptionHandling

Indikator :
 Menjelaskan konsep dari ExceptionHandling serta pemodelan dari Try, Throw, Catch dan Finally.
( Rasa ingin tahu )
 Mengaplikasikan ExceptionHandling (Rasa ingin tahu )
B. Tujuan Pembelajaran :
 Memahami Eksepsi Handling
 Menggunakan kata kuncnsi try, catch,throw
 Membuat Kelas eksepsi
C. Materi Ajar :
 Eksepsi Handling
Membuat program untuk bekerja dalam kondisi ideal jauh lebih mudah daripada membuat program yang
tangguh. Program tangguh dapat tahan dari kondisi yang tidak biasa atau dalam kondisi "pengecualian". Salah
satu pendekatanya adalah dengan melihat kemungkinan masalah yang mungkin terjadi dan menambahkan
tes/pengujian pada program tersebut untuk setiap kemungkinan masalah yang mungkin terjadi.
Misalnya, program akan berhenti jika mencoba mengakses elemen array A[i], di mana i tidak berada di dalam
rentang yang dibolehkan. Program tangguh harus dapat mengantisipasi kemungkinan adanya indeks yang
tak masuk akal dan menjaganya dari kemungkinan itu. Misalnya bisa dilakukan dengan :
if (i < 0 || i >= A.length) {
... // Lakukan sesuatu untuk menangani indeks i diluar rentang
} else {
... // Proses elemen A[i]
}
Ada beberapa masalah yang mungkin terjadi dengan pendekatan seperti ini. Adalah hal yang sangat sulit dan
kadang kala tidak mungkin untuk mengantisipasi segala kemungkinan yang dapat terjadi. Kadang tidak selalu
jelas apa yang harus dilakukan apabila suatu kesalahan ditemui. Untuk mengantisipasi semua masalah yang
mungkin terjadi bisa jadi membuat program sederhana menjadi lautan pernyataan if.
Java (seperti C++) membutuhkan metode alternatif yang lebih rapi dan terstruktur untuk menghadapi
masalah yang mungkin terjadi ketika program dijalankan. Metode ini disebut sebagai penanganan
pengecualian (exception-handling). Kata "pengecualian" diartikan sesuatu yang lebih umum daripada
"kesalahan". Termasuk di antaranya adalah kondisi yang mungkin terjadi yang berada di luar aliran suatu
program. Pengecualian, bisa berupa kesalahan, atau bisa juga kasus tertentu yang kita inginkan terpisah dari
algoritma kita.
Ketika pengecualian terjadi dalam eksekusi suatu program, kita sebut bahwa pengecualian tersebut di-lempar-
kan (thrown). Ketika ini terhadi, aliran program artinya terlempar dari jalurnya, dan program berada dalam
bahaya akan crash. Akan tetapi crash bisa dihindari jika pengecualian tersebut ditangkap (catch) dan ditangani
dengan cara tertentu. Suatu pengecualian dapat dilempar oleh satu bagian program dan ditangkap oleh
bagian program lain. Pengecualian yang tidak ditangkap secara umum akan menyebabkan program berhenti.
(Lebih tepat apabila disebut thread yang melemparkan pengecualian tersebut akan berhenti. Dalam program
multithreading, mungkin saja thread lain akan terus berjalan apabila thread yang satu berhenti.)
Karena program Java dijalankan di dalam interpreter, program yang crash berarti bahwa program tersebut
berhenti berjalan secara prematur. Tidak berarti bahwa interpreter juga akan crash. Atau dengan kata lain,
interpreter akan menangkap pengecualian yang tidak ditangkap oleh program. Interpreter akan merespon

Halaman 11 dari 77
dengan menghentikan jalannya program. Dalam banyak bahasa pemrograman lainnya, program yang crash
sering menghentikan seluruh sistem hingga kita menekan tombol reset. Dalam Java, kejadian seperti itu tidak
mungkin -- yang artinya ketika hal itu terjadi, maka yang salah adalah komputer kita, bukan program kita.

Ketika pengecualian terjadi, yang terjadi adalah program tersebut melemparkan suatu objek. Objek tersebut
membawa informasi (dalam variabel instansinya) dari tempat di mana pengecualian terjadi ke titik di mana ia
bisa ditangkap dan ditangani. Informasi ini selalu terdiri dari tumpukan panggilan subrutin (subrutin call
stack), yaitu daftar di mana dan dari mana subrutin tersebut dipanggil dan kapan pengecualian tersebut
dilemparkan. (Karena suatu subrutin bisa memanggil subrutin yang lain, beberapa subrutin bisa aktif dalam
waktu yang sama.) Biasanya, objek pengecualian juga memiliki pesan kesalahan mengapa ia dilemparkan,
atau bisa juga memiliki data lain. Objek yang dilemparkan harus diciptakan dari kelas standar
java.lang.Throwable atau kelas turunannya.

Secara umum, setiap jenis pengecualian dikelompokkan dalam kelas turunan Throwable. Throwable memiliki
dua kelas turunan langsung, yaitu Error dan Exception. Kedua kelas turunan ini pada akhirnya memiliki banyak
kelas turunan lain. Kita juga bisa membuat kelas pengecualian baru untuk melambangkan jenis pengecualian
baru.

Kebanyakan turunan dari kelas Error merupakan kesalahan serius dalam mesin virtual Java yang memang
seharusnya menyebabkan berhentinya program karena sudah tidak dapat diselamatkan lagi. Kita sebaiknya
tidak mencoba untuk menangkap dan menangani kesalahan jenis ini. Misalnya ClassFormatError dilempar
karena mesin virtual Java menemukan data ilegal dalam suatu file yang seharusnya berisi kelas Java yang
sudah terkompilasi. Jika kelas tersebut dipanggil ketika program sedang berjalan, maka kita tidak bisa
melanjutkan program tersebut sama sekali.

Di lain pihak, kelas turunan dari kelas Exception melambangkan pengecualian yang memang seharusnya
ditangkap. Dalam banyak kasus, pengecualian seperti ini adalah sesuatu yang mungkin biasa disebut
"kesalahan", akan tetapi kesalahan seperti ini adalah jenis yang bisa ditangani dengan cara yang baik. (Akan
tetapi, jangan terlalu bernafsu untuk menangkap semua kesalahan hanya karena kita ingin program kita tidak
crash. Jika kita tidak memiliki cara untuk menanganinya, mungkin menangkap pengecualian dan
membiarkannya akan menyebabkan masalah lain di tempat lain).

Kelas Exception memiliki kelas turunan lainnnya, misalnya RuntimeException. Kelas ini mengelompokkkan
pengecualian umum misalnya ArithmeticException yang terjadi misalnya ada pembagian dengan nol,
ArrayIndexOutOfBoundsException yang terjadi jika kita mencoba mengakses indeks array di luar rentang yang
diijinkan, dan NullPointerException yang terjadi jika kita mencoba menggunakan referensi ke null di mana
seharusnya referensi objek diperlukan.

RuntimeException biasanya menginidikasikan adanya bug dalam program yang harus diperbaiki oleh
programmer. RuntimeException dan Error memiliki sifat yang sama yaitu program bisa mengabaikannya.
("Mengabaikan" artinya kita membiarkan program crash jika pengecualian tersebut terjadi). Misalnya,
program yang melemparkan ArrayIndexOutOfBoundsException dan tidak menanganinya akan menghentikan
program saat itu juga. Untuk pengecualian lain selain Error dan RuntimeException beserta kelas turunannya,
pengecualian wajib ditangani.

Diagram berikut menggambarkan hirarki suatu kelas turunan dari kelas Throwable. Kelas yang membutuhkan
penanganan pengecualian wajib ditunjukkan dalam kotak merah.

Halaman 12 dari 77
Untuk menangkap pengecualian pada program Java, kita menggunakan pernyataan try. Maksudnya memberi
tahu komputer untuk "mencoba" (try) menjalankan suatu perintah. Jika berhasil, semuanya akan berjalan
seperti biasa. Tapi jika pengecualian dilempar pada saat mencoba melaksanakan perintah tersebut, kita bisa
menangkapnya dan menanganinya. Misalnya,

try {
double determinan = M[0][0]*M[1][1] - M[0][1]*M[1][0];
System.out.println("Determinan matriks M adalah " + determinan);
}
catch ( ArrayIndexOutOfBoundsException e ) {
System.out.println("Determinan M tidak bisa dihitung karena ukuran M salah.");
}

Komputer mencoba menjalankan perintah di dalam blok setelah kata "try". Jika tidak ada pengecualian, maka
bagian "catch" akan diabaikan. Akan tetapi jika ada pengecualian ArrayIndexOutOfBoundsException, maka
komputer akan langsung lompat ke dalam blok setelah pernyataan "catch
(ArrayIndexOutOfBoundsException)". Blok ini disebut blok yang menangani pengecualian (exception handler)
untuk pengecualian ArrayIndexOutOfBoundsException". Dengan cara ini, kita mencegah program berhenti
tiba-tiba.

Mungkin kita akan sadar bahwa ada kemungkinan kesalahan lagi dalam blok di dalam pernyataan try. Jika
variabel M berisi null, maka pengecualian NullPointerException akan dilemparkan. Dalam pernyataan try di
atas, pengecualian NullPointerException tidak ditangkap, sehingga akan diproses seperti biasa (yaitu
menghentikan program saat itu juga, kecuali pengecualian ini ditangkap di tempat lain). Kita bisa menangkap
pengecualian NullPointerException dengan menambah klausa catch lain, seperti :

try {
double determinan = M[0][0]*M[1][1] - M[0][1]*M[1][0];
System.out.println("Determinan matriks M adalah " + determinan);
}
catch ( ArrayIndexOutOfBoundsException e ) {
System.out.println("Determinan M tidak bisa dihitung karena ukuran M salah.");

Halaman 13 dari 77
}
catch ( NullPointerException e ) {
System.out.print("Kesalahan program! M tidak ada: " + );
System.out.println( e.getMessage() );
}

Contoh ini menunjukkan bagaimana caranya menggunakan beberapa klausa catch. e adalah nama variabel
(bisa kita ganti dengan nama apapun terserah kita). Ingat kembali bahwa ketika pengecualian terjadi,
sebenarnya yang dilemparkan adalah objek. Sebelum menjalankan klausa catch, komputer mengisi variabel
ini dengan objek yang akan ditangkap. Objek ini mengandung informasi tentang pengecualian tersebut.

Misalnya, pesan kesalahan yang menjelaskan tentang pengecualian ini bisa diambil dengan metode
getMessage() seperti contoh di atas. Metode ini akan mencetak daftar subrutin yang dipanggil sebelum
pengecualian ini dilempar. Informasi ini bisa menolong kita untuk melacak dari mana kesalahan terjadi.

Ingat bahwa baik ArrayIndexOutOfBoundsException dan NullPointerException adalah kelas turunan dari
RuntimeException. Kita bisa menangkap semua pengecualian dalam kelas RuntimeException dengan klausa
catch tunggal, misalnya :

try {
double determinan = M[0][0]*M[1][1] - M[0][1]*M[1][0];
System.out.println("Determinan matriks M adalah " + determinan);
}
catch ( RuntimeException e ) {
System.out.println("Maaf, ada kesalahan yang terjadi.");
e.printStackTrace();
}

Karena objek yang bertipe ArrayIndexOutOfBoundsException maupun NullPointerException juga bertipe


RuntimeException, maka perintah seperti di atas akan menangkap kesalahan indeks maupun kesalahan
pointer kosong dan juga pengecualian runtime yang lain. Ini menunjukkan mengapa kelas pengecualian
disusun dalam bentuk hirarki kelas. Kita bisa membuat klausa catch secara spesifik hingga tahu persis apa
yang salah, atau menggunakan klausa penangkap umum.

Contoh di atas mungkin tidak begitu realistis. Sepertinya kita jarang harus menangani kesalahan indeks
ataupun kesalahan pointer kosong seperti di atas. Masalahnya mungkin terlalu banyak, dan mungkin kita akan
bosan jika harus menulis try ... catch setiap kali kita menggunakan array. Yang penting kita mengisi variabel
tersebut dengan sesuatu yang bukan null dan menjaga agar program tidak keluar indeks sudah cukup. Oleh
karena itu kita sebut penanganan ini tidak wajib. Akan ada banyak hal yang bisa jadi masalah. (Makanya
penanganan pengecualian tidak menyebabkan program makin tangguh. Ia hanya memberikan alat yang
mungkin kita gunakan dengan cara memberi tahu di mana kesalahan mungkin muncul).

Bentuk pernyataan try sebenarnya lebih kompleks dari contoh di atas. Sintaksnya secara umum dapat ditulis
seperti:

try {
perintah
}
klausa_catch_tambahan
klausa_finally_tambahan

Ingat bahwa di sini blok ( yaitu { dan } ) diperlukan, meskipun jika perintah hanya terdiri dari satu perintah.
Pernyataan try boleh tidak dimasukkan, dan juga klausa finally boleh ada boleh tidak. (Pernyataan try harus
memiliki satu klausa finally atau catch). Sintaks dari klausa catch adalah:

catch (nama_kelas_pengecualian nama_variabel) {


pernyataan
}

dan sintaks klausa finally adalah

finally {
pernyataan

Halaman 14 dari 77
}

Semantik dari klausa finally yaitu pernyataan di dalam klausa finally akan dijamin untuk dilaksanakan
sebagai perintah akhir dari pernyataan try, tidak peduli apakah ada pengecualian yang dilempar atau tidak.
Pada dasarnya klausa finally dimaksudkan untuk melakukan langkah pembersihan yang tidak boleh
dihilangkan.

Ada beberapa kejadian di mana suatu program memang harus melempar pengecualian. Misalnya apabila
program tersebut menemukan adanya kesalahan pengurutan atau kesalahan lain, tapi tidak ada cara yang
tepat untuk menanganinya di tempat di mana kesalahan tersebut ditemukan. Program bisa melempar
pengecualian dengan harapan di bagian lain pengecualian ini akan ditangkap dan diproses.

Untuk melempar pengecualian, kita bisa menggunakan pernyataan throw dengan sintaks :

throw objek_pengecualian;
objek_pengecualian harus merupakan objek yang bertipe kelas yang diturunkan dari Throwable. Biasanya
merupakan kelas turunan dari kelas Exception. Dalam banyak kasus, biasanya objek tersebut dibuat dengan
operator new, misalnya :
throw new ArithmeticException("Pembagian dengan nol");
Parameter dalam konstruktor adalah pesan kesalahan dalam objek pengecualian.
Pengecualian bisa dilempar baik oleh sistem (karena terjadinya kesalahan) atau oleh pernyataan throw.
Pengecualian ini ditangani dengan cara yang sama. Misalnya suatu pengecualian dilempar dari pernyataan
try. Jika pernyataan try tersebut memiliki klausa catch untuk menangani tipe pengecualian tersebut, maka
klausa ini akan melompat ke klausa catch dan menjalankan perintah di dalamnya. Pengecualian tersebut
telah ditangani.
Setelah menangani pengecualian tersebut, komputer akan menjalankan klausa finally, jika ada. Kemudian
program akan melanjutkan program seperti biasa. Jika suatu pengecualian tidak ditangkap dan ditangani,
maka pengolahan pengecualian akan berlanjut.
Jika pengecualian dilempar pada saat eksekusi suatu subrutin dan pengecualian tersebut tidak ditangani di
dalam subrutin yang sama, maka subrutin tersebut akan dihentikan (setelah menjalankan klausa finally, jika
tersedia). Kemudian rutin yang memanggil subrutin tersebut memiliki kesempatan untuk menangani
pengecualian tersebut. Artinya, jika subrutin tersebut dipanggil di dalam pernyataan try dan memiliki klausa
catch yang cocok, maka klausa catch tersebut akan dieksekusi dan program akan berlanjut seperti biasa.
Lagi-lagi jika rutin tersebut tidak menangani pengecualian tersebut, rutin tersebut akan dihentikan dan rutin
yang memanggilnya akan mencoba menangani pengecualian tersebut. Pengecualian akan menghentikan
program secara keseluruhan jika keseluruhan rantai panggil subrutin hingga main() tidak menangani
pengecualian tersebut.

Suatu subrutin yang mungkin melempar pengecualian dapat memberi tahu dengan menambahkan klausa
"throws nama_kelas_pengecualian" pada definisi suatu subrutin. Misalnya :

static double akar(double A, double B, double C)


throws IllegalArgumentException {
// Menghasilkan akar yang lebih besar
// dari persamaan kuadrat A*x*x + B*x + C = 0.
// (Lempar pengecualian jika A == 0 atau B*B-4*A*C < 0.)
if (A == 0) {
throw new IllegalArgumentException("A tidak boleh nol.");
}
else {
double diskriminan = B*B - 4*A*C;
if (diskriminan < 0)
throw new IllegalArgumentException("Diskriminan < nol.");
return (-B + Math.sqrt(diskriminan)) / (2*A);
}
}

Seperti kita diskusikan pada bagian sebelumnya, perhitungan dalam subrutin ini memiliki kondisi awal di mana
A != 0 dan B*B-4*A*C >= 0. Subrutin akan melempar pengecualian dengan tipe IllegalArgumentException
jika salah satu dari kondisi awal ini tidak dipenuhi. Jika kondisi ilegal ditemukan dalam suatu subrutin,
melempar pengecualian kadang kala menjadi pilihan yang lebih bijaksana. Jika program yang memanggil
subrutin tersebut mengetahui bagaimana cara yang tepat untuk menangani pengecualian tersebut, program
tersebut dapat menangkapnya. JIka tidak, maka program akan crash dan programmer akan tahu apa yang
harus diperbaiki.

Halaman 15 dari 77
Penanganan Pengecualian Wajib
Dalam contoh-contoh sebelumnya, mendeklarasikan subrutin akar() yang dapat melempar pengecualian
IllegalArgumentException adalah sesuatu yang "sopan" untuk pembaca rutin tersebut. Menangani
IllegalArgumentException bukan sesuatu yang "wajib" dilakukan. Subruin dapat melempar
IllegalArgumentException tanpa mengumumkan kemungkinan tersebut. Kemudian program yang memanggil
rutin tersebut bebas untuk menangkap atau membiarkan pengecualian yang dilempar oleh rutin tersebut.
Begitu juga halnya dengan tipe NullPointerException[/code, programmer bebas untuk menangkap atau
mengabaikan pengecualian tersebut.</p><p>Untuk kelas pengecualian yang mewajibkan penanganan
pengecualian, siatuasinya sedikit berbeda. Jika suatu subrutin bisa melempar pengecualian seperti ini, maka
klausa [code]throws harus ditulis pada definisi subrutin. Jika tidak, maka compiler akan menampilkan
kesalahan sintaks.
Di sisi lain, misalnya suatu pernyataan dalam program dapat melemparkan pengecualian yang mewajibkan
penanganan pengecualian. Pernyataan tersebut bisa berasal dari pernyataan throw yang sengaja
dilemparkan atau hasil dari pemanggilan suatu subrutin yang melempar pengecualian tersebut. Pengecualian
ini harus ditangani dengan salah satu dari dua cara, yaitu : Menggunakan pernyataan try yang memiliki klausa
catch untuk menangani pengecualian tersebut. Atau dengan menambahkan klausa throws di kepala definisi
subrutin.
Jika klausa throws digunakan, maka subrutin lain yang memanggil subrutin kita akan bertanggung jawab
menangani pengecualian tersebut. Jika kita tidak menangani pengecualian tersebut dengan cara-cara di atas,
maka Java akan menganggap sebagai kesalahan sintaks.
Penanganan pengecualian menjadi wajib untuk kelas yang bukan kelas turunan dari Error atau
RuntimeException. Pengecualian yang wajib biasanya merupakan kondisi yang berada di luar jangkauan
programmer. Misalnya, input ilegal atau aksi ilegal oleh user. Program tangguh harus bisa menangani kondisi
seperti ini. Desain Java tidak memungkinkan programmer untuk mengabaikan kondisi tersebut.
Di antara pengecualian yang mewajibkan penanganan pengecualian adalah yang berhubungan dengan rutin
input/output. Artinya kita tidak boleh menggunakan rutin ini jika kita mengetahui bagaimana menangani
pengecualian. Bagian berikutnya akan membahas tentang contoh-contoh input/output dan penanganan
pengecualian dengan lebih gamblang
D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
E. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi tentang Exception
Handling kepada siswa dengan rasa tanggung
jawab dengan memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif
dan kreatif dengan memberi penjelasan tentang
Exception Handling

2 Kegiatan inti 70’ Diskusi,prakt


a. Eksplorasi ek &
1. Guru membagi siswa menjadi kelompok-kelompok Pengamatan
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi dan praktek secara komunikatif
tentang tentang Exception Handling
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang Exception Handling
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi dan praktek secara mandiri dan

Halaman 16 dari 77
bertanggungjawab sedangkan kelompok lain
merespon secara demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
Exception Handling
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang pengertitan
tentang Exception Handling dengan
bertanggungjawab.
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

Sumber dan media pembelajaran


 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
F. Penilaian :
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :

Diketahui Oleh Boyolali, 12 juli 2012


Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

Halaman 17 dari 77
RENCANA PELAKSANAAN PEMBELAJARAN

A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali


Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/5
Pertemuan Ke : 1,2
Alokasi Waktu : 16 x 45 Menit
Standar Kompetensi : Membuat program aplikasi web berbasis java
Kompetensi Dasar :Menerapkan Multi-threading
Indikator :
 Menggunakan threadClass dan sinkronisasinya (Mandiri)
 Menerapkan penggunaan Thread tingkat lanjut (concurrentexecution, runnableinterface,
daemonthreads, threadpriority, threadgroups)(Mandiri)
B. Tujuan Pembelajaran :
 Membuat dan menjalankan tread
 Menghentikan tread
 Mengenal Method
 Menentukan prioritas tread
C. Materi Ajar :
Dasar-dasar Thread

Cara termudah untuk membuat thread adalah membuat kelas turunan dari java.lang.Thread, yang memiliki semua
metode untuk membuat dan menjalankan thread. Metode paling penting adalah run(), yang bisa kita beban-lebihkan
untuk melakukan tugas yang kita butuhkan. Atau dengan kata lain run() adalah metode yang akan dijalankan
bersamaan dengan thread lain.

Contoh berikut membuat 5 thread, masing-masing memiliki nomor identifikasi unik yang dibuat dengan
menggunakan variabel statik. Metode run() dibebanlebihkan untuk menghitung mundur hingga hitungMundur
bernilai nol. Setelah metode run() selesai dijalankan, thread akan mati secara otomatis.

(Contoh-contoh pada bagian ini bisa diunduh untuk diimport ke dalam Eclipse. Lihat akhir halaman ini untuk
tautannya)

package com.lyracc.threaddasar1;

public class ThreadDasar extends Thread {


private int hitungMundur = 5;
private static int jumlahThread = 0;

public ThreadDasar() {
super("Thread ke-" + ++jumlahThread);
start();
}

public void run() {


while (true) {
System.out.println( getName() + " : " + hitungMundur );
if (--hitungMundur == 0)
return;
}
}

Halaman 18 dari 77
/**
* @param args
*/
public static void main(String[] args) {
for(int i = 0; i < 5; i++)
new ThreadDasar();
}
}

Pada contoh program di atas, objek thread diberi nama melalui argumen pada konstruktornya. Nama ini dipanggil
ketika metode run() melakukan penghitungan mundur, yaitu dengan menggunakan metode getName().

Metode run() pada thread biasanya memiliki perulangan internal yang akan terus menerus dipanggil hingga tidak
lagi digunakan. Kita harus membuat suatu kondisi sehingga bisa keluar dari perulangan tersebut (misalnya pada
contoh di atas, perulangan akan selesai jika hitungMundur bernilai 0). Seringkali, run() dijalankan di dalam
perulangan yang tak pernah berhenti (kita akan lihat nanti bagaimana menghentikan suatu thread dengan aman).

Pada metode main(), thread dibuat beberapa kali kemudian dijalankan. Metode start() pada kelas Thread digunakan
untuk melakukan tugas tertentu sebelum metode run() dijalankan. Jadi, langkah-langkahnya adalah : konstruktor
dipanggil untuk membuat objek, kemudian memanggil start() untuk melakukan konfigurasi thread, dan kemudian
metode run() dijalankan. Jika kita tidak memanggil start() maka metode run() tidak akan pernah dijalankan.

Keluaran dari program ini akan berbeda setiap kali dijalankan, karena penjadwalan thread tidak dapat ditentukan
dengan pasti (non-deterministik). Bahkan, kita bisa melihat perbedaan yang sangat jelas ketika kita menggunakan
versi JDK yang berbeda. Misalnya, JDK lama tidak melakukan pembagian waktu lebih cepat, artinya, 1 thread
mungkin bisa melakukan tugasnya dengan cepat hingga selesai sebelum thread lain dijalankan. Pada JDK lain kita
akan melihat program akan mencetak 5 untuk seluruh thread hingga 1 untuk seluruh thread. Artinya pembagian
waktunya lebih baik, karena setiap thread memiliki kesempatan yang sama untuk menjalankan program. Karenanya,
untuk membuat suatu program multi-threading, kita tidak boleh terpaku pada keluaran suatu kompiler. Program kita
harus dibuat seaman mungkin.

Ketika objek Thread dibuat pada metode main(), kita lihat bahwa kita tidak menyimpan referensi ke objek tersebut.
Pada objek biasa, tentunya objek ini akan langsung ditangkap oleh pemulung memori karena objek ini tidak
direferensikan di manapun. Akan tetapi pada thread, objek hanya bisa diambil oleh pemulung memori jika metode
run() selesai dijalankan. Pada contoh di atas, program masih bisa berjalan seperti biasa, dan objek Thread akan
diberikan kepada pemulung memori setelah mencetak angka 1.

Yielding (menghasilkan)

Jika kita tahu bahwa kita telah mendapatkan hasil yang kita inginkan pada metode run(), kita bisa memberi tahu
penjadwal thread bahwa kita telah selesai dan memberi jalan kepada thread lain untuk mendapatkan kesempatan
pada CPU. Akan tetapi ini hanya sebagai petunjuk, yang artinya belum tentu dijalankan oleh penjadwal thread.

Misalnya pada contoh di atas, kita bisa mengganti isi metode run() dengan

public void run() {


while (true) {
System.out.println( getName() + " : " + hitungMundur );
if (--hitungMundur == 0)
return;
yield();
}
}

Secara umum, yield mungkin berguna untuk situasi yang agak langka, dan kita tidak bisa menggunakannya secara
serius untuk memperbaiki kinerja aplikasi kita.

Tidur (sleeping)

Cara lain untuk mengatur perilaku thread kita adalah dengan memanggil sleep untuk menunda eksekusi thread
selama waktu tertentu (dalam mili detik). Misalnya pada kode berikut, kita ubah metode run() menjadi seperti :

Halaman 19 dari 77
public void run() {
while (true) {
System.out.println( getName() + " : " + hitungMundur );
if (--hitungMundur == 0)
return;
try {
sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}

Ketika kita memanggil sleep(), metode ini harus diletakkan di dalam blok try karena sleep() bisa melemparkan
pengecualian, yaitu jika tidurnya diganggu sebelum waktunya selesai. Hal ini terhadi misalnya apabila thread lain
yang memiliki referensi ke thread ini memanggil interrupt() pada thread ini. Pada contoh di atas, kita lemparkan lagi
pengecualian yang terjadi dengan pengecualian lain bertipe RuntimeException, karena kita tidak tahu bagaimana
pengecualian ini harus ditangani, dan membiarkan metode yang memanggilnya menangkap pengecualian baru ini.

Metode sleep() tidak digunakan untuk mengatur bagaimana thread akan berjalan menurut urutan tertentu. Metode
ini hanya menghentikan eksekusi suatu thread sementara. Yang dijamin adalah bahwa thread akan tidur selama
paling sedikit 100 mili detik (atau mungkin sedikit lebih lama hingga thread jalan kembali). Urutan thread diatur oleh
penjadwal thread yang memiliki mekanisme sendiri tergantung dari keadaan thread lain atau bahkan aplikasi lain di
luar Java, oleh karena itu sifatnya disebut non-deterministik.

Jika kita harus mengatur thread mana dahulu yang harus dijalankan, cara terbaik mungkin tidak menggunakan
thread sama sekali, atau mendesain agar suatu thread memanggil thread lain dengan suatu urutan tertentu.
Tentunya cara terakhir lebih rumit dari yang dibayangkan.

Prioritas

Prioritas suatu thread digunakan untuk memberi tahu penjadwal thread tentang prioritas thread tersebut. Tetap saja
urutannya tidak bisa ditentukan karena sifatnya yang non-deterministik. Jika ada beberapa thread yang sedang
diblok dan menunggu giliran untuk dijalankan, penjadwal thread akan cenderung menjalankan thread dengan
prioritas tertinggi terlebih dahulu. Akan tetapi, tidak berarti thread dengan prioritas rendah tidak akan pernah
dijalankan, hanya lebih jarang dijalankan ketimbang thread dengan prioritas tinggi.

Perhatikan contoh berikut :

package com.lyracc.prioritasthread;

public class PrioritasThread extends Thread {


private int hitungMundur = 5;
private volatile double d = 0; // No optimization

public PrioritasThread(int prioritas) {


setPriority(prioritas);
start();
}

public void run() {


while (true) {
for(int i = 1; i < 100000; i++)
d = d + (Math.PI + Math.E) / (double)i;
System.out.println(this.toString() + " : " + hitungMundur);
if (--hitungMundur == 0)
return;
}
}

/**
* @param args
*/
public static void main(String[] args) {
new PrioritasThread(Thread.MAX_PRIORITY);

Halaman 20 dari 77
for(int i = 0; i < 5; i++)
new PrioritasThread(Thread.MIN_PRIORITY);
}
}

Pada contoh di atas, kita ubah konstruktornya untuk mengeset prioritas kemudian menjalankan thread. Pada metode
main() kita buat 6 thread, yang pertama dengan prioritas maximum, dan yang lain dengan prioritas minimum.
Perhatikan keluarannya, bagaimana thread pertama dijalankan lebih dulu sedangkan thread-thread lain berjalan
seperti biasa dalam kondisi acak karena memiliki prioritas yang sama.

Di dalam metode run() kita lakukan perhitungan matematika selama 100.000 kali. Tentunya ini perhitungan yang
memakan waktu sehingga setiap thread harus menunggu giliran di saat thread lain sedang dijalankan. Tanpa
perhitungan ini, thread akan dilaksanakan sangat cepat dan kita tidak bisa melihat efek dari prioritas thread.

Prioritas suatu thread bisa kita set kapan saja (tidak harus pada konstruktor) dengan metode setPriority(int prioritas)
dan kita bisa membaca prioritas suatu thread dengan menggunakan metode getPriority().

Meskipun JDK memiliki 10 tingkat prioritas, akan tetapi sistem operasi memiliki tingkat prioritas yang berbeda-beda.
Windows misalnya memiliki 7 tingkat dan Solaris memiliki 231 tingkat prioritas. Yang lebih pasti adalah menggunakan
konstanta MAX_PRIORITY, NORM_PRIORITY, dan MIN_PRIORITY pada kelas thread.

Thread Daemon

Thread daemon adalah thread yang bekerja di belakang layar yang memberikan layanan umum kepada thread-
thread lain selama program berjalan, akan tetapi thread ini bukan bagian penting dari suatu program. Artinya ketika
semua thread yang bukan daemon selesai dijalankan, program akan berhenti, dan jika masih ada thread non-daemon
yang masih dieksekusi, program tidak akan berhenti.

Perhatikan contoh program berikut ini.

package com.lyracc.threaddaemon;

public class ThreadDaemon extends Thread {


public ThreadDaemon() {
setDaemon(true); // Harus dipanggil sebelum start
start();
}

public void run() {


while (true) {
try {
sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(this);
}
}

/**
* @param args
*/
public static void main(String[] args) {
for (int i = 0; i < 5; i++)
new ThreadDaemon();
}

Perintah setDaemon() sebelum metode start() dipanggil. Pada metode run(), thread diperintahkan untuk tidur selama
100 mili detik. Ketika semua thread dimulai, program langsung berhenti sebelum thread bisa mencetak dirinya. Ini
karena semua thread kecuali main() adalah thread daemon. Hanya thread non-daemon saja yang bisa mencegah
program untuk terus berjalan.

Halaman 21 dari 77
Untuk mengetahui suatu thread adalah thread daemon atau bukan, kita bisa menggunakan perintah isDaemon().
Suatu thread daemon akan membuat thread yang juga merupakan thread daemon.

Menggabungkan thread

Perintah join() bisa digunakan pada thread lain untuk menunda eksekusi hingga thread lain tersebut selesai
dijalankan. Misalnya, jika thread a memanggil t.join() pada thread t, maka eksekusi thread a akan terhenti sementara
hingga thread t selesai dijalankan (atau ketika t.isAlive() bernilai false).

Kita bisa juga memanggil join() dengan argumen waktu (baik dalam mili detik, ataupun milidetik dan nanodetik),
yaitu jika thread target tidak selesai dalam kurun waktu tersebut, eksekusi pada thread induk akan kembali dilakukan.

Panggilan join() bisa dibatalkan dengan memanggil interrupt() pada thread induk, sehingga klausa try ... catch
diperlukan pada metode join().

Mari kita lihat contoh berikut ini.

package com.lyracc.joindemo;

class ThreadPemalas extends Thread {


private int waktu;

public ThreadPemalas(String namaThread, int waktuTidur) {


super(namaThread);
waktu = waktuTidur;
start();
}

public void run() {


try {
sleep(waktu);
} catch (InterruptedException e) {
System.out.println(getName() + " dibangunkan. "
+ "isInterrupted(): " + isInterrupted());
return;
}
System.out.println(getName() + " sudah bangun.");
}
}

class ThreadPenggabung extends Thread {


private ThreadPemalas sleeper;

public ThreadPenggabung(String namaThread, ThreadPemalas pemalas) {


super(namaThread);
this.sleeper = pemalas;
start();
}

public void run() {


try {
sleeper.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(getName() + " selesai setelah " + sleeper.getName());
}
}

public class JoinDemo {


/**
* @param args
*/
public static void main(String[] args) {
ThreadPemalas brr = new ThreadPemalas("brr", 2000);

Halaman 22 dari 77
ThreadPemalas grr = new ThreadPemalas("grr", 2000);

ThreadPenggabung saya = new ThreadPenggabung("saya",brr);


ThreadPenggabung anda = new ThreadPenggabung("anda",grr);

grr.interrupt();
}

Hasil keluarannya adalah seperti pada gambar berikut.

ThreadPemalas adalah thread yang akan ditidurkan sepanjang waktu yang diberikan pada konstruktornya. Metode
run() bisa berhenti jika waktu tidur sudah habis atau ada interupsi yang terjadi. Di dalam klausa catch, interupsi
akan dilaporkan. Fungsi isInterrupted() melaporkan apakah thread ini diinterupsi atau tidak. Akan tetapi ketika thread
ini diinterupsi, kemudian pengecualiannya ditangkap oleh klausa catch, misalnya, maka tanda interupsi akan segera
dihapus. Oleh karenanya isInterrupted() akan selalu bernilai false pada program di atas. Tanda interupsi akan
digunakan pada situasi lain yang mungkin berada di luar pengecualian.

ThreadPenggabung adalah thread yang menunggu hingga ThreadPemalas selesai dengan tugasnya, yaitu dengan
memanggil join() ke objek ThreadPemalas pada metode run()-nya.

Pada metode utama main(), setiap ThreadPemalas tersambung pada ThreadPenggabung. Dan kita lihat pada
keluarannya, jika ThreadPemalas selesai bekerja, baik karena dibangunkan melalui interupsi atau karena waktu
sudah selesai, ThreadPenggabung yang tersambung juga akan menyelesaikan tugasnya.

Variasi Kode

Pada contoh-contoh di atas, semua objek thread yang kita buat diturunkan dari kelas Thread. Kita hanya membuat
objek yang berfungsi sebagai thread dan tidak memiliki tugas dan fungsi lain. Akan tetapi, kelas kita mungkin saja
merupakan kelas turunan dari kelas lain. Karena Java tidak mendukung pewarisan berganda, kita tidak bisa
menurunkan kelas tersebut bersamaan dengan kelas Thread.

Dalam hal ini, kita bisa menggunakan cara alternatif yaitu dengan mengimplementasi interface Runnable. Runnable
hanya memiliki satu metode untuk diimplementasi, yaitu metode run().

Contoh berikut mendemonstrasikan contoh penggunaannya :

package com.lyracc.runnablesederhana;

public class RunnableSederhana implements Runnable {


private int hitungMundur = 5;

public void run() {


while (true) {
System.out.println(Thread.currentThread().getName() + " : " + hitungMundur);
if (--hitungMundur == 0)
return;
}
}

public static void main(String[] args) {


for (int i = 1; i <= 5; i++) {
// Buat thread baru dan jalankan
Thread a = new Thread(new RunnableSederhana(), "Thread ke-" + i);
a.start();
}
}

Halaman 23 dari 77
}

Satu-satunya yang dibutuhkan oleh kelas RunnableSederhana adalah metode run(), akan tetapi jika kita ingin
melakukan hal lainnya, seperti getName(), sleep(), dan lainnya, kita harus secara eksplisit memberikan referensi
dengan menggunakan Thread.currentThread().

Ketika suatu kelas mengimplementasikan interface Runnable, artinya kelas ini memiliki metode bernama run(), akan
tetapi tidak berarti bahwa kelas ini bisa melakukan sesuatu seperti kelas Thread atau kelas-kelas turunan yang kita
buat dari kelas ini. Kita harus membuat objek Thread sendiri seperti ditunjukkan dalam metode main() di atas,
kemudian menjalankan start() sendiri.

Kemudahan yang ditawarkan oleh interface Runnable adalah kemungkinan untuk menggabungkannya dengan kelas
dan interface lain. Misalnya kita ingin membuat kelas baru yang merupakan kelas turunan dari suatu kelas lain. Kita
cukup menambahkan impement Runnable pada definisi kelasnya untuk membuat kelas yang bisa kita jadikan thread.
Dengan cara ini, kita masih bisa mengakses anggota kelas induk secara langsung, tanpa melalui objek lain. Akan
tetapi, kelas dalam (inner class) juga bisa mengakses anggota kelas luar (outer class). Kadang-kadang kita ingin
juga membuat kelas dalam yang merupakan turunan dari kelas Thread.

Perhatikan beberapa variasi untuk mendeklarasikan dan menggunakan thread pada contoh berikut ini.

package com.lyracc.variasithread;

// Kelas dalam bernama


class KelasDalamBernama {
private int hitungMundur = 5;
private Dalam dalam;

// Kelas Dalam adalah kelas dalam (inner class) yang


// merupakan kelas turunan kelas Thread
private class Dalam extends Thread {
Dalam(String nama) {
super(nama);
start();
}

public void run() {


while (true) {
System.out.println(getName() + " : " + hitungMundur);
if (--hitungMundur == 0)
return;
try {
sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
} // akhir Dalam

// Konstruktor KelasDalamBernama
// Membuat objek baru yang merupakan instansi kelas Dalam
public KelasDalamBernama(String nama) {
dalam = new Dalam(nama);
}
} // akhir KelasDalamBernama

// Kelas dalam anonim


class KelasDalamAnonim {
private int hitungMundur = 5;
private Thread t;

// Konstruktor KelasDalamAnonim
public KelasDalamAnonim(String nama) {
// Kelas anonim turunan Thread
t = new Thread(nama) {

Halaman 24 dari 77
public void run() {
while (true) {
System.out.println(getName() + " : " + hitungMundur);
if (--hitungMundur == 0)
return;
try {
sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}; // akhir kelas anonim
t.start();
}
} // akhir KelasDalamAnonim

// Kelas dalam implementasi runnable bernama


class KelasRunnableBernama {
private int hitungMundur = 5;
private Dalam dalam;

// Kelas Dalam adalah kelas dalam (inner class) yang


// merupakan kelas yang mengimplementasi Runnable
private class Dalam implements Runnable {
Thread t;

Dalam(String nama) {
t = new Thread(this, nama);
t.start();
}

public void run() {


while (true) {
System.out.println(t.getName() + " : " + hitungMundur);
if (--hitungMundur == 0)
return;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
} // akhir kelas Dalam

// Konstruktor KelasRunnableBernama
// Membuat objek baru yang merupakan instansi kelas Dalam
public KelasRunnableBernama(String nama) {
dalam = new Dalam(nama);
}
} // akhir KelasRunnableBernama

// Kelas dalam implementasi runnable anonim


class KelasRunnableAnonim {
private int hitungMundur = 5;
private Thread t;

public KelasRunnableAnonim(String nama) {


t = new Thread(new Runnable() {
public void run() {
while (true) {
System.out.println(Thread.currentThread().getName() + " : " + hitungMundur);
if (--hitungMundur == 0)
return;
try {
Thread.sleep(10);

Halaman 25 dari 77
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}

}, nama); // akhir kelas dalam anonim


t.start();
}
} // akhir KelasRunnableAnonim

// Menjalankan thread dari dalam metode dan kelas anonim


class ThreadViaMetode {
private int hitungMundur = 5;
private Thread t;
private String nama;

public ThreadViaMetode(String nama) {


this.nama = nama;
}

public void runThread() {


if (t == null) {
// Definisi kelas anonim dari dalam metode
t = new Thread(nama) {
public void run() {
while (true) {
System.out.println(getName() + " : " + hitungMundur);
if (--hitungMundur == 0)
return;
try {
sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}; // akhir kelas dalam anonim
t.start();
}
}
} // akhir ThreadViaMetode

public class VariasiThread {


public static void main(String[] args) {
new KelasDalamBernama("KelasDalamBernama");
new KelasDalamAnonim("KelasDalamAnonim");
new KelasRunnableBernama("KelasRunnableBernama");
new KelasRunnableAnonim("KelasRunnableAnonim");
new ThreadViaMetode("ThreadViaMetode").runThread();
}
}

Jika kita menggunakan Runnable, pada dasarnya kita menyatakan bahwa kita ingin membuat suatu proses -- yang
implementasinya berada di dalam metode run() -- bukan suatu objek yang melakukan proses tertentu. Tentunya hal
ini tergantung dari cara pandang kita, apakah kita ingin menganggap suatu thread sebagai objek atau sesuatu yang
sama sekali berbeda, yaitu proses.

Jika kita menganggap suatu thread sebagai proses, tetntunya kita akan terbebas dari cara pandang berorientasi
objek yaitu "semuanya adalah objek". Artinya juga, kita tidak perlu membuat seluruh kelas menjadi Runnable jika
hanya kita ingin memulai proses di bagian tertentu program kita. Karenanya, mungkin lebih masuk akal untuk
menyembunyikan thread di dalam kelas kita menggunakan kelas dalam.

KelasDalamBernama[.code] membuat kelas dalam yang merupakan kelas turunan dari kelas Thread, dan membuat
instansi kelas ini di dalam konstruktornya. Cara ini baik jika kita ingin kelas dalam tersebut memiliki suatu kemampuan

Halaman 26 dari 77
tertentu (metode lain) yang ingin kita gunakan. Akan tetapi, seringkali kita membuat thread hanya untuk
memanfaatkan [code]Thread saja, artinya kita mungkin tidak perlu membuat kelas yang memiliki nama.

KelasDalamAnonim adalah alternatif dari KelasDalamBernama di mana kelas dalamnya merupakan kelas anonim
yang merupakan kelas turunan dari kelas Thread. Kelas anonim ini dibuat di dalam konstruktor dan disimpan dalam
bentuk referensi t bertipe Thread. Jika metode kelas lain membutuhkan akses ke t, maka kita bisa menggunakannya
seperti Thread biasa tanpa perlu mengetahui tipe objek t sesungguhnya.

Kelas ketiga dan keempat pada contoh di atas mirip dengan contoh pertama dan kedua, akan tetapi menggunakan
interface Runnable. Contoh ini hanya ingin menunjukkan bahwa menggunakan Runnable tidak menambah nilai apa-
apa, kecuali membuat kodenya lebih sulit dibaca.

Kelas ThreadViaMetode menunjukkan bagaimana membuat thread dari dalam metode. Kita bisa memanggil metode
tersebut jika kita siap untuk menjalankan thread ini. Metode ini akan selesai setelah thread berjalan. Jika thread
hanya melakukan tugas sampingan, mungkin cara ini lebih cocok daripada mengimplementasikan kelas khusus untuk
melakukan fungsi-fungsi thread.

D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
E. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi multithreading kepada
siswa dengan rasa tanggung jawab dengan
memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif
dan kreatif dengan memberi penjelasan tentang
multithreading
2 Kegiatan inti 70’ Diskusi
a. Eksplorasi ,praktek&
1. Guru membagi siswa menjadi kelompok-kelompok Pengamatan
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi secara komunikatif tentang
multithreading
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang multithreading
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
multithreading
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang pengertitan
multithreading dengan bertanggungjawab.

Halaman 27 dari 77
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

Sumber dan media pembelajaran


 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
F. Penilaian :
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :

Diketahui Oleh Boyolali, 12 juli 2012


Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

Halaman 28 dari 77
RENCANA PELAKSANAAN PEMBELAJARAN

A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali


Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/5
Alokasi Waktu : 16 x 45 Menit
Pertemuan Ke- : 1,2
Standar Kompetensi : Membuat program aplikasi web berbasis java

Kompetensi Dasar :menjelaskan applet


Indikator :
 Menjelaskan definisi Applet ( Rasa ingin tahu )
 Menjelaskan Cara menanamkan applet dalam HTML ( Rasa ingin tahu )
 Menjelaskan GUI dengan Applet ( Rasa ingin tahu )
 Menjelaskan Parameter dalam Applet ( Rasa ingin tahu )
 Menjelaskan Animasi dengan Applet ( Rasa ingin tahu )
B. Tujuan Pembelajaran :
 Memahami aplplet pada java
C. Materi Ajar :
Applets
Applets adalah satu dari fitur yang paling menarik dalam java. Applet merupakan program yang
Anda jalankan melalui web browser. Anda akan belajar tentang membentuk applet pada
pembelajaran ini.Setelah melengkapi pembelajaran ini, anda harus dapat :
1. Mendefinisikan apa yang dimaksud dengan applet
2. Membentuk applet anda sendiri
3. Mengetahui siklus yang terdapat pada applet Init,start,stop,destroy
4.Menggunakan methods applet yang lain paint,showStatus,Methods untuk memainkan sebuah
audio clip
5. Memahami html tag pada applet
Membentuk Applets
Sebuah applet adalah tipe yang spesial dari program java yang dieksekusi melalui internet. Secara
khusus berjalan pada suatu web browser seperti Netscape Navigator,Mozilla, atau Microsoft Internet
Explorer. Bagaimanapun, jika dibandingkan dengan aplikasi Java yang normal, tidak diijinkan
mengakses applet pada komputer yang mana dijalankan untuk alasan keamanan. Applet ini cukup
terbatas jika dibandingkan dengan aplikasi java. Pada module ini, Anda akan mempelajari tentang
membuat applet menggunakan AWT.
Hello World Applet
Class Applet adalah sebuah subclass dari class Panel yang didefinisikan dalam AWT. Jalan terbaik
untuk memahami bagaimana untuk membentuk Applet adalah dengan contoh. Jadi, berikut ini
adalah contoh applet sederhana yang menampilkan "Hello world!".
import java.awt.*;
import java.applet.*;

Halaman 29 dari 77
/* masukkan bagian ini dalam kode html
<applet code="AppletDemo" width=300 height=100>

*/

</applet>

public class AppletDemo extends Applet {


public void paint(Graphics g) {
g.drawString("Hello world!", 80, 25);

Setelah proses kompilasi, usahakan jalankan contoh ini menggunakan baris perintah
java. Apa yang terjadi? Ingat bahwa applet adalah aplikasi java yang spesial. Mereka
tidak dieksekusi menggunakan perintah java. Bahkan applet berjalan pada web browser
atau menggunakan applet viewer. Untuk membuka applet melalui sebuah web browser,
secara sederhana buka dokumen HTML dimana applet terintegrasi kedalamnya
menggunakan applet HTML tag (Perintah mengeluarkan kode pada contoh Hello World).

Cara lain untuk menjalankan sebuah applet adalah melalui perintah appletviewer. Untuk
memudahkan ikuti syntax berikut ini:

appletviewer <java filename>

Sebagai contoh, untuk menjalankan contoh applet yang dijalankan , menggunakan:

appletviewer AppletDemo.java

Tag HTML pada contoh yang diberikan mengindikasikan bahwa sebuah applet dibuat
dengan lebar 300 pixel dan tinggi 100 pixel. kemudian, method drawString
menggambar string "Hello world!" pada posisi pixel (80,25) menghitung kebawah dari
bagian kanan.

Halaman 30 dari 77
Ketika membuat sebuah applet, dibutuhkan suatu extend class Applet. Sebagaimana yang disebutkan
sebelumnya, classnya dapat ditemukan dalam java.applet package.Oleh karena itu, mengimport the
java.applet package merupakan suatu keharusan.Juga, telah disebutkan sebelumnya bahwa class Applet
adalah subclass dari class Panel.Hal ini mengimplikasikan bahwa beberapa methods dari class applet
ditemukan dalam class Panel.Untuk mengakses methods atau fields dalam class Panel atau class-class
induk, diperlukan suatu aksi untuk import package java.awt .
Method-Method Applet
Bagian ini membahas methods applet yang akan Anda temukan manfaatnya.
Siklus Applet (The Applet Life Cycle)
Bahkan untuk memulai eksekusi pada main method seperti dalam aplikasi khas Java,
browser atau applet viewer berhubungan dengan applet melalui method-method berikut
:
1. init()
init adalah method yang dipanggil pertama kali. Yang sebenarnya berisi permintaan pertama ketika applet
di load.
2. start()
Setelah meminta method init, mulai dengan method yang dipangil selanjutnya. method ini meminta
dokumen HTML yang ditampilkan applet setiap waktu. Eksekusi ringkasan dengan method ini dilakukan
ketika applet ditampilkan kembali.
3. stop()
Ketika web browser meninggalkan dokumen HTML applet,method ini dipanggil untuk menginformasikan
applet bahwa dia harus menghentikan proses eksekusinya.
4. destroy()
method ini dipanggil ketika applet perlu dihapus dari kelangkapan memory. Method stop selalu dipanggil
sebelum method ini diminta untuk dijalankan.
Ketika membuat applet, sedikitnya beberapa dari method ini telah menolaknya. contoh
applet berikut menolak method berikut.

import java.applet.*;
import java.awt.*;

/*

Halaman 31 dari 77
*/

<applet code="LifeCycleDemo" width=300 height=100>


</applet>

class LifeCycleDemo extends Applet {


String msg ="";
public void init() {
msg += "initializing... ";
repaint();
}
public void start() {
msg += "starting... ";
repaint();
}
public void stop() {
msg += "stopping... ";
repaint();
}
public void destroy() {
msg += "preparing for unloading...";
repaint();
}
public void paint(Graphics g) {

g.drawString(msg, 15, 15);

Contoh dokumen html berikut tergabung dalam applet LifeCycleDemo .

<HTML>
<TITLE>Life Cycle Demo</TITLE>
<applet code="LifeCycleDemo" width=300 height=100>

Halaman 32 dari 77
</applet>
</HTML>
D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
E. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi tentang Applet pada java
kepada siswa dengan rasa tanggung jawab dengan
memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif dan
kreatif dengan memberi penjelasan tentang Applet
pada java

2 Kegiatan inti 70’ Diskusi


a. Eksplorasi ,praktek&
1. Guru membagi siswa menjadi kelompok-kelompok Pengamatan
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi secara komunikatif tentang Applet
pada java
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang Applet pada java
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
Applet pada java
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang Applet pada
java dengan bertanggungjawab.
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program

Halaman 33 dari 77
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

Sumber dan media pembelajaran


 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
F. Penilaian :
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :

Diketahui Oleh Boyolali, 12 juli 2012


Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

Halaman 34 dari 77
RENCANA PELAKSANAAN PEMBELAJARAN

A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali


Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/5
Pertemuan Ke- : 1,2
Alokasi Waktu : 16 x 45 Menit
Standar Kompetensi : Membuat program aplikasi web berbasis java

Kompetensi Dasar :menerapkan konektivitas basis data


Indikator :
 menjelaskan teknologi konektifitas database( Rasa ingin tahu )
 menjelaskan koneksi via JDBC( Rasa ingin tahu )
 menjelaskan arsitektur JDBC( Rasa ingin tahu )
 menjelaskan koneksi dengan MySQL, SQL Server via ODBC, ( Rasa ingin tahu )
B. Tujuan Pembelajaran :
 Konektifitas java dengan database
C. Materi Ajar :

Koneksi Database Java dengan MySQL menggunakan JDBC

Apabila kita ingin membuat sebuah aplikasi maka tidaklah afdol apabila kita tidak terkoneksi
dengan database, DBMS sangat di perlukan dalam pemrograman database pada umumnya. Java
Juga sangat mendukung DBMS ini. Dalam artikel kali ini kita akan membahas tentang Koneksi
Database Java dengan MySQL menggunakan JDBC.

Sebelum kita melakukan koneksi database tentunya kita harus menginstall JDBC driver dan
database MySQL Tapi bila kita menguunakan IDE, Netbeans misalnya maka biasanya JDBC
sudah terinstall pada saat kita menginstall IDE tersebut.

KONEKSI DATABASE JAVA DENGAN MySQL

Apabila sudah terinstall semua, maka langsung saja kita menuju ke source code nya, pada saat
melakukan koneksi database dengan bahasa pemrograman java, kita harus me-load atau
mengaktifkan driver JDBC terlebih dahulu :

1. Class.forName(“com.mysql.jdbc.Driver”);

Setelah kita me-load driver JDBC nya koneksi ke database dapat dilakukan dengan perintah
berikut :

1. Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/database”


,“root”,“rahasia”);

Halaman 35 dari 77
Arti dari perintah diatas :
dbms = jdbc:mysql (mysql)
host mysql server = localhost dengan port 3306
database = database

username mysql = root


password = rahasia

Atau perintah lengkap nya sebagai berikut :

Kita asumsikan namafile nya MySQLConnection.java

1. import java.sql.Connection;
2. import java.sql.DriverManager;
3. import java.sql.SQLException;
4. import java.util.logging.Level;
5. import java.util.logging.Logger;
6.
7. /*
8. * To change this template, choose Tools | Templates
9. * and open the template in the editor.
10. */
11.
12. /**
13. *
14. * By Pasamu
15. */
16.
17. public class MySQLConnection {
18. private String url = “jdbc:mysql://localhost:3306/pasamu”;
19. private String host = “localhost”;
20. private int port = 3306;
21. private String username = “root”;
22. private String password = “vertrigo”;
23. private String database = “sekolah”;
24. private Connection conn = null;
25.
26. public MySQLConnection(){
27. try {
28. try {
29. Class.forName(“com.mysql.jdbc.Driver”).newInstance();
30. } catch (InstantiationException ex) {
31. Logger.getLogger(MySQLConnection.class.getName()).log(Level.SEVERE, null, ex);
32. } catch (IllegalAccessException ex) {
33. Logger.getLogger(MySQLConnection.class.getName()).log(Level.SEVERE, null, ex);
34. }
35. } catch (ClassNotFoundException ex) {
36. Logger.getLogger(MySQLConnection.class.getName()).log(Level.SEVERE, null, ex);
37. }
38. }
39.
40. public Connection getConn() {

Halaman 36 dari 77
41. if(conn==null){
42. try {
43. conn = DriverManager.getConnection(getUrl(), getUsername(), getPassword());
44. } catch (SQLException ex) {
45. Logger.getLogger(MySQLConnection.class.getName()).log(Level.SEVERE, null, ex);
46. }
47. }
48. return conn;
49. }
50.
51. public void setConn(Connection conn) {
52. this.conn = conn;
53. }
54.
55. public String getDatabase() {
56. return database;
57. }
58.
59. public void setDatabase(String database) {
60. this.database = database;
61. }
62.
63. public String getHost() {
64. return host;
65. }
66.
67. public void setHost(String host) {
68. this.host = host;
69. }
70.
71. public String getPassword() {
72. return password;
73. }
74.
75. public void setPassword(String password) {
76. this.password = password;
77. }
78.
79. public int getPort() {
80. return port;
81. }
82.
83. public void setPort(int port) {
84. this.port = port;
85. }
86.
87. public String getUrl() {
88. return url;
89. }
90.
91. public void setUrl(String url) {
92. this.url = url;

Halaman 37 dari 77
93. }
94.
95. public String getUsername() {
96. return username;
97. }
98.
99. public void setUsername(String username) {
100. this.username = username;
101. }
102.
103. }

Kemudia Untuk Mencoba Koneksi, kita buat file baru kita asumsikan namamanya coba.java

1. import com.mysql.jdbc.Connection;
2.
3. /*
4. * To change this template, choose Tools | Templates
5. * and open the template in the editor.
6. */
7. /**
8. *
9. * @author Wahyu Sumartha
10. */
11. public class Test {
12.
13. public static void main(String[] args) {
14. MySQLConnection msqlc = new MySQLConnection();
15. Connection conn = null;
16. msqlc.setUrl(“jdbc:mysql://localhost:3306/pasamu”);
17. msqlc.setUsername(“root”);
18. msqlc.setPassword(“vertrigo”);
19. try {
20. msqlc.setConn(conn);
21. msqlc.getConn();
22. System.out.println(“Koneksi Berhasil”);
23. } catch (Exception e) {
24. e.printStackTrace();
25. System.out.println(“Koneksi Gagal”);
26. }
27. }
28. }

D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
E. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
tanya jawab

Halaman 38 dari 77
1. Guru menciptakan suasana kelas yang religius dengan
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi Konektifitas database
kepada siswa dengan rasa tanggung jawab dengan
memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif dan
kreatif dengan memberi penjelasan tentang
Konektifitas database

2 Kegiatan inti 70’ Diskusi,prakt


a. Eksplorasi ek &
1. Guru membagi siswa menjadi kelompok-kelompok Pengamatan
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi secara komunikatif tentang
Konektifitas database
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang Konektifitas database
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
Konektifitas database
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang Konektifitas
database dengan bertanggungjawab.
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar gemar
membaca dengan membuat laporan hasil diskusi yang
sudah dikembangkan secara individu, dan dikumpulkan
pada pertemuan selanjutnya

Halaman 39 dari 77
Sumber dan media pembelajaran
 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
F. Penilaian :
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :

Diketahui Oleh Boyolali, 12 juli 2012


Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

Halaman 40 dari 77
RENCANA PELAKSANAAN PEMBELAJARAN

A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali


Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/5
Alokasi Waktu : 16 x 45 Menit
Pertemuan Ke- : 1,2
Standar Kompetensi : Membuat program aplikasi web berbasis java

Kompetensi Dasar :Menjelaskan NetworkProgramming


Indikator :
 Mendefinisikan konsep dasar TCP/IP dan java.net package.( Rasa ingin tahu )
 Mendeteksi Hostname(Rasa Ingin tahu)
B. Tujuan Pembelajaran :
 Mendeteksi nomor IP
 Mendeteksi Hostname
 Mendapatkan Informasi URL
C. Materi Ajar :

PEMROGRAMAN JARINGAN JAVA – SOCKET

Socket adalah sebuah abstraksi perangkat lunak yang digunakan sebagai suatu “terminal” dari suatu hubungan antara
dua mesin atau proses yang saling berinterkoneksi.
Di tiap mesin yang saling berinterkoneksi, harus terpasang socket.
Pada J2SE telah disediakan paket java.net yang berisi kelas- kelas dan interface yang menyediakan API (Application
Programming Interface) level rendah (Socket, ServerSocket, DatagramSocket) dan level tinggi (URL, URLConnection).
Socket akan membangun komunikasi antar proses yang sama-sama aktif.
Ilustrasinya adalah :

Kelas java.net.ServerSocket digunakan oleh Server untuk listen koneksi, sedangkan java.net.Socket digunakan oleh
Client untuk inisialisasi koneksi. Setelah client terkoneksi ke server dengan menggunakan Socket, maka ServerSocket
akan mengembalikan status server ke client melalui koneksi yang terbentuk sebelumnya.
Untuk pemrograman Socket Connection Oriented menggunakan kelas java.net.ServerSocket dan java.net.Socket
Untuk pemrograman Socket Connectionless Oriented menggunakan kelas java.net.DatagramSocket.
Kelas java.net.InetAddress
Kelas ini digunakan untuk mengambil informasi IP suatu komputer. Kelas ini bersifat static dan tidak memiliki
konstruktor. Method-methodnya adalah:
- getByName(namahost) yang akan menerima sebuah string nama host dan
mengembalikan alamat IP sebelumnya.
- getLocalHost() yang akan mengembalikan alamat IP dan nama host pada
komputer lokal.
Contoh :
import java.net.*;
public class AmbilIP {

Halaman 41 dari 77
public static void main(String[] args) {
try {
InetAddress ip =
InetAddress.getByName(“localhost”);
System.out.println(ip.getHostAddress());
System.out.println(ip.getHostName());
}
catch(UnknownHostException e) {
System.out.println(e);
}
}
}
Kelas java.net.Socket
Kelas ini digunakan untuk melakukan koneksi ke suatu mesin atau proses yang dituju.
Socket(InetAddress address, int port);
Membuat sebuah stream socket dan koneksi ke suatu nomor port pada sebuah komputer
yang memiliki alamat IP.
Socket(String host, int port);
Membuat sebuah stream socket dan juga koneksi ke suatu port tertentu pada sebuah
komputer berdasar namanya.
Socket(InetAddress address, int port, InetAddress
localAddr, int localPort);
Socket(String host, int port, InetAddress localAddr, int
localPort);
Membuat sebuah socket dan mengkoneksikannya ke port yang dituju pada alamat IP yang disebutkan pada parameter
address atau nama host. Selain itu juga akan dilakukan bind socket ke alamat lokal dan port lokal. (Hal ini dilakukan
jika koneksi antara client dan server membutuhkan nomor port yang sudah ditentukan.
getInetAddress();
Untuk mendapatkan nama host yang dituju dan alamat Ipnya
getPort();
Untuk mendapatkan nomor remote host
getLocalPort();
Untuk mendapatkan nomor port localhost
getLocalAddress();
Untuk mendapatkan alamat local dimana socket digunakan
getInputStream();
Mengembalikan objek input stream dari socket
getOutputStream();
Mengembalikan objek output stream ke socket
setSoTimeout(int timeout);
getSoTimeOut();
Kedua method tersebut digunakan untuk memberi (set) dan mengambil (get) nilai opsi Socket untuk time out block
(dalam milidetik) reading dari socket (SO_TIMEOUT). Jika dalam waktu timeout tidak mendapat suatu nilai maka,
akan dilemparkan ke exception java.net.SocketTimeoutException. Nilai default timeoutnya adalah 0, yang berarti
tanpa batas.
setTCPNoDelay(boolean on);
getTCPNoDelay();
Kedua method ini digunakan untuk memberi dan mengambil nilai opsi Socket TCP_NODELAY, yaitu untuk
mengaktifkan atau menonaktifkan Algoritma Nagle (RFC 896), yaitu algoritma yang membuat TCP lebih efisien dalam
konsumsi bandwidth dengan cara memperlambat penulisan data dalam ukuran yang kecil sehingga data-data yang
ada dapat terkirimkan dalam suatu paket dengan ukuran besar. Nilai default opsi ini adalah aktif. Namun jika
diinginkan adanya pengurangan network latency (waktu delay dalam pengiriman paket) dan meningkatkan unjuk
kerja, maka opsi ini harus di nonaktifkan (di set dengan nilai false), namun akibatnya konsumsi bandwidth akan
bertambah besar.
setSoLinger(boolean on, int linger);
getSoLinger();
Method tersebut akan mengaktifkan (true) atau menonaktifkan (false) opsi SO_LINGER dengan nilai waktu linger
dalam milidetik. Opsi ini berpengaruh ketika socket ditutup, yaitu menentukan nilai waktu maksikum koneksi yang
masih akan dipertahankan sampai socket koneksi benar-bernar ditutup. Hal ini berguna untuk mengirim dan
memberikan ACK (acknowledge) terhadap data yang belum terkirim.
setSendBufferSize(int size);
getSendBufferSize();
Method ini akan mengatur dan mengambil informasi tentang ukuran buffer SO_SNDBUF, yaitu buffer untuk
mengiriman. Ukuran ini juga harus disesuaikan ukuran buffer pada level network.
setReceiveBufferSize(int size);
getReceiveBufferSize();

Halaman 42 dari 77
Method ini digunakan jika Anda ingin mengatur ukuran buffer SO_RCVBUF, yaitu buffer yang digunakan untuk
menampung paket yang masuk. Ukuran buffer ini juga digunakan untuk mengatur ukuran window yang diterapkan
oleh TCP untuk flow controlnya (sliding window). Dalam pemanfaatan opsi ini, perlu dipastikan antara RCVBUF client
dengan server ada sinkronisasi, sehingga sebelum server membind port yang akan digunakan ke socket (TCP) ataupun
sebelum client membuka koneksi ke server, terlebih dahulu opsi ini harus di atur, jika Anda ingin mengaturnya.
Kelas java.net.ServerSocket
Kelas ini berfungsi untuk listen koneksi yang sudah terjadi dan siap menerima permintaan dari proses lain. Kelas ini
digunakan ketika pembuatan aplikasi server yang
bersifat Connection Oriented Ketika dibuat obyek baru ServerSocket, untuk dapat menerima dan mengirim melalui
stream perlu dibuat InputStream dan OutputStream. ServerSocket siap menerima permintaan client ketika
menjalankan method accept() dan akan mengakhiri koneksi ketika menjalankan method close()
ServerSocket( int port [, int backlog [, InetAddress bindAddress ]] )
Membuat sebuah server dengan port tertentu, batasan jumlah antrian (backlog), dan
alamat IP bindAddress.

Kelas java.net.Datagram
Digunakan untuk membangun koneksi connectionless dengan protokol UDP.

Terdapat 2 kelas pendukung:


- Kelas java.net.DatagramPacket
Merupakan kelas yang menyatakan atau mewakili sebuah paket informasi, yaitu sebuah array byte yang dipertukarkan
pada jaringan.
Constructor:
DatagramPacket(byte[] buf, int length) Kelas ini dapat digunakan untuk mengambil informasi. Constructor ini
membutuhkan sebuah array byte yang menjadi parameter pertama, yang berfungsi untuk menyimpan data dan
informasi ukuran data yang diterima.
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
Constructor ini digunakan untuk membuat paket Datagram yang akan mengirim data. Constructor ini memerlukan
informasi array byte yang akan dikirim dan panjangnya, serta alamat dan port yang dituju.
Method:
Memiliki 4 method penting :
getData() untuk mengambil informasi data
getLength() untuk mengambil panjang datagram
getAddress() untuk mengambil alamat IP
getPort() untuk mengambil alamat port
- Kelas java.net.DatagramSocket
Kelas ini mengirim dan menerima DatagramPacket dari atau ke jaringan.

Halaman 43 dari 77
Constructor:
DatagramSocket(int port)
Kelas ini dapat digunakan untuk menyatakan penggunaan suatu nomor port sebagai “pintu” untuk menerima koneksi
dari client.
DatagramSocket(int port, InetAddress laddr)
Kelas ini membentuk koneksi dengan protokol UDP pada alamat IP lokal tertentu dan pada nomor port tertentu.
DatagramSocket()
Kelas ini membentuk koneksi dengan protokol UDP pada alamat IP lokal host dengan penentuan nomor portnya secara
random berdasar tersedianya nomor port yang dapat digunakan.
Method:
Ø send(DatagramPacket data) akan mengirim DatagramPacket ke host dan port yang dituju
Ø receive(DatagramPacket data) akan memblok eksekusi sampai suatu paket lengkap diterima
Exception
Kelas-kelas Exception yang dibangkitkan untuk pemrograman socket, ketika ada kesalahan :
1. SocketException
Kelas ini merupakan kelas yang diturunkan dari kelas IOException. Kelas exception ini dipanggil atau dipicu ketika ada
kegagalan dalam pemakaian socket, sebagai contoh adalah kegagalan dalam protokol TCP. Salah satu penyebabnya
yang mungkin terjadi adalah ketika port yang akan digunakan sudah digunakan sebelumnya pada localhost. Penyebab
yang lain adalah user tidak dapat melakukan bind ke port yang dituju. Misalnya saja, Anda ingin menggunakan port
80 untuk aplikasi Anda, namun ternyata pada komputer Anda tersebut sudah berjalan HTTP Server yang juga
menggunakan port 80. Bila hal ini terjadi, maka JVM akan melemparkan kegagalan yang ada ke kelas exception
SocketException.
2. BindException Exception
Kelas ini akan dipanggil ketika ada port lokal yang akan digunakan sudah terpakai oleh yang lain, atau ada kegagalan
dalam permintaan untuk menggunakan alamat.
3. ConnectException Exception
Kelas ini akan dipanggil ketika sebuah koneksi ditolak oleh host yang dituju, oleh karena tidak ada proses yang siap
menerima data pada port yang dituju.
4. NoRouteToHostException
Koneksi yang akan dibangun tidak dapat dipenuhi oleh karena melebihi waktu timeout yang tersedia atau host yang
dituju tidak dapat dicapai (unreachable).
Informasi Antar Muka Jaringan
Untuk mendapatkan informasi network interface pada Java telah terdapat kelas NetworkInterface yang mampu
mendapatkan informasi tentang antar muka jaringan, nama device, dan IP yang ter-bind. Nama device misalnya eth0,
lp0, ppp0 dan lain-lain.
Contoh dari javasoft.com
import java.io.*;
import java.net.*;
import java.util.*;
public class DisplayNet {
public static void main(String argv[])
throws Exception
{
//panggil method getNetworkInterfaces()
//untuk mendapatkan semua antarmuka jaringan
//yang digunakan di komputer lokal
Enumeration e =
NetworkInterface.getNetworkInterfaces();
//perulangan untuk mengambil tiap antarmuka jaringan
//hasil dari method getNetworkInterfaces()
while(e.hasMoreElements()) {
NetworkInterface netface = (NetworkInterface)
e.nextElement();
System.out.println(“Net interface: “+
netface.getName());
//ambil semua informasi alamat IP dari
//tiap antarmuka jaringan
Enumeration e2 = netface.getInetAddresses();
//lakukan perulangan untuk tiap alamat IP
//yang didapat pada tiap antarmuka jaringannya
while(e2.hasMoreElements()) {
InetAddress ip = (InetAddress) e2.nextElement();
System.out.println(“IP address: “+
ip.toString());
}
}
}

Halaman 44 dari 77
}
Contoh program aplikasi HTTP Client yang akan menggunakan perintah HTTP untuk mengambil dokumen yang ada
melalui protokol HTTP
import java.io.*;
import java.net.*;
/**
* Contoh aplikasi yang membuka koneksi ke web server
* local dan membaca sebuah dokumen darinya
*/
public class ExHTTPClient {
public static void main(String args[])
{
try
{
// Buka koneksi client dengan socket
Socket clientSocket = new Socket(args[0], 80);
System.out.println(“Client: ” + clientSocket);
// Panggil method untuk mengambil dokumen
getHTML(clientSocket, args[1]);
}
catch (UnknownHostException e)
{ System.out.println(e); }
catch (IOException e)
{ System.err.println(e); }
}
/**
* Method yang akan meminta sebuah dokumen ke web server.
* Tampilkan hasil reply dari server dan tutup
* koneksinya.
*/
public static void getHTML(Socket clientSocket,
String fileName)
{
try
{
// membentuk input dan output stream dari
// socket yang terbentuk untuk pengiriman
// dan penerimaan data
DataOutputStream outbound = new DataOutputStream(
clientSocket.getOutputStream() );
DataInputStream inbound = new DataInputStream(
clientSocket.getInputStream() );
// kirim sebuah permintaan HTTP ke server
outbound.writeBytes(“GET ” + fileName +
” HTTP/1.0\r\n\r\n”);
// membaca respone dari HTTP
String responseLine;
while ((responseLine = inbound.readLine())
!= null)
{
// tampilkan setiap baris ke layar monitor
System.out.println(responseLine);
}
// Clean up
outbound.close();
inbound.close();
clientSocket.close();
}
catch (IOException e)
{ System.out.println(e); }
}
}
Contoh output:
Client:
Socket[addr=localhost/127.0.0.1,port=80,localport=1072]
HTTP/1.1 200 OK
Date: Tue, 20 Sep 2005 02:15:38 GMT

Halaman 45 dari 77
Server: Apache/1.3.23 (Win32)
Last-Modified: Tue, 05 Aug 2003 17:00:00 GMT
ETag: “0-74d-3f2fe290″
Accept-Ranges: bytes
Content-Length: 1869
Connection: close
Content-Type: text/html
<html> ….. dan seterusnya
Dari program diatas kita sudah dapat mengambil dokumen HTML seperti halnya pada telnet. Kelas Socket yang kita
buat menggunakan konstruktor new Socket(host,port).
Karena program ini bersifat Connection Oriented maka kita menggunakan kelas DataOutputStream untuk menulis
data ke socket dan DataInputStream untuk membaca data dari socket.
Pada contoh diatas kita menggunakan methode GET, bagaimana untuk metode POSTnya?
Contoh aplikasi Server dan client
CLIENT
import java.net.*;
import java.io.*;
import java.util.*;
public class InfoClient {
private final int INFO_PORT=50000;
private final String TargetHost = “localhost”;
private final String QUIT = “QUIT”;
/** Creates a new instance of InfoClient */
public InfoClient() {
try {
/* siapkan input stream dari standard input (keyboard) */
BufferedReader inFromUser =
new BufferedReader(new
InputStreamReader(System.in));
/* buat koneksi socket ke server dan port yang dituju */
Socket clientSocket = new
Socket(TargetHost, INFO_PORT);
/* siapkan output stream ke socket */
DataOutputStream outToServer =
new DataOutputStream(
clientSocket.getOutputStream());
/* siapkan input stream dari socket */
BufferedReader inFromServer =
new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream()));
/* tampilkan informasi Welcome dari Server
* oleh karena method readLine() akan
* membaca satu baris string
* yang diakhir dengan karakter ENTER,
* maka perlu diberikan 3
* pemanggilan method readLine()
* untuk membaca 3 baris pesan Welcome
* yang dikirim dari server
*/
System.out.println(inFromServer.readLine());
System.out.println(inFromServer.readLine());
System.out.println(inFromServer.readLine());
System.out.println(“”);
boolean isQuit = false;
while (!isQuit) {
/* menunggu masukan perintah dari User */
System.out.print(“Perintah Anda : “);
String cmd = inFromUser.readLine();
/* konversi ke Upper dan cek
* apakah perintah QUIT yang diketikkan
* jika QUIT, beri nilai true untuk isQUIT
* agar looping !isQUIT selesai
*/
cmd = cmd.toUpperCase();
if (cmd.equals(QUIT)) {
isQuit = true;

Halaman 46 dari 77
}
/* kirim perintah yang dimasukkan ke server
* dan diakhiri dengan karakter ENTER, karena
* pada server data dari client dibaca
* dengan method readLine() untuk membaca
* satu baris string sampai dengan ENTER
*/
outToServer.writeBytes(cmd + “\n”);
/* block reading ….
* client harus menunggu balasan dari server
*/
String result = inFromServer.readLine();
System.out.println(“Dari Server: ” + result);
}
/* tutup semua stream dan koneksi socket */
outToServer.close();
inFromServer.close();
clientSocket.close();
}
catch (IOException ioe) {
System.out.println(“Error:” + ioe);
}
catch (Exception e) {
System.out.println(“Error:” + e);
}
}
/**
* Program Utama InfoClient
*/
public static void main(String[] args) {
new InfoClient();
}
}
SERVER
import java.io.*;
import java.net.*;
import java.util.*;
public class InfoServer {
private final int INFO_PORT=50000;
private String datafromClient;
/** InfoServer Constructor */
public InfoServer() {
BufferedReader inFromClient;
DataOutputStream outToClient;
Socket serverSocket;
try {
/* bind port 50000 ke alamat lokal */
ServerSocket infoServer =
new ServerSocket(INFO_PORT);
System.out.println(“Server telah siap…”);
/* lakukan perulangan tanpa henti,
* sampai client memberikan perintah QUIT
*/
while (true) {
/* masuk ke mode listening,
* server siap menerima permintaan dari client
*/
serverSocket = infoServer.accept();
System.out.println(“Ada client ” +
“yang terkoneksi!”);
/* buat input stream dari socket
* dan juga sekaligus konversi dari
* byte stream ke character stream
* (InputStreamReader)
* BufferedReader akan memudahkan
* dalam pengolahan data karakter
*/

Halaman 47 dari 77
inFromClient =
new BufferedReader(
new InputStreamReader(
serverSocket.getInputStream()));
/* buat output stream ke socket */
outToClient =
new DataOutputStream(
serverSocket.getOutputStream());
/* tulis welcome ke client */
outToClient.writeBytes(“InfoServer versi 0.1\n”+
“hanya untuk testing..\n”+
“Silahkan berikan perintah TIME | NET | QUIT\n”);
/* lakukan perulangan sampai client
* mengirimkan perintah QUIT
*/
boolean isQUIT = false;
while (!isQUIT) {
/* baca data dari client */
datafromClient = inFromClient.readLine();
if (datafromClient.startsWith(“TIME”)) {
outToClient.writeBytes(new
Date().toString() + “\n”);
} else if (datafromClient.startsWith(“NET”)) {
outToClient.writeBytes(
InetAddress.getByName(“localhost”).toString() +
“\n”);
} else if (datafromClient.startsWith(“QUIT”))
{
isQUIT = true;
}
}
outToClient.close();
inFromClient.close();
serverSocket.close();
System.out.println(“Koneksi client tertutup..”);
}
}
catch (IOException ioe) {
System.out.print(“error: ” + ioe);
}
catch (Exception e) {
System.out.print(“error: ” + e);
}
}
/* program utama */
public static void main(String[] args) {
new InfoServer();
}
}

D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
E. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran

Halaman 48 dari 77
3. Guru memberikan apersepsi tentang
NetworkProgramming kepada siswa dengan rasa
tanggung jawab dengan memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif
dan kreatif dengan memberi penjelasan tentang
NetworkProgramming

2 Kegiatan inti 70’ Diskusi


a. Eksplorasi ,praktek&
1. Guru membagi siswa menjadi kelompok-kelompok Pengamatan
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi secara komunikatif tentang
NetworkProgramming
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang pengertian
NetworkProgramming
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
NetworkProgramming
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang pengertitan
NetworkProgramming dengan bertanggungjawab.
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

Sumber dan media pembelajaran


 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
F. Penilaian :

Halaman 49 dari 77
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :

Diketahui Oleh Boyolali, 12 juli 2012


Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

RENCANA PELAKSANAAN PEMBELAJARAN

Halaman 50 dari 77
A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali
Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/5
Alokasi Waktu : 16 x 45 Menit
Pertemuan Ke : 1,2
Standar Kompetensi : Membuat program aplikasi Web menggunakan JSP

Kompetensi Dasar :.Menjelaskan Kebutuhan Software


Indikator :
 Mengidentifikasi persyaratan sistem operasi dan web server( Rasa ingin tahu )
 Melakukan kalibrasi web server agar program scripting JSP berjalan optimal dengan web
server(Mandiri)
 Menyeting WEB Server(Mandiri)
 Melakukan pengujian web server untuk memeriksa apakah web server berjalan dengan
optimal(Mandiri)
B. Tujuan Pembelajaran :
 Memahami tentang web server
C. Materi Ajar
JavaServer Pages (JSP) adalah teknologi yang membantu pengembang perangkat lunak
menciptakan halaman web yang dihasilkan secara dinamis berdasarkan HTML , XML , atau jenis
dokumen lainnya. Dirilis pada tahun 1999 oleh Sun Microsystems [1] , JSP mirip dengan PHP ,
tetapi menggunakan bahasa pemrograman Java . Untuk menyebarkan dan menjalankan
JavaServer Pages, web server yang kompatibel dengan kontainer servlet, seperti Apache Tomcat
atau Jetty , diperlukan.
Arsitektur, JSP dapat dilihat sebagai tingkat tinggi abstraksi dari servlet Java . JSP dijabarkan ke
servlet saat runtime; servlet setiap JSP adalah cache dan digunakan kembali sampai JSP asli
dimodifikasi.
JSP dapat digunakan secara terpisah atau sebagai komponen tampilan dari sebuah server-side
model-view-controller desain, biasanya dengan JavaBeans sebagai model dan servlet Java (atau
kerangka seperti Apache Struts ) sebagai controller. Ini adalah jenis Model 2 arsitektur.
JSP memungkinkan kode Java dan tertentu yang telah ditetapkan tindakan yang akan disisipkan
dengan markup konten web statis, dengan halaman hasil sedang disusun dan dijalankan pada
server untuk mengirimkan dokumen. Halaman-halaman dikompilasi, serta setiap tergantung pada
Java perpustakaan, menggunakan Java bytecode bukan format perangkat lunak asli. Seperti
program Java lainnya, mereka harus dijalankan dalam mesin virtual Java (JVM) yang terintegrasi
dengan server tuan sistem operasi untuk menyediakan sebuah lingkungan platform netral abstrak.
Halaman JSP biasanya digunakan untuk mengirimkan dokumen HTML dan XML, tapi melalui
penggunaan OutputStream, mereka dapat memberikan jenis data lain juga.

Halaman JSP menggunakan pembatas beberapa fungsi script. Yang paling dasar adalah <% ...
%>, Yang encloses scriptlet JSP. Scriptlet adalah fragmen dari kode Java yang berjalan ketika
pengguna meminta halaman. Pembatas umum lainnya termasuk <% = ... %> Untuk ekspresi,
dimana nilai dari ekspresi ditempatkan ke halaman dikirim ke pengguna, dan arahan, dinotasikan
dengan <% @ ... %>.

Kode Java tidak diperlukan akan selesai atau mandiri dalam blok elemen scriptlet, tetapi dapat
mengangkang konten markup menyediakan halaman secara keseluruhan adalah sintaksis yang
benar. Sebagai contoh, setiap Jawa jika / untuk / sementara blok dibuka pada satu elemen scriptlet
Halaman 51 dari 77
harus ditutup dengan benar dalam elemen kemudian untuk halaman untuk berhasil
mengkompilasi. Markup yang jatuh di dalam blok pemecahan kode tunduk pada kode itu,
sehingga markup di dalam sebuah blok jika hanya akan muncul dalam output ketika jika kondisi
bernilai true; demikian juga, markup di dalam suatu konstruksi loop dapat muncul beberapa kali
dalam output tergantung pada berapa kali tubuh loop berjalan.

Berikut ini akan menjadi berlaku untuk loop di halaman JSP:

<p> Menghitung sampai tiga: </ p>


<% For (int i = 1; i <4; i + +) {%>
<p> Jumlah ini adalah <% = i%> </ p>.
<%}%>
<p> Selesai menghitung. </ p>

Output yang ditampilkan dalam web browser pengguna adalah:

Menghitung sampai tiga:


Jumlah ini adalah 1.
Jumlah ini adalah 2.
Jumlah ini adalah 3.
Selesai penghitungan.

Untuk contoh lebih lanjut, lihat Pemrograman Java / JSP di Wikibooks.

Bahasa Ekspresi

Versi 2.0 dari spesifikasi JSP menambahkan dukungan untuk Ekspresi Bahasa (EL),
digunakan untuk mengakses data dan fungsi dalam objek Java. Dalam JSP 2.1, itu dilipat ke
dalam Ekspresi Bahasa Bersatu , yang juga digunakan dalam JavaServer Faces . [6]

Contoh sintaks EL:

Nilai "variabel" dalam objek "JavaBean" adalah $ {javabean.variable}.

D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
E. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi tentang Menjelaskan
Kebutuhan Software JSP kepada siswa dengan rasa
tanggung jawab dengan memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif
dan kreatif dengan memberi penjelasan tentang
Menjelaskan Kebutuhan Software JSP
2 Kegiatan inti 70’ Diskusi &

Halaman 52 dari 77
a. Eksplorasi Pengamatan
1. Guru membagi siswa menjadi kelompok-kelompok
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi secara komunikatif tentang
Menjelaskan Kebutuhan Software
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang Menjelaskan Kebutuhan
Software
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
Kebutuhan Software
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang Menjelaskan
Kebutuhan Software dengan bertanggungjawab.
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

F. Sumber dan media pembelajaran


 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
 Internet
G. Penilaian :
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :
Diketahui Oleh Boyolali, 12 juli 2012

Halaman 53 dari 77
Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

RENCANA PELAKSANAAN PEMBELAJARAN

A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali

Halaman 54 dari 77
Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/6
Alokasi Waktu : 15 x 45 Menit
Pertemuan Ke : 1,2
Standar Kompetensi : Membuat program aplikasi Web menggunakan JSP

Kompetensi Dasar :Menjelaskan dasar-dasar JSP


Indikator :
 Menjelaskan penggunaan JSP container( Rasa ingin tahu )
 Menjelaskan penggunaan JSP directives( Rasa ingin tahu )
 Menjelaskan JSP Objects melalui va-riabel request dan response( Rasa ingin tahu )
 Menjelaskan JSP actions( Rasa ingin tahu )
 Menjelaskan JSP taglibraries (TagLibs, Servlets dan DevelopmentComponents) ( Rasa ingin tahu )
B. Tujuan Pembelajaran :
 Memahami JSP Container
 Memahami JSP Directives
C. Materi Ajar :

JSP bertujuan untuk menyederhanakan pembuatan dan manajemen halaman web yang bersifat
dinamis, dengan cara memisahkan content dan presentasi. JSP merupakan halaman yang
menggabungkan HTML dengan scripting tag dan program java. Pada saat JSP dipanggil client
melalui browser, JSP tersebut akan di kompile terlebih dahulu menjadi servlet, dan kemudian
hasilnya dikembalikan ke client. Sebagai ilustrasi diberikan pada gambar sebagai berikut :

Gambar Pemrosesan Halaman JSP

Kelebihan JSP

1. JSP dapat berjalan pada sembarang platform.


2. JSP cenderung memiliki performansi yang lebih baik, karena JSP dilakukan kompile terlebih
dahulu menjadi servlet yang berupa bytecode.
3. Didukung bahasa Java yang memilki kemampuan OOP dan tingkat reuseability tinggi.

Halaman 55 dari 77
4. Dapat menggunakan JavaBean untuk mengenkapsulasi kode-kode java.

Kelemahan JSP

1. Proses kompile terhadap halaman JSP mengakibatkan client harus menunggu lebih lama pada
saat pertama kali di lakukan loading. Hal ini tentu saja menyebabkan kecepatan proses JSP
secara menyeluruh berkurang.

Listing Program

<%= "Hello World JSP Sederhana"%>

Seperti yang dijelaskan diatas, bahwa halaman JSP akan dilakukan kompile menjadi servlet yang
diberikan pada Listing program sebagai berikut :

Listing Program

package LatihJsp;

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.jsp.*;

public class helloWorld1_2 extends org.apache.jasper.runtime.HttpJspBase {

static {

public helloWorld1_2( ) {

private boolean _jspx_inited = false;

public final synchronized void _jspx_init() throws


org.apache.jasper.JasperException {

if (! _jspx_inited) {

_jspx_inited = true;

Halaman 56 dari 77
public void _jspService(HttpServletRequest request, HttpServletResponse
response)

throws java.io.IOException, ServletException {

JspFactory _jspxFactory = null;

PageContext pageContext = null;

HttpSession session = null;

ServletContext application = null;

ServletConfig config = null;

JspWriter out = null;

Object page = this;

String _value = null;

try {

try {

_jspx_init();

_jspxFactory = JspFactory.getDefaultFactory();

response.setContentType("text/html;charset=ISO-8859-1");

pageContext = _jspxFactory.getPageContext(this, request, response,

"", true, 8192, true);

application = pageContext.getServletContext();

config = pageContext.getServletConfig();

session = pageContext.getSession();

out = pageContext.getOut();

// HTML // begin [file="D:\\jakarta-tomcat-


3.3.1\\webapps\\ROOT\\latihJsp\\helloWorld1.jsp";from=(0,0);to=(9,1)]

out.write("\r\n\r\n\r\n\r\n\t\r\n\r\n\r\n\t");

// end

Halaman 57 dari 77
// begin [file="D:\\jakarta-tomcat-
3.3.1\\webapps\\ROOT\\latihJsp\\helloWorld1.jsp";from=(9,4);to=(9,32)]

out.print( "Hello World JSP Sederhana");

// end

// HTML // begin [file="D:\\jakarta-tomcat-


3.3.1\\webapps\\ROOT\\latihJsp\\helloWorld1.jsp";from=(9,34);to=(11,7)]

out.write("\r\n\r\n");

// end

} catch (Exception ex) {

if (out != null && out.getBufferSize() != 0)

out.clearBuffer();

if (pageContext != null) pageContext.handlePageException(ex);

} catch (Error error) {

throw error;

} catch (Throwable throwable) {

throw new ServletException(throwable);

} finally {

if (out instanceof org.apache.jasper.runtime.JspWriterImpl) {

((org.apache.jasper.runtime.JspWriterImpl)out).flushBuffer();

if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);

Jika dijalankan pada browser dengan alamat URL :

http://localhost:8080/LatihJSP/helloWorld.jsp

Halaman 58 dari 77
Maka akan menampilkan tampilan sebagai berikut :

Gambar Tampilan helloWorld.jsp pada Browser

Elemen-elemen JSP

Struktur halaman JSP adalah penambahan program Java dalam tag <% %> pada suatu halaman
HTML untuk membangkitkan content yang bersifat dinamik.

JSP memiliki tiga komponen utama, yaitu :

1. Directives : merupakan suatu petunjuk bagi web container tentang sesuatu yang harus
dilakukan pada saat container melakukan compile halaman JSP.
2. Scripting Elements : tag untuk menuliskan program Java.
3. Action : special tag yang memberikan pengaruh pada halaman JSP pada saat runtime.

Directives

Sintaks :

<%@ namaDirective attribute1=”value1” attribute2 =”value2” %>

Directives terdiri dari tiga bagian, yaitu :

1. Page Directive
2. Include Directive
3. Taglib Directive

Halaman 59 dari 77
Page Directive

Untuk menentukan dan memanipulasi atribut-atribut pada halaman JSP serta memberikan
informasi ke container untuk atribut-atribut yang memerlukan proses tertentu.

Sintaks :

<%@ page ATTRIBUTE %>

Attribute yang digunakan pada Page Directive diberikan pada tabel sebagai berikut :

Attribute Keterangan Default Nilai


Language Menentukan bahasa pemrograman yang “Java”
digunakan
Extends Digunakan untuk men-generate superclass Tidak ada
Import Mengimport package atau class java, Tidak ada
seperti halnya pada program Java
Session Menentukan apakah halaman JSP “true”
menggunakan HTTP session
Buffer Menentukan model buffering untuk output
stream ke client
autoFlush Melakukan reset isi buffer jika sudah “true”
penuh
isThreadSafe Mendefinisikan tingkat keamanan “true”
mengenai masalah threading halaman JSP.
Jika “false” request akan diproses sebagai
single Thread, berurutan sesuai urutan
kedatangan request
Info Mendefinisikan string informasi yang Tidak ada
dapat diperoleh dari implementasi metode
Servlet.getServletInfo()
errorPage Menentukan error page, sehingga jika Tidak ada
terjadi error, maka halaman JSP ini akan
ditampilkan
isErrorPage Memberikan indikasi apakah halaman JSP “false”
merupakan halaman error dari halaman JSP
yang lain
contentType Menentukan encoding karakter pada JSP MIME-TYPE
dan tipe MIME untuk respons yang text / html
dihasilkan JSP. CHARSET ISO-
8859-1

Contoh :

<%@ page language=”Java” import="java.sql.*“ session=”true” buffer=”12kb”


autoFlush=”true” errorPage=”myError.JSP” %>

Include Directive

Halaman 60 dari 77
Untuk menyisipkan isi file lain ke dalam file JSP

Sintaks :

<% include file=”namaFile” %>

Contoh :

<% include file=”myHeader.html” %>

Taglib Directive

Untuk penggunaan tag library atau tag tambahan.

Contoh :

<%@ taglib url=http://Latihan.com/tagKu prefix=”test” />

Scripting Elements

Terdiri dari tiga elemen, yaitu :

1.Declarations
2.Scriptlets
3.Expression

Declarations

Declarations merupakan blok program Java yang digunakan untuk mendeklarasikan variable dan
method yang akan digunakan dalam program. Variable yang dideklarasikan pada bagian ini akan
berperan sebagai variable global pada servlet hasil kompile.

Sintaks :

<%! Deklarasi variable dan method %>

Contoh :

<%! int i = 10 ; double x = 5.0 ; %>

Halaman 61 dari 77
Scriptlets

Scriptlets merupakan blok program Java yang dieksekusi pada saat pemrosesan request.
Scriptlets akan dijalankan sesuai dengan instruksi program yang diberikan.

Sintaks :

<% Sintaks Program Java %>

Contoh :

<% System.out.println(“Test Scriptlets”); %>

Expression

Expression merupakan cara untuk memperpendek penulisan scriptlets dan akan mengembalikan
nilai String yang dikirim melalui output stream.

Sintaks :

<%= Ekspresi Java %>

Contoh :

<%

String oAnalisa=oAnalisaReview.getAnalisa(oIDK);

%>

Hasil Analisa dan Review

<%=oAnalisa%> -------------> Expression

Action

Action merupakan tag yang mempengaruhi perilaku halaman JSP pada saat runtime. JSP
mengenal tag action standar dan custom tag. Tag standar adalah tag yang didefinisikan dalam
spesifikasi JSP, sedangkan custom tag adalah tag baru yang dapat didefinisikan sendiri. Pada
bagian ini hanya dibahas mengenai tag action standar.

Halaman 62 dari 77
Tag action standar JSP adalah sebagai berikut :

1.
2.
3.
4.
5.
6.
7.

Action tag ini berfungsi untuk meng-instantiate suatu Java Object (Java Bean) agar kemudian
dapat digunakan pada halaman JSP. Penggunaan bean ini merupakan salah satu cara untuk
memisahkan antara logic dan presentation pada JSP. Logic yang digunakan pada JSP dapat
diletakkan pada suatu bean, dan bean ini dapat digunakan untuk halaman JSP yang lain.

Sintaks :

Untuk beanDetail berupa salah satu dibawah ini :

class = “className”

class = “className” type = “typeName”

beanName = “beanName” type = “typeName”

type = “typeName”

Atribut pada action tag dapat dilihat pada tabel sebagai berikut :

Atribut Deskripsi Default Nilai


id Nama untuk mengindentifikasi bean yang akan di- Tidak ada
instantiate
scope Jangkauan reference terhadap bean. Nilai yang “page”
tersedia untuk scope antara lain : page, request,
session, application
class Nama class bean yang akan digunakan Tidak ada
beanName Atribut khusus yang terkait dengan method Tidak ada
instantiate() pada class java.beans.Beans
Type Menentukan tipe class Nilai dari
atribut class

Contoh :

Halaman 63 dari 77
Action tag standar ini digunakan bersama dengan action tag . Action tag ini berfungsi untuk men-
set nilai properties yang terdapat pada bean.

Sintaks :

Untuk propertyDetail adalah sebagai berikut :

property = “*”

property = “propertyName”

property = “propertyName” param = “parameterName”

property = “propertyName” value = “propertyValue”

Contoh :

Action tag ini merupakan kebalikan dari action tag , dimana berfungsi untuk mengambil nilai
property pada Java Bean.

Sintaks :

Contoh :

Action tag ini berfungsi untuk menset nilai-nilai parameter yang akan digunakan dalam halaman
JSP.

Sintaks :

Contoh :

Action tag ini memiliki fungsi yang serupa dengan directive <%@ include file = “fileName”
%>. Tetapi memiliki perbedaan mendasar, yaitu waktu eksekusi. Untuk tag dieksekusi pada saat
request dan directive include dieksekusi pada saat kompile.

Hasil eksekusi dari keduanya adalah sama dan dapat digunakan untuk melakukan include
halaman statis atau dinamis.

Action tag ini sebaiknya digunakan jika halaman yang di-include-kan sering mengalami
perubahan secara dinamis, tetapi jika tidak mengalami perubahan sebaiknya digunkan directive
include. Hal ini didasarkan pada proses kompile ulang halaman JSP. Pada directive jika halaman
JSP yang meng-include halaman JSP lain tidak berubah, sedangkan halaman JSP yang di-
include-kan mengalami perubahan, maka kompile ulang belum tentu dilakukan. Tetapi pada
Halaman 64 dari 77
action tag kompile ulang pasti akan dilakukan karena proses include dilakukan pada saat
melakukan proses terhadap request.
Sintaks :
Contoh :
Action tag ini berfungsi untuk melakukan forward ke suatu halaman lain, baik halaman HTML
atau JSP.
Sintaks :
Contoh :
Action tag ini untuk menghasilkan kode-kode yang sesuai target browser dalam menyisipkan
komponen Java bean atau applet secara otomatis.

D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
E. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi tentang Menjelaskan
dasar-dasar JSP kepada siswa dengan rasa tanggung
jawab dengan memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif
dan kreatif dengan memberi penjelasan tentang
Menjelaskan dasar-dasar JSP

2 Kegiatan inti 70’ Diskusi &


a. Eksplorasi Pengamatan
1. Guru membagi siswa menjadi kelompok-kelompok
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi secara komunikatif tentang
Menjelaskan dasar-dasar JSP
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang Menjelaskan dasar-dasar
JSP
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
dasar-dasar JSP
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang dasar-dasar JSP
dengan bertanggungjawab.

Halaman 65 dari 77
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

F. Sumber dan media pembelajaran


 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
 Internet
G. Penilaian :
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :
Diketahui Oleh Boyolali, 12 juli 2012
Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

RENCANA PELAKSANAAN PEMBELAJARAN

Halaman 66 dari 77
A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali
Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/6
Alokasi Waktu : 18 x 45 Menit
Pertemuan Ke : 1,2
Standar Kompetensi : Membuat program aplikasi Web menggunakan JSP
Kompetensi Dasar :.Membuat aplikasi web berbasis jsp
Indikator :
 Membuat aplikasi dengan JSP ( Mandiri )
 Melakukan penyimpanan dengan benar (Mandiri)
C. Tujuan Pembelajaran :
 Membuat aplikasi web dengan JSP
D. Materi Ajar :
Cara Mudah Membuat Aplikasi Web dengan JSP dan Database MySQL
Pembaca yang budiman, kali ini saya ingin berbagi pengetahuan tentang bagaimana membuat
sebuah aplikasi web dengan JSP dan MySQL. Kali ini kita akan membuatnya dengan cara yang
mudah, dalam artian kita tidak akan membuat web aplikasi ini dengan melakukan coding Java
untuk membuat class-class yang kita perlukan untuk mendukung web aplikasi kita kali ini. Kita
cukup membuat JSP saja, JSP saja… dan beberapa konfigurasi yang mudah-mudahan juga tidak
menjadi kesulitan bagi kita semua.
Sebelum kita memulai mari kita persiapkan dulu database dan table yang nantinya akan menjadi
salah satu bahan percobaan kita. Untuk membuat databasenya kita beri nama databasenya
“test_jsp” kemudian untuk tablenya silahkan kita buat sebuah table dalam database tersebut
dengan struktur seperti ini:

Atau bisa juga kita copy paste sql query berikut ini:

create database test_jsp;


use test_jsp;
CREATE TABLE `identitas` (
`NO` int(10) NOT NULL AUTO_INCREMENT,
`NAMA` varchar(100) NOT NULL,
`ALAMAT` varchar(255) DEFAULT NULL,
`NO_TELP` varchar(20) DEFAULT NULL,
PRIMARY KEY (`NO`));

Sql Query diatas adalah query-query untuk membuat database dengan nama test_jsp dan
membuat sebuah table bernama identitas dengan field-field seperti pada gambar. Kemudian isilah
table tersebut dengan data-data secukupnya (Kaya bikin resep masakan aja….:D), sehingga kira-
kira hasilnya bisa dilihat seperti gambar dibawah ini:

Dengan demikian satu bahan percobaan kita telah selesai kita buat.
Untuk melakukan percobaan kita kali ini sebenarnya kita membutuhkan atau lebih tepatnya kita

Halaman 67 dari 77
akan memakai sebuah library yang mampu mendukung pembuatan web aplikasi hanya dengan
jsp saja. Library yang kita butuhkan adalah Jakarta Taglibs.
Jakarta Taglibs adalah salah satu project open source Jakarta Tag libraries yang mendukung
pembuatan Web Aplikasi dengan JSP tanpa class-class java yang kita buat sendiri. Dengan
konsep Taglibs berarti kita akan menggunakan API yang ada pada library tersebut hanya dengan
cara memanggilnya dengan menggunakan tag-tag yang pada JSP. Oleh karena kita
membutuhkan library yang bernama DBTags (database tags) maka silahkan diunduh terlebih
dahulu library tersebut disini http://jakarta.apache.org/site/downloads/downloads_taglibs.html,
selain itu kita juga akan membutuhkan library yang berfungsi sebagai Driver Database MySQL
yaitu mysql-connector-java.jar, silahkan juga download library tersebut disini
http://dev.mysql.com/downloads/connector/j/
Setelah kedua library tersebut selesai didownload, kemudian ekstraklah kedua file yang sudah
kita download tersebut. Untuk langkah selanjutnya kita akan persiapkan sebuah web aplikasi
pada Application server atau Servlet Container, kali ini kita akan menggunakan Tomcat
sebagai Servlet Container Web Aplikasi kita (tomcat lagi…tomcat lagi…:D).
1. Buatlah sebuah folder dalam folder webapps yang berada pada folder instalasi tomcat kita.
Kita beri nama MySimpleJSP saja. Folder ini juga nantinya akan menjadi folder path pada
URL aplikasi kita.
2. Di dalam folder MySimpleJSP tersebut kita buat lagi dua buah folder lagi bernama WEB-
INF dan libs.
3. Copy-lah file mysql-connector-java.5.1.6.jar (saya menggunakan connector 5.1.6
disini) dari library mysql connector tadi, dan file taglibs-dbtags.jar dari library Jakarta
Tablibs yang kita download tadi ke dalam folder libs.
4. Kemudian copy pula file taglibs-dbtags.tld dari library Jakarta Taglibs yang sudah kita
ekstrak tadi ke dalam folder WEB-INF.
5. Buatlah sebuah file yang bernama web.xml dan kemudian simpanlah file tersebut juga di
dalam folder WEB-INF, sementara isi dari file web.xml tersebut tulislah seperti dibawah
ini:

<?xml version="1.0" encoding="UTF-8"?>


<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

<jsp-config>
<taglib>
<taglib-uri>http://jakarta.apache.org/taglibs/dbtags</taglib-
uri>
<taglib-location>/WEB-INF/taglibs-dbtags.tld</taglib-
location>
</taglib>
</jsp-config>
</web-app>

Sampai disini kita telah selesai melakukan persiapan-persiapan web-aplikasi untuk percobaan
kita kali ini. Dan langkah selanjutnya adalah tinggal membuat file-file jsp yang kita butuhkan
untuk bisa mengakses database MySQL yang telah kita buat tadi, semua file jsp yang nantinya
akan kita buat akan kita letakkan dalam folder MySimpleJSP atau sejajar dengan folder WEB-
INF dan folder libs. Mari kita buat file jspnya.
File JSP pertama yang akan kita buat adalah file get_identity.jsp, file ini adalah sebuah file jsp
yang bertugas mengambil data-data yang ada dalam tabel identitas yang terletak pada database
test_jsp. Mari perhatikan kode-kode file get_identity.jsp dibawah ini.

Halaman 68 dari 77
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>
<html>
<head><title>My Simple JSP MYSQL Page</title></head>
<body>
<%-- Step 1) create a database connection --%>
<sql:connection id="connect">
<sql:url>jdbc:mysql://localhost/test_jsp</sql:url>
<sql:driver>com.mysql.jdbc.Driver</sql:driver>
<sql:userId>root</sql:userId>
<sql:password>admin99</sql:password>
</sql:connection>
<%--End Creating database Connection--%>

<%-- Step 2) Create a SQL query --%>


<sql:statement id="statement" conn="connect">
<sql:query>
SELECT * FROM identitas
</sql:query>

<table border="1">
<tr>
<th>NO</th>
<th>NAMA</th>
<th>ALAMAT</th>
<th>NO TELP</th>
</tr>
<%--Step 2.1) Loop the result--%>
<sql:resultSet id="data">
<tr>
<td><sql:getColumn position="1"/> </td>
<td><sql:getColumn position="2"/> </td>
<td><sql:getColumn position="3"/> </td>
<td><sql:getColumn position="4"/> </td>
</tr>
</sql:resultSet>
</table>
</sql:statement>

<%--Step 3) Close Database Connection--%>


<sql:closeConnection conn="connect"/>
</body>
</html>

Mari perhatikan masing-masing kode JSP diatas:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


<%@taglib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>

Pada baris ke dua kita melakukan deklarasi tag yang nanti akan kita pakai dalam file jsp ini. Uri
dalam baris tersebut haruslah sama dengan taglib-uri yang kita deklarasikan di dalam file
web.xml sebelumnya, dimana pada proses running-nya nanti file web.xml akan bertanggung
jawab untuk mencari referensi tag-tag dengan prefix sql dalam file taglibs-dbtags.tld.
<%-- Step 1) create a database connection --%>
<sql:connection id="connect">
<sql:url>jdbc:mysql://localhost/test_jsp</sql:url>
<sql:driver>com.mysql.jdbc.Driver</sql:driver>
<sql:userId>root</sql:userId>
<sql:password>admin99</sql:password>
</sql:connection>

Halaman 69 dari 77
<%--End Creating database Connection--%>

Sementara pada blok kode diatas kita melakukan deklarasi tag-tag untuk melakukan koneksi ke
database mysql yang kita buat tadi. Coba perhatikan tiap baris diatas, databasenya adalah
test_jsp kemudian Driver-nya adalah com.mysql.jdbc.Driver, kemudian userId untuk
melakukan koneksi ke database mysql adalah root, dan password untuk melakukan koneksi ke
database mysql tersebut adalah admin99. Username database mysql saya adalah root dan
passwordnya adalah admin99, silahkan sesuaikan dengan setting database anda masing-
masing. Yang harus diperhatikan lagi dalam kode di atas adalah semua konfigurasi ini harus
berada dalam blok tag sql:connection.
<%-- Step 2) Create a SQL query --%>
<sql:statement id="statement" conn="connect">
<sql:query>
SELECT * FROM identitas
</sql:query>

<table border="1">
<tr>
<th>NO</th>
<th>NAMA</th>
<th>ALAMAT</th>
<th>NO TELP</th>
</tr>
<%--Step 2.1) Loop the result--%>
<sql:resultSet id="data">
<tr>
<td><sql:getColumn position="1"/> </td>
<td><sql:getColumn position="2"/> </td>
<td><sql:getColumn position="3"/> </td>
<td><sql:getColumn position="4"/> </td>
</tr>
</sql:resultSet>
</table>
</sql:statement>

Kemudian perhatikan baris-baris kode selanjutnya, kita membuat sebuah blok yaitu tag
sql:statement. Dimana dalam blok ini kita menuliskan tag blok sql:query dan tag sql:resultSet,
dan di dalam blok sql:resultSet, kita mengekstrak data-data dari database untuk ditampilkan ke
dalam halaman web tersebut dengan menggunakan tag sql:getColumn. Jika kita coba pahami
tag-tag tersebut mungkin seperti ini penjabarannya : tag sql:query adalah suatu tag untuk
menuliskan sql query yang nantinya akan di eksekusi oleh aplikasi. Kemudian tag sql:resultSet
adalah tag dimana hasil pengambilan data dari database ditempatkan dalam bentuk array
collection. Dan terakhir adalah tag sql:getColumn adalah cara untuk mengekstrak array
collection tersebut dan kemudian diurutkan berdasarkan tampilan dasar halaman web aplikasi
kita.

<%--Step 3) Close Database Connection--%>


<sql:closeConnection conn="connect"/>

Dan akhirnya yang terakhir dalam kode ini adalah kita melakukan pemutusan koneksi terhadap
database MySQL kita.
Kemudian setelah itu ujilah aplikasi MySimpleJSP ini dengan menjalankan Tomcat kita dan
kemudian memanggil file get_identity.jsp tersebut pada browser kesayangan anda dengan

Halaman 70 dari 77
alamat: http://localhost:8000/MySimpleJSP/get_identity.jsp (tomcat saya terkonfigurasi pada
port 8000, silahkan ganti dengan port yang sesuai dengan konfigurasi tomcat anda) . jika
berhasil maka seharusnya tampilan halaman web tersebut adalah seperti ini:

Dengan tampilnya data tersebut ke dalam halaman web aplikasi JSP kita, maka berarti percobaan
yang kita lakukan kali ini dapat kita katakan berhasil. Untuk selanjutnya silahkan anda
kembangkan lagi untuk penggunaan yang lebih luas, misal file jsp untuk melakukan insert data
ke table identitas tersebut, dan lain-lain.
E. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
F. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi tentang web berbasis jsp
kepada siswa dengan rasa tanggung jawab dengan
memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif dan
kreatif dengan memberi penjelasan tentang Membuat
aplikasi web berbasis jsp
2 Kegiatan inti 70’ Diskusi,prakt
a. Eksplorasi ek &
1. Guru membagi siswa menjadi kelompok-kelompok Pengamatan
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi secara komunikatif tentang
Membuat aplikasi web berbasis jsp
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang :.Membuat aplikasi web
berbasis jsp
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
aplikasi web berbasis jsp
c. Konfirmasi

Halaman 71 dari 77
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang Membuat
aplikasi web berbasis jsp dengan bertanggungjawab.
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.

3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya
F. Sumber dan media pembelajaran
 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
 Internet
G. Penilaian :
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :
Diketahui Oleh Boyolali, 12 juli 2012
Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

Halaman 72 dari 77
RENCANA PELAKSANAAN PEMBELAJARAN

A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali


Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/6
Alokasi Waktu : 12 x 45 Menit
Pertemuan Ke : 1,2
Standar Kompetensi : Membuat program aplikasi Web menggunakan JSP
Kompetensi Dasar : Menyiapkan server untuk aplikasi web berbasis JSP

Indikator :
 Menyiapkan web server (Mandiri)
 Mengonfigurasi web server(Mandiri)
 Menguji web server(Mandiri)
B. Tujuan Pembelajaran :
 Mengerti tentang server
 Menggunakan server
C. Materi Ajar
 server
D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan.
E. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1. Pendahuluan
1 : 2. 1 3. Cera
1. Guru menciptakan suasana kelas yang religius dengan 0 mah,
memberi salam dan menunjuk salah satu siswa ’ tanya
memimpin berdoa, memeriksa kehadiran dan kerapian jawa
siswa, mengkontrol kebersihan sebagai wujud b
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi tentang Menyiapkan
server untuk aplikasi web kepada siswa dengan rasa
tanggung jawab dengan memberikan penjelasannya
4. Guru memberi motivasi siswa secara komunikatif dan
kreatif dengan memberi penjelasan tentang
Menyiapkan server untuk aplikasi web

2 Kegiatan inti 70’ Diskusi &


a. Eksplorasi Pengamatan
1. Guru membagi siswa menjadi kelompok-kelompok
kecil . Setiap kelompok terdiri dari 4-5 siswa.
2. Siswa berdiskusi secara komunikatif tentang
Menyiapkan server untuk aplikasi web
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang Menyiapkan server untuk
aplikasi web
b. Elaborasi

Halaman 73 dari 77
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
server untuk aplikasi web
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang server untuk
aplikasi web dengan bertanggungjawab.
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

Sumber dan media pembelajaran


 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
 Internet

F. Penilaian :
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :
Diketahui Oleh Boyolali, 12 juli 2012
Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

Halaman 74 dari 77
RENCANA PELAKSANAAN PEMBELAJARAN

A. Nama Sekolah : SMK Muhammadiyah 04 Boyolali


Mata Pelajaran : Pemrograman Java
Kelas / Semester : XII/6
Alokasi Waktu : 21 x 45 Menit
Pertemuan Ke : 1,2
Standar Kompetensi : Membuat program aplikasi Web menggunakan JSP
Kompetensi Dasar : Menyimpan kondisi ke dalam server dan client

Indikator :
 Melakukan penyimpanan suatu kondisi cookie,(Mandiri)
 Melakukan penyimpanan suatu kondisi query, (Mandiri)
 Melakukan penyimpanan suatu kondisi sessions(Mandiri)
B. Tujuan Pembelajaran :
 Memahami cara penyimpanan program client dan server
C. Materi Ajar
 Cookie, Query dan server
D. Metode Pembelajaran :
 Ceramah, Tanya Jawab, Praktek dan Penugasan
E. Langkah Pembelajaran :
No Kegiatan Waktu Metode
1 Pendahuluan : 10 ’ Ceramah,
1. Guru menciptakan suasana kelas yang religius dengan tanya jawab
memberi salam dan menunjuk salah satu siswa
memimpin berdoa, memeriksa kehadiran dan kerapian
siswa, mengkontrol kebersihan sebagai wujud
kepedulian lingkungan.
2. Guru menumbuhkan rasa ingin tahu dengan
menyampaikan SK/KD dan tujuan pembelajaran
3. Guru memberikan apersepsi tentang Menyimpan
kondisi ke dalam server dan client kepada siswa
dengan rasa tanggung jawab dengan memberikan
penjelasannya
4. Guru memberi motivasi siswa secara komunikatif
dan kreatif dengan memberi penjelasan tentang
Menyimpan kondisi ke dalam server dan client

2 Kegiatan inti 70’ Diskusi &


a. Eksplorasi Pengamatan
1. Guru membagi siswa menjadi kelompok-kelompok
kecil . Setiap kelompok terdiri dari 4-5 siswa.

Halaman 75 dari 77
2. Siswa berdiskusi secara komunikatif tentang
Menyimpan kondisi kedalam server dan client
3. Masing masing peserta/anggota kelompok
menyampaikan pendapatnya secara mandiri dan
bertanggungjawab tentang Menyimpan kondisi
kedalam server dan client
b. Elaborasi
1. Masing-masing kelompok menyampaikan hasil
diskusi secara mandiri dan bertanggungjawab
sedangkan kelompok lain merespon secara
demokratis.
2. Siswa bekerja keras melakukan analisa mengenai
Kondisi kedalam server dan client
c. Konfirmasi
1. Guru memberikan tanggapan dan simpulan
berdasarkan hasil diskusi kerja kelompok secara
komunikatif.
2. Guru memberikan penguatan tentang analisa
mengenai Kondisi kedalam server dan client
dengan bertanggungjawab.
3. Guru secara kreatif memberikan catatan-catatan
penting mengenai materi pokok yang harus dikuasai
siswa.
3 Penutup 10 ‘ Ceramah,
1. Guru membimbing siswa secara mandiri untuk tanya jawab
membuat rangkuman dari materi yang telah dibahas
2. Guru melakukan penilaian akhir terhadap materi yang
telah diberikan secara bertanggungjawab.
3. Guru memberikan umpan balik terhadap materi yang
telah diajarkan secara demokratis.
4. Guru merencanakan kegiatan tindak lanjut secara
mandiri dalam bentuk pembelajaran remidi, program
pengayaan, layanan konseling dan/atau memberikan
tugas baik tugas individual maupun kelompok sesuai
dengan hasil belajar peserta didik
5. Guru menumbuhkan rasa ingin tahu siswa agar
gemar membaca dengan membuat laporan hasil
diskusi yang sudah dikembangkan secara individu,
dan dikumpulkan pada pertemuan selanjutnya

G. Sumber dan media pembelajaran


 Buku Panduan Mudah Mengenal Bahasa java
 Buku Membuat aplikasi database dengan java,MySQL dan Netbeans
 Komputer
 Internet

H. Penilaian :

Halaman 76 dari 77
 Tes Tertulis ;
 Tes Praktek ; Hasil praktek kegitan inti
 Soal/ Instrumen :

Diketahui Oleh Boyolali, 9 juli 2012


Kepala SMK Muhammadiyah 04 Guru Mata Pelajaran
Boyolali

H.Sudarno HS,M.Pd Arif Joko Sukatmo,S.Kom

Halaman 77 dari 77

Anda mungkin juga menyukai