komplit modul

181
BAB I PENDAHULUAN Dewasa ini pengembang – pengembang banyak membuat aplikasi transaksi yang terdistribusi untuk digunakan di perusahaan – perusahaan besar. Di era teknologi informasi yang ditandai dengan adanya tuntutan yang besar terhadap e-commerce, aplikasi - aplikasi enterprise harus didesign, dibangun dan diproduksi dengan biaya yang kecil dan pemanfaatan resource yang sedikit namun dengan hasil yang optimal. Dalam rangka mengurangi biaya dan untuk mengembangkan aplikasi yang cepat dan tepat, Java Enterprise Edition menyediakan pendekatan component- based untuk mendesign, mengembangkan dan mendeploy aplikasi – aplikasi enterprise. Java Enterprise Edition menawarkan model aplikasi multi tier terdistribusi, komponen yang dapat digunakan kembali, control transaksi yang lebih fleksibel dan dukungan web service melalui teknologi XML. Hal ini membawa dampak pengembang tidak hanya menghasilkan solusi – solusi bisnis yang innovative secara lebih cepat, tetapi juga solusi J2EE tidak terikat pada produk dan API dari vendor manapun. Vendor dan 1

Upload: nguyentram

Post on 30-Dec-2016

306 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Komplit Modul

BAB I

PENDAHULUAN

Dewasa ini pengembang – pengembang banyak membuat aplikasi

transaksi yang terdistribusi untuk digunakan di perusahaan – perusahaan besar.

Di era teknologi informasi yang ditandai dengan adanya tuntutan yang besar

terhadap e-commerce, aplikasi - aplikasi enterprise harus didesign, dibangun

dan diproduksi dengan biaya yang kecil dan pemanfaatan resource yang sedikit

namun dengan hasil yang optimal.

Dalam rangka mengurangi biaya dan untuk mengembangkan aplikasi yang

cepat dan tepat, Java Enterprise Edition menyediakan pendekatan component-

based untuk mendesign, mengembangkan dan mendeploy aplikasi – aplikasi

enterprise. Java Enterprise Edition menawarkan model aplikasi multi tier

terdistribusi, komponen yang dapat digunakan kembali, control transaksi yang

lebih fleksibel dan dukungan web service melalui teknologi XML. Hal ini

membawa dampak pengembang tidak hanya menghasilkan solusi – solusi bisnis

yang innovative secara lebih cepat, tetapi juga solusi J2EE tidak terikat pada

produk dan API dari vendor manapun. Vendor dan customer dapat memilih

produk dan komponen – komponen yang terbaik untuk bisnis dan persyaratan –

persyaratan teknis lainnya.

1.1. Aplikasi – Aplikasi Multitier Terdistribusi

J2EE menggunakan aplikasi multitier terdistribusi untuk membangun

aplikasi – aplikasi enterprise. Aplikasi logik dibagi ke dalam komponen –

komponen menurut fungsi, dan berbagai komponen aplikasi yang

menyusun aplikasi J2EE diinstall pada mesin – mesin yang berbeda menurut

tier dalam lingkungan J2EE multitier. Gambar 1.1 berikut ini menunjukkan

dua aplikasi – aplikasi multitier J2EE yang dibagi ke dalam tier.

Aplikasi J2EE yang ditunjukkan pada gambar 1.1 ini terbagi atas :

1

Page 2: Komplit Modul

o Komponen client-tier yang berjalan pada sisi client

o Komponen web-tier yang berjalan pada server J2EE

o Komponen business-tier yang berjalan pada server J2EE

o Sistem informasi enterprise (EIS) yang berjalan pada EIS

Server

Meskipun aplikasi enterprise dapat terdiri atas tiga atau empat tier seperti

pada gambar 1.1, aplikasi – aplikasi multitier J2EE biasanya terdiri atas tiga tier

karena terdistribusi pada tiga lokasi yaitu client machine, server J2EE dan

database pada sisi back end.

Gambar 1.1 Aplikasi Multitier

1.2.Komponen J2EE

Aplikasi – aplikasi J2EE dibuat oleh komponen – komponen. Suatu

komponen J2EE adalah satuan perangkat lunak fungsional yang

dipasangkan dalam satu aplikasi J2EE dengan kelas – kelas dan file – file

dan yang berkomunikasi dengan component – komponen lainnya.

Komponen – komponen J2EE adalah sebagai berikut :

a. Aplikasi client dan applet adalah komponen – komponen yang

berjalan pada sisi client

2

Page 3: Komplit Modul

b. Komponen – komponen teknologi java servlet dan javaserver pages

adalah web komponen yang berjalan pada server.

c. Komponen – komponen enterprise java beans adalah business

komponen yang berjalan pada server.

Komponen – komponen J2EE ditulis dalam bahasa java dan

dikompilasi dengan cara yang sama seperti bahasa program lainnya.

Perbedaan antara komponen J2EE dan class java standart adalah bahwa

komponen – komponen J2EE diasemble dalam satu aplikasi J2EE dan

dideploy untuk produksi dimana mereka dijalankan dan dimanage oleh

server J2EE.

1.3.J2EE Client

J2EE client dapat berupa suatu web client atau aplikasi client

1.3.1. Web Client

Web client terdiri atas dua bagian yaitu web page dinamis yang

berisi bermacam – macam markup language (HTML,XML dan lain –

lain), yang dihasilkan oleh bermacam – macam web komponen yang

berjalan pada web tier; dan web browser yang merender halaman –

halaman web yang diterima dari server.

Web client kadangkalanya disebut thin client. Thin client biasanya

tidak melakukan query terhadap database, mengekesekusi aturan – aturan

bisnis yang kompleks atau terhubung ke aplikasi – aplikasi yang legal.

1.3.2. Applet

Applet adalah aplikasi client yang ditulis dalam bahasa java yang

dieksekusi oleh java virtual machine yang terinstall pada web browser.

Olehya, client perlu java plug in supaya applet dapat dieksekusi oleh web

browser.

Komponen – komponen web adalah API terpilih untuk membuat

program web client karena tidak ada plug – in atau security policy files

3

Page 4: Komplit Modul

yang dibutuhkan pada sisi client. Juga komponen – komponen web

memungkinkan design aplikasi secara lebih jelas dan modular karena

komponen – komponen web memberikan suatu cara untuk memisahkan

program – program aplikasi dari design halaman web.

1.3.3. Application Client

Application client berjalan pada client machine dan memberikan

fasilitas pada user untuk menangani tugas yang membutuhkan user

interface yang dapat disiapkan oleh satu markup language. Application

client mempunyai graphical user interface yang dibuat dari Swing atau

AWT API, namun memungkinkan juga menggunakan Command Line

Interface.

Application client secara langsung mengakses enterprise bean

yang berjalan pada business tier. Juga applikasi client dapat membuka

koneksi http untuk membangun komunikasi dengan servlet yang berjalan

pada web tier.

1.4.Komunikasi Server J2EE

Gambar 1.2 berikut ini menunjukkan berbagai elemen yang

membentuk client tier.

Gambar 1.2 Komunikasi Server

Client berkomunikasi dengan business tier yang berjalan pada server

J2EE baik secara langsung atau dalam hal client berjalan dalam satu web

4

Page 5: Komplit Modul

browser adalah dengan menggunakan JSP atau Servlet yang berjalan di web

tier. Aplikasi J2EE dapat menggunakan thin browser-based client atau thick

application client. Mana yang akan digunakan, tergantung pada

pertimbangan antara mempertahankan fungsi pada client dan dekat ke user

dan mengurangi beban server sekecil mungkin. Semakin kecil beban server,

semakin mudah untuk mendistribusikan, mendeploy dan mengelola aplikasi

1.5.Komponen – Komponen Web dan Bisnis

Komponen – komponen web dapat berupa servlet atau JSP. Servlet

adalah class – class dari bahasa pemrograman java yang secara dinamis

memproses request dan membentuk response. Halaman – halaman JSP

adalah dokumen teks yng mengeksekusi servlet tetapi memungkinkan

pendekatan natural untuk membuat static content.

Halaman – halaman statis html dan applet digabung dengan

komponen – komponen web selama aplikasi disusun tetapi bukan

merupakan web komponen. Class – class utilitas pada sisi server dapat juga

digabungkan dengan komponen – komponen web dan seperti halaman –

halaman HTML class – class ini tidak dianggap sebagai web komponen.

Seperti terlihat pada gambar 1.3 berikut ini, web tier seperti client tier,

dapat meliputi komponen java bean untuk mengelola masukan user dan

mengirimkan input ke enterprise bean yang berjalan pada bisnis tier untuk

diproses.

Gambar 1.3 Lapisan Web dan Aplikasi J2EE

5

Page 6: Komplit Modul

Kode Binis yang merupakan logika untuk memecahkan kebutuhan

domain bisnis tertentu seperti bank atau perusahaan financial lainnya

ditangani oleh enterprise bean yang berjalan pada bisnis tier. Gambar 1-4

berikut ini menunjukan bagaimana enterprise bean menerima data dari

client, memproses data tersebut jika perlu dan mengirimkannya ke sistem

informasi enterprise untuk penyimpanan. Enterprise bean juga mengambil

data dari penyimpanan, memprosesnya dan mengembalikan ke client.

Gambar 1.4 Lapisan Bisnis dan Sistem Informasi Enterprise

Ada tiga jenis enterprise bean : session bean, entity beans dan

message-driven bean. Session bean menunjukkan suatu percakapan transient

dengan seorang client. Ketika client selesai mengeksekusi, session bean dan

datanya lenyap.Sebaliknya entity bean menunjukan secara persistent data

disimpan dalam satu baris table di suatu database. Jika client berhenti atau

server mati, data entity bean tersimpan. Message-driven bean

mengkombinasikan ciri yang dimiliki oleh session bean dan java message

service (JMS) listener, yang mengijinkan satu komponen bisnis menerima

pesan pesan JMS secara asinkron.

1.6.J2EE Container

Pada dasarnya aplikasi – aplikasi multitier thin-client sulit dalam

pembuatannya karena meliputi banyak baris kode untuk menangani

6

Page 7: Komplit Modul

transaksi, multithreading, resource pooling dan uraian kompleks lainnya.

Arsitektur J2EE menjadikan aplikasi J2EE mudah untuk dibuat karena

logika bisnis disusun dalam komponen – komponen yang dapat digunakan

kembali. Sebagai tambahan server J2EE menyediakan layanan penting

dalam bentuk satu container untuk setiap tipe komponen. Karena kita tidak

harus mengembangkan layanan – layanan ini, maka konsentrasi kita hanya

pada bagaimana memcahkan persoalan – persoalan bisnis.

1.6.1. Container Services

Container adalah interface antara satu komponen dan

platform tertentu pada tingkat rendah yang mendukung komponen

tersebut. Sebelum web komponen, enterprise bean atau komponen

aplikasi client dapat dieksekusi, kompoenen tersebut harus

dipasang dalam satu module J2EE dan dideploy dalam

kontainernya.

Proses pemasangan mencakup penyetingan container tertentu

untuk setiap komponen dalam aplikasi J2EE dan untuk aplikasi

J2EE sendiri. Penyetingan container mengkustomasi pendukung –

pendukung utama yang disediakan server J2EE mencakup

kemaanan, management transaksi, Java Naming and Directory

Interface dan konektivitas remote

Karena arsitektur J2EE menyediakan layanan yang dapat

dikonfigurasi, komponen – komponen aplikasi dalam aplikasi J2EE

yang sama dapat bertindak secara berbeda berdasarkan dimana

mereka dideploy. Sebagai contoh suatu enterprise bean dapat

mempunyai penyetingan keamanan yang mengijinkannya

mengakses database pada satu lingkungan produksi dan akses

database lain pada lingkungan produksi lainnya.

7

Page 8: Komplit Modul

1.6.2. Tipe – Tipe Container

Proses deployment menginstall komponen – komponen

aplikasi J2EE dalam container J2EE seperti digambarkan pada

gambar 1.5.

J2EE Server; menyediakan container Enterprise Java Bean dan

web container

Enterprise Java Bean Container; mengelola eksekusi enterprise

bean untuk aplikasi – aplikasi J2EE. Enterprise bean dan

containernya berjalan pada server J2EE.

Web Container; mengelola eksekusi komponen aplikasi client.

Aplikasi client dan containernya berjalan pada sisi client.

Applet Container; mengelola eksekusi applet, terdiri atas web

browser dan Java Plug-in yang berjalan disisi client secara

bersamaan.

Gambar 1.5 Server J2EE dan Container

RANGKUMAN

Java Enterprise Edition menawarkan model aplikasi multi tier

terdistribusi, komponen yang dapat digunakan kembali, control transaksi

yang lebih fleksibel dan dukungan web service melalui teknologi XML

8

Page 9: Komplit Modul

Aplikasi – aplikasi multitier J2EE terdiri atas tiga tier dan terdistribusi

pada tiga lokasi yaitu client machine, server J2EE dan database pada sisi

back end.

Komponen J2EE adalah satuan perangkat lunak fungsional yang

dipasangkan dalam satu aplikasi J2EE dengan kelas – kelas dan file – file

dan yang berkomunikasi dengan component – komponen lainnya

Komponen J2EE terdiri atas aplikasi client dan applet, komponen –

komponen teknologi javaservlet dan javaserver pages serta java enterprise

beans.

CONTOH SOAL

1. Apa perbedaan antara komponen J2EE dan class java standart ?

Jawaban : Komponen J2EE diassemble dalam satu aplikasi J2EE dan

dideploy produksi dimana mereka dijalankan dan dimanage oleh server

J2EE. Class java standart dikompile dan dieksekusi mengunakan java

virtual machine dan tidak membutuhkan server J2EE dalam proses

produksinya.

2. Apa yang dimaksud dengan applet dan syarat mengeksekusi applet ?

Jawaban : Applet adalah aplikasi client yng ditulis dalam bahasa java

yang dieksekusi oleh java virtual machine yang terinstall pada web

browser. Syarat untuk mengeksekusi applet adalah client harus memiliki

java plug-in.

LATIHAN SOAL

1. Jelaskan komponen – komponen JEE yang membentuk client tier dan middle tier !

2. Jelaskan secara singkat perbedaan antara web container dan EJB container !

3. Sebutkan dan jelaskan kegunaan dari masing – masing container yang ada dalam JEE ?

4. Jelaskan pengertian anda tentang aplikasi multi tier !

9

Page 10: Komplit Modul

BAB II

DASAR SERVLET

2.1. Servlet

Servlet merupakan dasar dari teknologi java web. Servlet adalah

program java yang dieksekusi di server untuk membuat web. Servlet

merupakan sebuah class java yang mempunyai kemampuan sebagai

server, sehingga jika kita ingin membuat sebuah aplikasi web dengan

servlet, maka harus dilakukan coding class – class java biasa. Servlet

bekerja berdasarkan model request – response, artinya servlet akan

melakukan tindakan (response) setelah servlet menerima request dari

client.

Servlet juga dipanggil sebagai HTTPServlet karena servlet

biasanya digunakan sebagai HTTP. HTTPServlet merupakan pintu

masuk dan keluar bagi request dan response.

Servlet mirip dengan teknologi Common Gateway Interface(CGI),

Objek servlet terjadi hanya sekali ketika servlet diinisialisasi dan

kemudian diam di dalam memori. Dampaknya adalah servlet menjadi

lebih cepat karena setiap ada request servlet tidak akan menciptakan

objek baru lagi. Sedangkan pada CGI setiap request akan menciptakan

objek baru. Servlet dibuat dengan bahasa java sehingga dapat

digabungkan dengan teknologi java lainnya seperti JDBC, EJB,RMI dan

sebagainya.

2.2. Siklus Hidup Servlet

Siklus hidup servlet dikendalikan oleh web container, dimana

servlet dideploy. Siklus hidup servlet terdiri atas 3 tahap yaitu init( ),

service( ) dan destroy( ). Siklus hidup servlet dapat dilihat pada gambar

berikut ini :

10

Page 11: Komplit Modul

Initialization(Load Resources)

Service(Accept Request)

Destruction(Unload Resources)

Request

Response

S e r v l e t

Gambar 2.1 Siklus hidup servlet

Siklus hidup servlet diawali dengan method init( ) yang dipanggil

oleh web container setelah servlet diinisialisasi. Saat inisialisasi ini web

container akan mengecek apa saja yang diperlukan oleh servlet misal

servlet perlu mengakses servlet yang lain, database atau yang lainnya.

Setelah servlet dinisialisasi, web container memanggil method

service( ). Pada tahap ini servlet siap menunggu request untuk kemudain

melakukan proses dan mengirimkan response kepada client. Method

destroy ( ) dipanggil ketika web container dimatikan atau servlet

diundeploy. Untuk mengaktifkan kembali servlet harus diinisialiasi lagi

dari awal.

2.3. Servlet API

Servlet API terdiri atas 2 package, yaitu javax.servlet dan

javax.servlet.http. Package ini merupakan package diluar java SE

(Standart Edition) dan didistribusikan bersama package java EE

(Enterprise Edition).

11

Page 12: Komplit Modul

javax.servlet.Servlet

javax.servlet.Servlet

MyServlet

javax.servlet.http.HttpServlet

Gambar 2.2 Servlet API

Servlet sendiri sebenarnya hanyalah sebuah java class. Namun

perbedaannya dari class java biasa adalah servlet merupakan turunan

dari HttpServlet. Tujuan menurunkan class HttpServlet adalah agar

class java (servlet) yang dibuat bisa menjalankan mekanisme request –

response melalui protocol HTTP, dimana aplikasi web akan berjalan.

public class MyServlet extends HttpServlet{

protected void doGet(HttpServletRequest request,HttpServletResponse response )

throws Exception{}

}

HttpServlet merupakan class abstrak, sehingga untuk menggunakan

servlet kita harus mengimplementasikan salah satu method yang ada,

yaitu doGet( ) dan doPost( ), yang merupakan method pengiriman

request melalui protocol HTTP. Perbedaan doGet( ) dan doPost( ) secara

mudah terlihat pada URL nya. Ciri dari doGet( ) adalah URL yang

panjang berisi data parameternya. Ciri dari doPost( ) adalah URL yang

12

Page 13: Komplit Modul

Request

Servlet

Response

Browser Request

Response

pendek tanpa terlihat isi parameter. Jadi jika data yang dikirim bersifat

rahasia misalnya pada form login maka gunakan doPost( ), namun jika

data tidak begitu penting semisal link gunakan saja doGet( ).

2.4. Penggunaan Servlet

Fungsi servlet adalah untuk membuat web dinamis bagi user.

Secara umum, cara kerja servlet adalah menerima request kemudian

mengirim response

Gambar 2.3 Servlet request - response

Client (browser) mengirimkan HTTP request pada servlet

container, kemudian servlet container akan menghantar request ke

servlet yang dimaksud. Servlet akan menjalankan program java dan jika

diperlukan servlet bisa mengakses database atau lainnya untuk

menghasilkan output berupa halaman HTML. Halaman HTML ini

diserahkan ke servlet container untuk dikirim kembali sebagai response

kepada client.

2.5. Contoh Program

Untuk lebih memahami mekanisme kerja dari servlet, berikut ini

akan dibuatkan contoh servlet dengan menggunakan netbeans IDE.

Servlet yang akan dibuat berupa aplikasi form registrasi. Langkah –

langkahnya adalah sebagai berikut :

13

Page 14: Komplit Modul

1. Buat project baru dan pilih category Java web dan projects Web

Application, lihat gambar berikut

Gambar 2.4 Memilih project Web Application

2. Berikan nama yang diinginkan untuk project, pastikan server yang dipilh

Apache Tomcat dan versi java ee yang digunakan adalah Java EE 5. Klik

Finish

Gambar 2.5 Memilih server Apache Tomcat

14

Page 15: Komplit Modul

3. Buat servlet baru dan beri nama FormRegistration. Isikan package : servlet.

Klik next. Ubah url pattern menjadi /registration. Klik Finish

Gambar 2.6 Konfigurasi URL Pattern servlet FormRegistration

4. Kita akan buat form registrasi sederhana yang berisi input

nama,alamat,email dan pemilihan paket internet. Ubah code servlet

FormRegistration pada method processRequest( ). Ketik kode berikut

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>Registration Form</title>"); out.println("</head>"); out.println("<body>"); out.println("<h2>Form Registrasi</h2>"); out.println("<form method='post' action='show'>"); out.println("<fieldset>" + "Nama: " + "<input type='text' name='nama' />" + "</br></br>" + "Alamat: " +

15

Page 16: Komplit Modul

"<textarea name='alamat' >" + "</textarea>" + "</br></br>" + "Email: " + "<input type='text' name='email' />" + "</br></br>" + "Paket: " + "<input type='radio' name='paket' value='Personal' />" + "Personal " + "<input type='radio' name='paket' value='Game' />" + "Game" + "<input type='radio' name='paket' value='Office' />" + "Office" + "</br></br>" + "<input type='submit' value='Daftar >>' />" + "</fieldset>"); out.println("</form>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }

5. Buat lagi sebuah servlet untuk membaca data yang diinput pada form

registration. Beri nama ShowData dengan package servlet. Ubah url pattern

menjadi /show. Kemudian ketikkan kode berikut ini

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); String nama = request.getParameter("nama"); String alamat = request.getParameter("alamat"); String email = request.getParameter("email"); String paket = request.getParameter("paket"); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>Registration Form</title>"); out.println("</head>");

16

Page 17: Komplit Modul

out.println("<body>"); out.println("<h2>Data Pelanggan Baru</h2>"); out.println("<table border='1' cellpadding='4' cellspacing='2'>" + "<tr><td>Nama: </td><td>" + nama + "</td></tr>" + "<tr><td>Alamat: </td><td>" + alamat + "</td></tr>" + "<tr><td>E-mail: </td><td>" + email + "</td></tr>" + "<tr><td>Pilihan Paket: </td><td>" + paket + "</td></tr>" + "</table>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }

6.Ubah welcome page dengan mengklik ganda web.xml arahkan ke

FormRegistrasi.

7.Jalankan project, klik kanan project dan pilih Build. Klik kanan project pilih

Run. Akan tampil hasil seperti berikut ini :

8.Klik tombol daftar maka akan tampil output sebagai berikut

17

Gambar 2.7 Servlet Registrasi

Page 18: Komplit Modul

RANGKUMAN

Servlet adalah program java yang dieksekusi di server untuk membuat web

dan merupakan sebuah class java yang mempunyai kemampuan sebagai

server

Siklus hidup servlet dikendalikan oleh web container, dimana servlet

dideploy. Siklus hidup servlet terdiri atas 3 tahap yaitu init( ), service( ) dan

destroy( ).

Servlet API terdiri atas 2 package, yaitu javax.servlet dan javax.servlet.http

Fungsi servlet adalah untuk membuat web dinamis bagi user dan secara

umum, cara kerja servlet adalah menerima request kemudian mengirim

response

LATIHAN SOAL

1.Jelaskan pengertian anda tentang servlet dan penggunaannya dalam membangun program

aplikasi untuk skala enterprise !

2.Dengan menggunakan netbeans IDE buatlah servlet yang dapat dipakai untuk memberikan

fasilitas Login bagi user.

18

Page 19: Komplit Modul

BAB III

SERVLET LANJUT

3.1. Pengalihan Response

Ada banyak jenis response yang diberikan oleh servlet sebagai

tanggapan atas request client. Salah satunya adalah mengalihkan response

itu sendiri untuk ditangani oleh servlet lain atau mengalihkan ke halaman

jsp atau bagian aplikasi web lainnya.

Contoh kasusnya misalnya pada aplikasi web yang memerlukan

login untuk mengaksesya. Jika yang mengakses adalah user biasa, tentunya

hasilnya akan berbeda jika yang mengakses adalah super user/ admin. User

biasa akan diarahkan pada halaman member, sedangkan super user akan

diarahkan ke halaman administrator. Hal ini dilakukan dengan cara

mengarahkan response. Ada dua method yang dipakai untuk mengalihkan

response, yaitu :

1. RequestDispatcher( )

2. sendRedirect( )

3.1.1. Request Dispatcher

RequestDispatcher ditemukan berada dalam object

HttpServletRequest. Dengan memanggil method getRequestDispatcher

( String path ), kita tentukan parameter pathnya, dimana request akan

diteruskan. Parameter path ini bisa berupa lokasi file jsp atau servlet

lain yang ingin dihubungkan dengan request.

Setelah kita menciptakan object getRequestDispatcher, kita

dapat memanggil salah satu dari dua method berikut, yaitu :

public void include ( )

public void forward ( )

19

Page 20: Komplit Modul

Kedua method tersebut akan mengalihkan response ke lokasi yang

ditentukan dalam parameter path tadi. Perbedaan utama dari include

dan forward adalah jika menggunakan include, kita dapat

menambahkan isi lain ke response, sedangkan jika menggunakan

forward hanya mengirimkan response saja.

3.1.2. SendRedirect

Method sendRedirect ( ) dapat ditemukan dalam object

HttpServletresponse. Dengan memanggil method sendRedirect ( String

relativePath), kita dapat menglihkan response ke relative path tertentu.

Method ini secara efektif memerintahkan browser untuk mengirim

request yang lain ke relative path-nya.

Untuk lebih memahami mengenai pengalihan response dengan

kedua cara diatas perhatikan contoh berikut dengan mengikuti langkah

– langkah berikut ini :

1.Buat project baru dengan nama DemoServletLanjut. Lakukan

penyetingan seperti pada bab sebelumnya

2.Buat fom login pada index.jsp. Ketikkan kode berikut ini

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h2>Login</h2> <form method='post' action='LoginRedirect'> <fieldset> Username: <input type='text' name='uname' /> <br><br> Password: <input type='password' name='pass' /> <br><br>

20

Page 21: Komplit Modul

<input type='submit' value='Login' /> </fieldset> </form> </body></html>

3.Buat dua halaman jsp lagi, yaitu admin.jsp dan user.jsp

Gambar 3.1 Membuat JSP File

4.Buat tulisan “Welcome Admin” di dalam tag body

5.Buat juga hal yang sama untuk user.jsp

6.Buat sebuah servlet untuk mengecek input pada username dan

password. Beri nama LoginDispatcher

7.Pada method processRequest( ) ketikkan kode berikut ini

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("uname"); String password = request.getParameter("pass"); RequestDispatcher dis = null;

21

Page 22: Komplit Modul

if(username.equalsIgnoreCase("admin") && password.equals("admin")){ dis = request.getRequestDispatcher("/admin.jsp"); }else if(username.equalsIgnoreCase("user") && password.equals("user")){ dis = request.getRequestDispatcher("/user.jsp"); }else{ out.println("Login Salah!!"); dis = request.getRequestDispatcher("/index.jsp"); } //dis.include(request, response); dis.forward(request, response); }

8.Build dan Run servlet, coba masukan admin dan password “admin”.

Akan didapat tampilan sebagai berikut

Gambar 3.2 Login sebagai Admin

9.Lakukan hal yang sama untuk username “user” dan password “user”

3.2. Request Dispatcher VS SendRedirect

Kita telah menggunakan requestDispatcher dan sendRedirect dan

hasil yang ditampilkan oleh web browser adalah sama. Namun sebetulnya

ada perbedaan antara kedua method ini, seperti yang Nampak pada url dari

kedua method ini :

RequestDispatcher

SendRedirect

22

Page 23: Komplit Modul

Pada requestDispatcher program tidak menciptakan request yang

baru. Request hanya terjadi satu kali, yaitu request ke servlet

LoginDispatcher. Coba kita login sebagai user atau kita isi saja sembarang,

maka url-nya tetap sama seperti itu.

Pada sendRedirect program akan menciptakan request yang baru.

Disini request terjadi dua kali, yaitu request ke servlet LoginRedirect

kemudian request ke halaman index.jsp. Coba kita login sebagai user atau

kita isi saja sembarang, maka url-nya akan berbeda.

3.3. Context

Di dalam java kita bisa menyimpan data yang kompleks/objek.

Objek disini bukan database ataupun file, tetapi data yang sedang diolah

program. Objek disimpan dalam sebuah context.

Spesifikasi servlet memberikan empat penyimpanan data dalam java,

yaitu :

Page Context

Jika kita menyimpan objek pada Page Context, maka kita definisikan

dahulu object tersebut pada sebuah halaman. Page Context hanya

dikenali pada halaman yng mendefinisikannya

Request Context

Pada request context, objek disimpan pada sebuah request tunggal.

Objek dapat dikenali oleh semua komponen web yang menangani

request dari client, namun hanya saat request itu dikirimkan dan

response diterima oleh client. Ketika ada request lainnya muncul,

request sebelumnya tidak dapat dikenali lagi. Objek yang tergabung

dengan bidang ini adalah objek HttpServletRequest. Instance –

instance dari objek ini siap dan dapat digunakan untuk servlet, sama

seperti yang mereka berikan sebagai parameter untuk method service

yang dipanggil oleh container di atas request client.

Session

23

Page 24: Komplit Modul

Objek dalam session dapat diakses oleh semua komponen aplikasi web

dan akan terus tersimpan selama session belum mencapai timeout atau

user logout dari sistem dan objek dihapus dari session. Objek dari suatu

session user, bagaimanapun tidak terlihat dari dalam session user yang

lain. Penggunaan session misalnya pada aplikasi took online. Session

digunakan untuk menyimpan data pemesanan barang.

Objek yang tergabung dengan bidang ini adalah objek HttpSession.

Sebuah instance dari ini bisa didapatkan kembali menggunakan method

getSession( ) dalam objek HttpServletRequest.

Application Context

Objek yang tersimpan dalam application context dapat dikenali oleh

semua komponen aplikasi web tanpa memperhatikan request user atau

session client yang mengatur dan mengakhiri sampai aplikasi

dihentikan. Objek yang dibaca oleh client satu dengan lainnya akan

sama client mengakses context yang sama. Objek yang tergabung

dengan bidang ini adalah objek ServletContext. Ini bisa didapatkan

kembali dengan memanggil method getServletContext( ) dari objek

yang valid ServletConfig. Servlet context mendefinisikan berbagai

fungsi yang digunakan servlet untuk berkomunikasi dengan servlet

container meliputi penghantaran request, penulisan ke log dan

sebagainya.

3.4. Mengakses Context

Semua objek context memiliki method untuk mengambil kembali dan

menyimpan data di dalamnya. Untuk menyimpan objek gunakan method :

public void setAttribute ( String key, Object value)

parameter key merupakan nama kunci yang digunakan untuk

menyimpan objek. Key ini akan dipanggil lagi jika kita ingin membaca

24

Page 25: Komplit Modul

atau menghapus objek yang telah disimpan. Untuk membaca objek,

gunakan method :

public Objek getAttribute ( String key)

Nilai kembalian dari method getAttribute ini adalah Objek, sehingga

kita harus melakukan casting Objek ke class yang sesuai. Jika tidak ada

objek yang bisa mendapatkan kembali dari key yang diberikan, method

akan mengembalikan nilai null. Untuk menghapus sebuah attribute dari

objek, gunakan method

removeAttribute ( String key)

Berikut ini adalah contoh penggunaan context, khususnya request context.

Ikuti langkah – langkah berikut ini :

1. Buat project baru dan beri nama DemoServletContext

2. Lakukan penyetingan untuk server dan tipe enterprise edition yang

digunakan

3. Buat sebuah form input nama pada index.jsp, dengan mengetikkan

kode berikut ini :

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h2>Masukkan Nama Anda</h2> <form method='post' action='save'> <input type='text' name='nama' /> <br><br> <input type='submit' value='Submit' /> </form> </body></html>

25

Page 26: Komplit Modul

4. Buat sebuah servlet baru untuk menyimpan context dan beri nama

SaveContext. Atur konfigurasi seperti didepan.

5. Ubah method processRequest( ) pada servlet seperti pada kode berikut

ini :

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nama = request.getParameter("nama");

//request.setAttribute("namactx", nama); ServletContext ctx = getServletContext(); ctx.setAttribute("namactx", nama);

RequestDispatcher dis = request.getRequestDispatcher("view"); dis.forward(request, response); }

6. Buat servlet yang baru beri nama ViewContext dan ubah method

processRequest( ) dengan kode berikut ini :

protected void processRequest( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();

//String nama = (String) request.getAttribute("namactx"); ServletContext ctx = getServletContext(); String nama = (String) ctx.getAttribute("namactx");

try { out.println("<html>"); out.println("<head>"); out.println("<title>View Context</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Nama Anda : " + nama + "</h1>"); out.println("</body>"); out.println("</html>"); } finally { out.close();

26

Page 27: Komplit Modul

} }

7. Build dan jalankan project. Akan diperoleh tampilan sebagai berikut :

Klik submit akan didapat tampilan sebagai berikut

8. Sekarang coba ketikkan langsung url ini :

http://localhost:8084/DemoServletContext/view. Hasilnya adalah tidak

ada isi context yang bisa diambil. Jadi harus melewati mekanisme yang

sesuai. Ini terjadi karena pada RequestContext, objek disimpan hanya

dalam satu request tunggal.

RANGKUMAN

Dalam servlet response ditangani dengan cara mengalihkan response itu

sendiri untuk ditangani oleh servlet lain atau dialihkan ke halaman jsp atau

aplikasi web lainnya

Ada dua method yang digunakan untuk mengalihkan response yaitu

RequestDispatcher ( ) dan sendRedirect ( )

Pada requestDispatcher program tidak menciptakan request yang baru.

Request hanya terjadi satu kali. Coba kita login sebagai user atau kita isi

saja sembarang, maka url-nya tetap sama seperti itu. Pada sendRedirect

program akan menciptakan request yang baru. Disini request terjadi dua kali

RequestDispatcher berada dalam class HttpServletRequest dan memiliki dua

method yaitu public void include( ) dan public void forward ( ).

27

Page 28: Komplit Modul

Perbedaan utama dari include dan forward adalah jika menggunakan

include, kita dapat menambahkan isi lain ke response, sedangkan jika

menggunakan forward hanya mengirimkan response saja.

Ada empat penyimpanan data dalam java yaitu Page Context, Request

Context, Session dan Application Context.

SOAL LATIHAN

1. Berikan perbedaan antara requestDispatcher ( ) dan sendRedirect ( ), dua

metode yang dipakai untuk mengalihkan response !

2. Jelaskan perbedaan antara session, application context, page context dan

request context !

3. Coba anda modifikasi contoh Request Context diatas menjadi Application

Context !

4. Buatlah contoh program penggunaan servlet dan jsp untuk mengalihkan

response dari suatu servlet ke halaman jsp !

28

Page 29: Komplit Modul

BAB IV

COOKIE

Aplikasi web adalah aplikasi yang stateless, dimana server tidak akan

mengingat request client. Akibatnya setiap request yang masuk selalu dianggap

oleh server berasal dari client – client yang berbeda. Padahal kadang – kadang

server juga perlu mengenali client, missal untuk kepentingan autentikasi dimana

client tidak bisa mengakses sembarang halaman yang tidak diizinkan. Untuk

mengatasi masalah ini, bisa digunakan cookie atau session.

4.1. Cookie

Cookie merupakan informasi kecil yang dikirim kepada

client/browser dari server. Cookie dijadikan tempat penyimpanan

sementara state yang disimpan disisi client/ browser. Oleh browser cookie

akan disimpan dan nantinya dapat dikirimkan kembali ke server jika

diperlukan.

Biasanya cookie dipakai untuk mengidentifikasi client. Cookie berisi

suatu ID yang unik pada tiap client. Biasanya server bisa mengenali

banyak client yang pada saat bersamaan sedang melakukan request.

Dalam kasus tertentu misalnya website yang mewajibkan user untuk

login supaya dapat mengakses resource – resource dari website tersebut,

tentunya akan repot jika user harus terus – menerus melakukan login setiap

mengakses halaman website yang berbeda. Oleh karena itu server dapat

mengirimkan cookie berupa identitas masing – masing client, sehingga

dapat dikenali apakah client yang bersangkutan sudah melakukan login

atau belum.

Cookie disimpan di browser. Browser yang berbeda dianggap

sebagai client yang berbeda dan cookie bisa dihapus melalui browser

masing – masing. Mungkin anda pernah mengsakses website, dimana kita

29

Page 30: Komplit Modul

atur menggunakan bahasa Indonesia dalam website itu, dan ketika

mengakses kembali website dengan browser yang sama maka secara

otomatis website langsung menampilkan halaman berbahasa Indonesia. Ini

terjadi karena browser menyimpan state penggunaan bahasa kita. Namun

ketika kita mengakses dengan browser yang lain, kita harus mengatur

kembali penggunaan bahasanya karena kita sudah dianggap client yang

berbeda.

Cookie hanya dapat menampung data String sederhana bukan data

kompleks seperti context. Cookie akan terhapus begitu browser ditutup,

namun cookie dapat diatur waktu hidupnya sehingga bisa disimpan lebih

lama oleh web browser. Selain itu cookie hanya diubah oleh server dari

mana cookie tersebut berasal.

4.2. Keuntungan dan Kelamahan Cookie

Dengan karekteristik cookie seperti yang sudah dijelaskan

sebelumnya, maka cookie memiliki beberapa keuntungan sekaligus

kelemahan. Kelemahan cookie yang utama, yaitu karna cookie disimpan

oleh client maka setiap client yang ingin mengakses website yang

membutuhkan cookie, wajib menggunakan browser yang mendukung

cookie dan mengaktifkan cookie-nya. Jika tidak, aplikasi web tidak akan

berjalan sebagaimana mestinya. Ini adalah kelemahan di mana aplikasi

web menjadi sangat bergantung dengan client itu sendiri.

Meski hanya bisa dimodifikasi oleh server, namun cookie bisa

dibaca oleh unauthorized user. Cookie dapat meningkatkan beban di

jaringan akibat informasi yang sama yang dikirim terus menerus. Namun,

beban ini biasanya tidak akan terasa karena ukuran cookie sendiri yang

sangat kecil, yaitu sekitara 4kb. Keuntungan penggunaan cookie selain bisa

digunakan untuk identifikasi client adalah cookie tidak terpengaruh pada

30

Page 31: Komplit Modul

crash server karena data disimpan di client serta dapat meringankan beban

di memori user.

4.3. Cookie di Java

Di java sudah disediakan fasilitas untuk menggunakan cookie

melalui class javax.servlet.http.Cookie. Untuk menciptkan cookie , berikut

langkah – langkahnya :

1. Panggil contructor Cookie. Misal seperti ini :

Cookie c = new Cookie (“ckieNama”,”maksy”);

String “ckieNama’ adalah nama cookie-nya sedangkan string “maksy”

adalah isi cookie-nya. Nama dan isi cookie tidak boleh mengandung

spasi, tab dan karakter seperti { [] ( ) = , “ / @ : ;

2. Agar cookie tidak terhapus begitu browser ditutup dan masih bisa

digunakan lagi, atur umur maksimum cookie-nya.

c.setMaxAge(60*60*24);

Berarti umur maksimum cookie kita adalah 60 x 60 x 24 detik atau 1

hari. Setelah itu cookie akan terhapus.

3. Untuk mengirimkan cookie kepada client, tambahkan cookie kepada

object response.

response.addCookie(c);

Untuk membaca cookie gunakan method request.getCookie( ). Nilai

kembalian dari method ini adalah array object cookie yang disimpan oleh

browser dan akan mengembalikan null jika tidak ada cookie. Untuk

mendapatkan cookie yang kita maskud, lakukan pengulangan menggunakan

method getName( ) pada setiap objek cookie sampai ditemukan cookie yang

dimaksud.

4.4. Contoh Program

Dalam contoh program ini akan dibuat sebuah halaman login dan

sebuah halaman khusus untuk member. Jika kita login sebagai member,

31

Page 32: Komplit Modul

kita akan diizinkan mengakses halaman khusus member tersebut dan jika

bukan member maka tidak akan izinkan. User member maupun non

member akan memperoleh id masing – masing . Sehingga jika ada user

non-member yang ingin langsung mengakses halaman khusus member

tanpa login maka akan ditolak.

1. Buat sebuah project dan beri nama DemoCookie. Lakukan penyetingan

seperti didepan pada project sebelumnya.

2. Buat sebuah form input username dan password pada index.jsp dengan

mengetikkan kode berikut ini :

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h2>Member Login</h2> <form method='post' action='login'> <fieldset> Username: <input type='text' name='uname' /> <br><br> Password: <input type='password' name='pass' /> <br><br> <input type='submit' value='Login' /> </fieldset> </form> </body></html>

3. Buat lagi sebuah halaman jsp dengan nama member.jsp. Ketikkan kode

berikut ini

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title>

32

Page 33: Komplit Modul

</head> <body> <h1>Halaman Khusus Member</h1> </body></html>

4. Buat sebuah servlet baru untuk menambah cookie dan beri nama

LoginCookie. Ubah pattern menjadi /login dan ketikkan kode berikut

dalam method processRequest ( ).

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("uname"); String password = request.getParameter("pass"); String cookieMember = "1234567890"; String cookieNonMember = "000"; if(username.equalsIgnoreCase("member") && password.equals

("member")){ Cookie c = new Cookie("ckieNama", cookieMember); c.setMaxAge(60*60); response.addCookie(c); out.println("<html>"); out.println("<head>"); out.println("<title>Login</title>"); out.println("</head>"); out.println("<body>"); out.println("<h2>Login benar!!!</h2>");

out.println("<h3><a href=\"member\">Klik untuk menuju ke halaman member...</a></h3>");

out.println("</body>"); out.println("</html>"); }

else{

Cookie c = new Cookie("ckieNama", cookieNonMember); c.setMaxAge(60*60); response.addCookie(c); out.println("Login Salah!!"); RequestDispatcher dis = null;

33

Page 34: Komplit Modul

dis = request.getRequestDispatcher("/index.jsp"); dis.include(request, response); } }

Program ambil nilai dari form input username dan password. Username dan

password ini akan divalidasi.

o Jika username dan passwordnya adalah “member” maka cookie

ckieNama akan bernilai konstanta cookieMember dan akan

menampilkan halaman “Login benar” serta link untuk memasuki

halaman member

o Jika username dan password bukan “member” maka cookie ckieNama

akan bernilai konstanta cookieNonMember dan akan dikembalikan ke

index.jsp dengan peringatan “Login salah”.

Cookie diset berumur 60 x 60 detik atau 1 jam. Setelah durasi request

mencapai 1 jam maka cookie akan terhapus. Didalam aplikasi professional,

isi cookie jangan berupa konstanta. Isi cookie haruslah acak dan unik untuk

client tertentu, bisa saja berdasarkan username dan password.

5. Buatlah lagi sebuah servlet untuk mengarahkan user ke halaman member dan

beri nama MemberPage. Ketik kode berikut dalam method processRequest ( )

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); RequestDispatcher dis; String cookieMember = "1234567890";

try { Cookie[] cookies = request.getCookies(); String cNama = ""; if(cookies!=null){ for(int x=0; x<cookies.length; x++){ if(cookies[x].getName().equals("ckieNama")){ cNama = cookies[x].getValue();

34

Page 35: Komplit Modul

break; } } }

if(cNama.equals(cookieMember)){ dis = request.getRequestDispatcher("/member.jsp"); } else { dis = request.getRequestDispatcher("/index.jsp"); out.println("Anda Belum Login Sebagai Member!!"); } dis.include(request, response); } finally { out.close(); } }Di servlet MemberPage ini program akan mengecek lagi validitas dari client.

Mengapa kit cek lagi validitas clientnya ? Untuk mencegah client non-

member yang ingin masuk ke halaman member tanpa mekanisme login

terlebih dahulu. Program akan mengecek semua cookie pada client . Jika ada

cookie dengan nama ckieNama, selanjutnya akan diperiksa isi cookie

tersebut.

o Jika isi cookieNama adalah konstanta cookieMember maka client akan

diarahkan ke halaman khusus member (member.jsp)

o Jika isi cookie ckieNama bukan konstanta cookieMember maka client

akan diarahkan ke halaman index.jsp dengan peringatan “Anda belum

login sebagai member”.

6. Build dan Run project. Masuklah sebagai member. Ketik username dan

password “member”.

35

Gambar 4.1. Login sebagai member

Page 36: Komplit Modul

7. Jika login benar akan muncul tampilan berikut :

8. Klik link-nya kita akan masuk ke halaman member.

9. Kita sudah masuk sebagai member. Kita coba untuk langsung mengakses

halaman member tanpa melalui mekanisme login. Buka tab baru dan

ketikkan url berikut :

http://localhost:8084/DemoCookie/member

10. Hasilnya kita akan tetap bisa mengakses halaman khusus member. Tetapi

cobalah membuka browser lain dan masuk langsung ke halaman khusus

member. Ketik url berikut : http://localhost:8084/DemoCookie/member.

Kita tidak bisa mengakses halaman member karena dianggap belum login

disebabkan browser berbeda, berarti client berbeda pula.

11. Sekarang coba untuk masuk sebagai member. Ketikkan username dan

password sembarang. Hasilnya akan dikembalikan ke index dengan

peringatan login salah.

36

Gambar 4.2. Berhasil masuk sebagai member

Gambar 4.3. Halaman index dengan peringatan user belum login sebagai member

Gambar 4.4. Peringatan Login Salah

Page 37: Komplit Modul

12. Kita belum masuk sebagai member. Coba lagi untuk langsung mengakses

halaman member tanpa melalui mekanisme login. Buka tab baru dan

ketikkan url berikut : http://localhost:8084/DemoCookie/member. Hasilnya

akan dikembalikan ke index dengan peringatan bahwa kita belum masuk

sebagai member. Ini terjadi karena isi cookie kita sudah berubah, bukan

cookie member lagi.RANGKUMAN

Cookie merupakan informasi kecil yang dikirim kepada client/browser dari server dan

cookie dijadikan tempat penyimpanan sementara state yang disimpan disisi

client/browser.

Cookie dipakai untuk mengidentifikasi client dan berisi ID unik pada tiap client.

Cookie hanya dapat menampung data string sederhana dan bukan data kompleks seperti

data context

Cookie akan terhapus begitu browser ditutup , namun cookie bisa diatur waktu hidupnya

sehingga bisa disimpan lebih lama oleh web browser.

Kelemahan cookie yang utama adalah pengguna wajib menggunakan web browser yang

mendukung cookie dan mengaktifkan cookienya. Cookie dapat meningkatkan beban di

jaringan akibat informasi yang sama yang dikirim terus – menerus.

Keuntungan cookie adalah bahwa cookie bisa digunakan untuk identifikasi client dan

tidak terpengaruh pada crash server karena data disimpan di client serta dapat

meringankan beban di memori user.

Java menyediakan fasilitas untuk menggunakan cookie melalui class

javax.servlet.http.Cookie

LATIHAN SOAL

1. Jelaskan apa yang dimaksud dengan cookie !

2. Kemukakan kelemahan dan keuntungan cookie. Jelaskan !

3. Jelaskan tahapan membuat cookie di java !

4. Buatlah program berbasis java web yang mengimplementasikan cookie dalam transaksi

pembelian barang Gunakan servelt dan jsp.

37

Page 38: Komplit Modul

BAB V

SESSION

5.1. Session

Session merupakan fasilitas penyimpanan pada server untuk

mengidentifikasi client. Session dikirim pertama kali oleh server ketika

client melakukan request. Session disimpan di sisi server. Pada request –

request selanjutnya yang berasal dari client yang sama, client akan tetap

berada dalam session yang sama selama session tersebut valid.

Server akan menandai client dengan session ID yang unik.Tiap

client yang mengakses server akan memiliki session masing – masing. Jika

ada dua client mengakses server, maka dua client tersebut akan memiliki

session ID yang berbeda dan antar session client tidak saling berhubungan.

Berbeda dengan application context yang dibahas pada bab

sebelumnya, pada application context, isi context bisa diakses oleh semua

client. Jika isi context adalah A maka kedua client bisa mengakses context

yang sama yang bernilai A. Namun di session, masing – masing client

memiliki session sendiri. Jika context client 1 bernilai A, maka context

client 2 belum tentu bernilai A.

Session memiliki waktu hidup di server. Session dapat diakhiri atas

permintaan user. Session otomatis akan berakhir ketika kita menutup

browser. Tapi waktu hidup server bisa juga diatur oleh server. Tidak ada

batasan waktu bagi session, bisa dalam hitungan detik, menit, hari bulan

bahkan bertahun – tahun. Mungkin kit apernah login ke email kita, tapi

sebelum kita logout, kita sudah tutup browser kita. Saat kita membuka

email kita, kita diruh login lagi. Itu karena server sudah lupa dengan

session kita. Namun ada juga email yang langsung masuk ke account kita,

meski kita sudah menutup browser-nya. Itu karena session kita masih aktif

sehingga server masih mengingat kita.

38

Page 39: Komplit Modul

Karena session disimpan di sisi server, maka tidak ada kekhwatiran

atas penolakan session oleh client/browser seperti pada cookie. Namun

sebaliknya, jika ada banyak client maka server juga harus mengingat

banyak client pula. Hal ini akan membuat beban memori server menjadi

berat. Karena itu ada mekanisme logout untuk mengakhiri session,

disamping untuk keamanan client juga.

Session dapat menampung berbagai jenis data object, bahkan object

yang kompleks. Karena itu session tidak hanya dapat digunakan untuk

identifikasi client saja, namun juga untuk hal lainnya.

Konsep session ini biasa digunakan, semisal pada aplikasi web yang

memerlukan login penggunanya. Server dapat menyimpan data unik

berdasarkan username dan password di dalam session. Atau pada aplikasi

toko online. Dimana keranjang belanja client satu dan lainnya akan

berbeda. Seorang client bisa melakukan request berkali – kali untuk

mengumpulkan barang – barang yang ingin dibeli dalam keranjang belanja

yang sama. Keranjang belanja inilah yang disimpan di session.

5.2. Session – Tracking

Di java untuk memanipulasi session kita menggunakan class

HttpSession. HttpSession berfungsi untuk mendapatkan session saat ini

atau menciptakan session baru. Semua data untuk satu session tertentu

disimpan dalam server. Ketika ada request dating dari client tertentu maka

perlu cara mengidentifikasi client tersebut masuk dalam session yang

mana, sehingga server perlu memberi ID bagi tiap client.

Ada tiga cara pemberian ID bagi client untuk session tertentu

(session tracking)

Cookie; ketika server membuat session, session ID akan disertakan

dalam bentuk cookie dan disimpan di browser. Jika client melakukan

39

Page 40: Komplit Modul

request, cookie dikirim kembali ke server. Kelemahan cookie adalah

cookie bisa ditolak oleh browser client

URL-rewriting; jika browser menolak cookie , URL-rewriting bisa

menjadi solusi penggantinya. Session ID dan parameter lainnya akan

disertakan dalam url. Contohnya seperti url ini :

http://www.websit.com/page?id=12345&&user=member. Meski bisa

menjadi alternative cooki, URL-rewriting juga memiliki kelemahan

karena membutuhkan pengolahan ekstra oleh server

Hidden Form-Fields

Hidden form-field ini menggunakan komponen input html sebagai

bagian dari tag <form>, di mana session ID dimasukkan ke dalam input

form tersembunyi yang tidak terlihat oleh user. Bagaimanapun, cara ini

juga sangat terbatas karena hanya dapat digunakan ketika ada form di

halaman yang digunakan client.

5.3. Manajemen Session

Untuk menajemen session / identifikasi client, penggunaan session

lebih menguntungkan dibandingkan cookie. Cookie yang disimpan oleh

client dapat ditolka oleh browser. Meskip cookie dapat diganti dengan

URL-rewriting, namun cookie hanya bisa menyimpan data string

sederhana. Sedangkan session yang disimpan oleh server dapat menyimpan

objek yang lebih kompleks.

Namun session juga memiliki kelemahan. Karena dengan

mengingat banyak client, itu berarti server harus menanggung beban

memori yang besar, umumnya waktu valid suatu session tidaklah lama.

Karena itu cookie memiliki keunggulan jika diperlukan untuk hal

identifikasi client dalam jangka waktu yang lebih lama. Cookie dapat

40

Page 41: Komplit Modul

diatur agar bisa disimpan lama di browser. Ini juga memudahkan server

mengidentifikasi pola perilaku client dalam mengakses website.

5.4. Session di Java

Di java untuk memanipulasi session kita menggunakan

HttpSession. Adapun hal – hal yang perlu diingat adalah sebagai berikut :

Untuk mendapatkan Session saat ini atau menciptakan session baru :

HttpSession session = request.getSession( )

Untuk menyimpan data di session

session.setAttribute(NamaSession, value)

Untuk mengambil data dari session

session.getAttribute(NamaSession)

Untuk menghapus session

session.removeAttribute (NamaSession);

session.invalidate ( );

Dengan method invalidate( ) server akan melepaskan semua objek yang

berkaitan dan melupakan session. Default waktu session di java adalah 30 menit

atau tergantung setingan server di web.xml. Jika selama 30 menit tidak ada

request otomatis session akan berakhir.

5.5. Contoh Program

Untuk aplikasi session ini kita akan membuat sebuah halaman login

dan sebuah halaman khusus untuk member. Jika kita login sebagai

member, kita akan diizinkan mengakses halaman khusus member tersebut.

Dan jika bukan member, maka kita tidak diizinkan. Hanya user member

yang akan mendapatkan session dari server. Selagi session member aktif,

maka setiap kali user mengakses atau website ini, user akan langsung

diarahkan menuju halaman khusus member. Jika session habis atau user

41

Page 42: Komplit Modul

belum login maka akan diarahkan ke halaman index. Langkah –

langkahnya adalah sebagai berikut :

1. Buat sebuah project dan beri nama DemoSession. Buat sebuah form

input username dan password pada index.jsp. Masukkan kode berikut ini

:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h2>Login Member</h2> <form method='post' action='login'> <fieldset> Username: <input type='text' name='uname' /> <br><br> Password: <input type='password' name='pass' /> <br><br> <input type='submit' value='Login' /> </fieldset> </form> </body></html>

2. Buat halaman khusus member dengan menggunakan jsp. Halaman ini hanya

menampilkan tulisan “Halaman Khusus Member”.

3. Buat servlet baru dan beri nama :LoginServlet. Ketikkan kode berikut pada

method processRequest( )

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(); RequestDispatcher dis = null; String username = request.getParameter("uname");

42

Page 43: Komplit Modul

String password = request.getParameter("pass"); if(username.equals("member") && password.equals("member")){ session.setAttribute("user",username); dis = request.getRequestDispatcher("/member.jsp"); dis.forward(request, response); }else{ dis = request.getRequestDispatcher("/index.jsp"); out.println("Login Salah!!"); dis.include(request, response); out.close(); } }4. Buat lagi sebuah servlet untuk mengakhiri session dan beri nama

LogoutServlet. Kita akan mengecek validitas session-nya. Ketik kode

berikut dalam method processRequest ( ).

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); RequestDispatcher dis =null; HttpSession session = request.getSession(); if (session.getAttribute("user") != null){ session.removeAttribute("user"); session.invalidate(); } dis = request.getRequestDispatcher("/home"); dis.forward(request, response); }

5. Buat lagi sebuah servlet dan beri nama HomeServlet. Ketikkan kode berikut

pada method processRequest( )

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); RequestDispatcher dis = null; HttpSession session = request.getSession();

43

Page 44: Komplit Modul

if (session.getAttribute("user") != null){ if(session.getAttribute("user").equals("member")){ dis = request.getRequestDispatcher("/member.jsp"); dis.forward(request, response); } }else{ dis = request.getRequestDispatcher("/index.jsp"); dis.include(request, response); out.close(); } }

Pada HomeServlet ini, program akan mengecek apakah session user aktif

dan client adalah member atau bukan.

Jika member maka client akan langsung diarahkan ke halaman khusus

member tanpa harus login terlebih dahulu

Jika session tidak aktif dan bukan member maka client akan

diarahkan ke index.jsp untuk login terlebih dahulu.

6. Build dan Run Project. Akan diperoleh tampilan sebagai berikut :

7. Jika login benar kita akan masuk ke halaman member seperti tampilan

berikut ini

44

Gambar 5.1. Masuk sebagai Member (implementasi Session)

Gambar 5.2 Halaman khusus member

Page 45: Komplit Modul

8. Kita sudah masuk sebagai member. Coba untuk mengakses lagi halaman

awal aplikasi kita dengan mengetikkan url berikut :

http://localhost:8084/DemoSession/. Hasilnya akan langsung diarahkan ke

halaman khusus member karena session kita masih aktif. Untuk mengakhiri

session, klik logout.

9. Sekarang kita coba untuk masuk bukan sebagai member. Hasilnya akan

dikembalikan ke index dengan peringatan login salah

RANGKUMAN

Session merupakan fasilitas penyimpanan pada server untuk mengidentifikasi client.

Dalam hal ini server akan menandai client dengan session ID yang berbeda – beda

Session memiliki waktu hidup di server. Session dapat diakhiri atas permintaan user

dan secara otomatis session akan berakhir ketika kita menutup browser

Karena session disimpan di sisi server, maka tidak ada kekhwatiran atas penolakan

session oleh client/browser seperti pada cookie

Penggunaan session lebih menguntungkan dari cookie untuk identifikasi client dalam

waktu yang singkart

Dalam java session diimplementasikan dengan class HttpSession.

45

Gambar 5.3 Halaman index dengan Login Salah

Page 46: Komplit Modul

Beberapa method yang penting dalam class HttpSession adalah new

HttpSession.setAttribute(NamaSession, value), new HttpSession.getAttribute

(NamaSession) dan new HttpSession.invalidate ( )

LATIHAN SOAL

1. Jelaskan apa yang dimaksud dengan session !

2. Jelaskan keuntungan dan kelemahan menggunakan session dibandingkan dengan

cookie !

3. Kemukakan langkah – langkah yang anda lakukan dalam menggunakan session di java.

Jelaskan method – method yang digunakan !

4. Berikan contoh program dalam bentuk java web yang didalamnya berisikan penggunaan

session dalam menangani transaksi !

46

Page 47: Komplit Modul

BAB VI

FILTER

Dalam aplikasi skala enterprise web servlet memiliki banyak tugas selain

menangani request/response, bahkan alur logika yang lebih kompleks.

Beberapa tugas servlet dapat diserahkan pada komponen web lainnya agar

servlet dapat focus pada tugas utamanya. Tugas servlet dalam hal menyaring

request atau response dapat diserahkan pada komponen yang disebut filter.

6.1. Filter

Filter adalah komponen web yang tugasnya melakukan penyaringan

terhadap request/response. Filter dikenal sejak spesifikasi servlet 2.3. Filter

dapat melakukan pro-proses request maupun paska-proses pada response.

Request dan response dianalisis, diubah ataupun ditolak oleh filter. Filter

dapat menangani, baik header ataupun content dari request atau response.

Filter merupakan komponen yang dapat dipakai untuk menambahkan

proses sebelum atau setelah resource di dalam aplikasi web diakses. Fungsi

filter ini berkaitan dengan fungsi pengalihan response.

Mungkin anda pernah mengakses website dimana bahasa yang

ditampilkan pada website sesuai dengan Negara dari mana kita

mengaksesnya. Disana kita melakukan request mengakses website

tersebut, filter akan meny aring asal negara kita. Jika kita mengakses dari

Indonesia maka bahasa yang ditampilkan adalah bahasa Indonesia.

Filter mengambil sebagian tugas servlet dalam hal menyaring request

atau response, sehingga servlet bersih dari logika program yang lebih

rumit. Selain itu sebuah filter dapat digunakan berkali – kali bahkan pada

servlet yang berbeda – beda.

47

Page 48: Komplit Modul

ServletFilter

Servlet

JSP

Static file

Web App

HTTPRequest

Initializationint( )

ServicedoFilter ( )

Destructiondestroy ( )

Gambar 6.1. Cara kerja Filter

Filter berdiri diantara request / response dengan resource web yang ingin

diakses. Filters bekerja dengan menangkap request client. Ketika request

melewati client, filter menjalankan proses penyaringan. Kemudian filters dapat

memutuskan apakah request dapat mengakses resource yang dimaksud atau

menolak akses ke resource. Cara kerja yang sama juga berlaku jika filter

diterapkan pada response.

Didalam java ada 3 interface yang berhubungan dengan filter, interface

Filter, FilterChain dan FilterConfig. Ketiga interface ini berada dalam package

javax.servlet.

6.2. Siklus Hidup Filter

Siklus hidup filter mirip dengan servlet yang memiliki 3 tahap yaitu

init, service dan destroy. Siklus hidup didefinisikan dalam method –

method dalam interface Filter, yaitu method init( ), doFilter ( )dan destroy (

).

Gambar 6.2 Siklus Hidup Filter

48

Request

Response

Page 49: Komplit Modul

FilterChain.doFilter ( )

FilterChain.doFilter ( )

FilterChain.doFilter ( )

Filter A

Request

Servlet

Filter B

Siklus hidup filter diawali dengan method inti ( ) yang dipanggil oleh

web container. Filter akan dikirim ke memory dan dimasukkan ke service.

Ada kemungkinan filter tidak dapat masuk ke service karena terjadi

exception. Selnjutnya web container akan menunggu request / response.

Method doFilter akan dipanggil jika ada request / response untuk mulai

menjalankan proses filter.

Method destroy ( ) dipanggil jika filter telah out of service. Web

container akan mengambil filter dari memory dan resources di dalam filter

dibersihkan. Web container hanya akan menciptakan satu instance dari

sebuah object fileter dan menggunakan multi-threading untuk

memungkinkan pengaturan beberapa request client secara bersama – sama.

6.3. Rantai Filter

Sebuah resource dalam web dapat menerima request yang terfilter

secara berantai yang memungkinkan pemakaian lebih dari satu filter. Filter

– filter mampu membentuk sebuah siklus sendiri menjadi sebuah rantai

filter. Rantai filter direpresentasikan dalam interface FilterChain yang

menunjukkan urutan filter hingga mencapai resource tertentu.

Objek filter akan memanggil FilterChain.doFilter ( ) untuk

memanggil filter berikutnya. Jika filter tersebut adalah filter terakhir dari

rantai filter, maka yang akan dipanggil adalah resource yang dituju.

Gambar 6.3. Rantai Filter

49

Response

Page 50: Komplit Modul

Misal 2 buah filter A, B dan sebuah servlet. Request terhadap servlet

akan melewati filter A telebih dahulu. Ketika FilterChain.doFilter ( )

dipanggil maka filter A akan dijalankan. Filter A memanggil

FilterChain.doFilter ( ) untuk menjalankan filter B. Filter B adalah filter

terakhir sehingga ketika FilterChain.doFilter ( ) dipanggil maka servlet di

titik akhir akan dijalankan. Servlet akan mengirim response. Thread dari

servlet akan kembali ke filter B, kemudian ke filter A hingga web

container untuk disampaikan kepada client.

6.4. Menggunakan Filter

Untuk menggunakan filter, perlu dilakukan beberapa langkah berikut :

Buat class yang mengimplementasikan interface Filter

Tulis logika program di dalam method doFilter ( )

Jika menggunakan rantai filter, panggil filter berikutnya dengan

FilterChain.doFilter ( )

Registrasi filter ke deployment descriptor web xml

Jika kita menggunakan netbeans, sudah tersedia wizard untuk

menambahkan filter. Kita tidak sulit, terutama dalam registrasi filter, kita

hanya mengikuti langkah – langkah yang ditunjukkan wizard.

6.5. Contoh Program

Untuk contoh penggunaan filter, kita akan buatkan sebuah halaman

login dan sebuah halaman member. Jika kita login sebagai member, kita

akan diarahkan ke halaman member. Dan jika bukan sebagai member, kita

akan dikembalikan ke halaman index. Filterlah yang akan memutuskan

apakah kita login sebagai member atau tidak. Ikutilah langkah – langkah

berikut ini :

1. Buat sebuah project baru dengan nama DemoFilter. Lakukan

penyetingan seperti pada contoh soal sebelumnya

50

Page 51: Komplit Modul

2. Buatlah form input username dan password pada index.jsp seperti pada

contoh program Bab V

3. Buat juga sebuah halaman jsp dengan nama member.jsp. Lihat contoh

soal Bab V

4. Buat sebuah servlet dengan nama LoginServlet. Ketik kode berikut pada

prosessRequest ( )

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); RequestDispatcher dis = null; dis = request.getRequestDispatcher("/member.jsp"); dis.forward(request, response); }

Tidak ada tugas autentikasi pada servlet ini. Tugas servlet disini

hanyalah untuk mengarahkan member menuju halaman member.

5. Buat sebuah filter untuk melakukan tugas autentikasi. Klik kanan pada

sourcepackages di tab project. Pilih New > Filter

Gambar 6.4. Membuat Filter AuthenticationFilter

6. Kita atur filter mappingnya. Klik Edit

51

Page 52: Komplit Modul

Gambar 6.4. Configure Filter

7. Klik radio-button Servlet dan pilih LoginServlet. Centang checkbox

REQUEST pada Dispatch Condition. Klik OK kemudian klik Finish.

Gambar 6.5. Filter Mapping

8. Buat kode authentikasi agar hanya user yang login sebagai member yang

bisa mengakses servlet LoginServlet. Ketik kode berikut dalam method

doFilter ( )

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

String username = request.getParameter("uname"); String password = request.getParameter("pass");

52

Page 53: Komplit Modul

if(username.equals("member") && password.equals("member")){ chain.doFilter(request, response); }else{ RequestDispatcher dis = request.getRequestDispatcher("/index.jsp"); dis.forward(request, response); } }

Filter akan memvalidasi user yang melakukan login. Jika yang login

adalah member, maka filter akan menjalankan servlet LoginServlet

melalui method FilterChain.doFilter ( ). Jika bukan member, maka akan

dikembalikan ke halaman index.RANGKUMAN

Filter adalah komponen web yang tugasnya melakukan penyaringan terhadap

request/response

Fungsi filter berkaitan dengan fungsi pengalihan response.

Filter mengambil sebagian tugas servlet dalam hal menyaring request atau response,

sehingga servlet bersih dari logika program yang lebih rumit.

Filter berdiri diantara request / response dengan resource web yang ingin diakses dan

bekerja dengan menangkap request client

Didalam java ada 3 interface yang berhubungan dengan filter, interface Filter,

FilterChain dan FilterConfig. Ketiga interface ini berada dalam package javax.servlet

Siklus hidup filter mirip dengan servlet yang memiliki 3 tahap yaitu init, service dan

destroy

LATIHAN SOAL

1. Jelaskan manfaat filter dalam pemrograman java web berskala enterprise !

2. Jelaskan apa yang dimaksud dengan siklus hidup filter !

3. Jelaskan langkah – langkah yang dilakukan untuk mengimplementasikan filter . Uraikan

penggunaan method – methodnya !

4. Buatlah aplikasi sederhana menggunakan filter, dimana skenarionya sebagai berikut :

apabila user mengklik Logout maka user akan dibawa ke halaman Logout dan bila user

mengklik Lanjut maka user akan dibawa ke halaman transaksi lainnya

53

Page 54: Komplit Modul

BAB VII

DASAR JSP

JSP merupakan bagian dari J2EE. Halaman JSP adalah text dokumen yang dapat

menghasilkan halaman web yang statis maupun dinamis. Halamana JSP terdiri atas html/xml

standard an tag script JSP. Sama seperti halaman html biasa, JSP menggunakan protocol

HTTP.

JSP bertujuan memisahkan business logic dengan presentation/tampilan.

JSP dibuat untuk menyederhanakan proses presentation halaman web.

Komponen java lainnya dapat dibuat terpisah dari JSP dan dapat diakses dengan

server side scripting. Hal ini akan memudahkan perubahan tampilan tanpa harus

mempengaruhi business logicnya.

7.1. JSP VS SERVLET

Kelemahan servlet ada dalam pembuatan halaman web. Servlet

harus mengirimakan code html sebagai code java sehingga proses

pengiriman akan menjadi lebih lama. Kelebihan JSP adalah codingnya

sama dengan HTML namun bercampur dengan tag script JSP. JSP lebih

mudah dipakai untuk membuat halaman web yang cantik.

JSP dapat langsung dijalankan dengan membuat file jsp-nya saja,

sedangkan untuk menjalankan servlet harus dibungkus menjadi sebuah

paket (.war) terlebih dahulu.

Secara sederhana dapat dikatakan perbedaan servlet dan JSP, yaitu

servlet merupakan file java yang dapat disisipi code html, sedangkan JSP

merupakan file html yang dapat disisipi code java.

7.2. Cara Kerja JSP

JSP dikembangkan berdasarkan teknologi servlet yang mempunyai

fitur untuk menggabungkan antara content statis dan content dinamis

dalam satu halaman web. JSP merupakan perluasan dari servlet dimana

ketika JSP dijalankan maka akan dikompilasi menjadi servlet terlebih

dahulu.

54

Page 55: Komplit Modul

HTTPRequest

NewOr

Changed

JSP

Servlet (java)

Servlet (class)

ServletHTTPResponse

Y

jspinti( )(Load Resources)

jspService( )(Accept Request)

jspDestroy( )(Unload

Resources)

Request

Response

Gambar 7.1 Cara Kerja JSP

Saat terjadi request dari user, maka akan dicek apakah file jsp

mengalami perubahan. Jika berubah maka file jsp akan dibuat sourcenya

dalam bentuk file Java. File java di-compile menjadi file class dan

dieksekusi dalam bentuk servlet. Jika tidak maka akan langsung dieksekusi

sebagai servlet.

7.3.Siklus Hidup JSP

JSP juga memiliki siklus hidup. Siklus hidup JSP mirip seperti servlet

terdiri atas 3 tahap, yaitu init, service dan destroy.

JavaServer Page

Gambar 7.2 Siklus hidup JSP

55

Page 56: Komplit Modul

Siklus hidup ini dicerminkan dari interface javax.servlet.jsp. JspPage

melalui method :jspInit( ), jspService( ) dan jspDestroy ( ), Interface

jspPage merupakan turunan dari javx.servlet.Servlet. JSP di compile ke

dalam class servlet yang sama oleh server sehingga class servlet yang

menangani permintaan untuk JSP

7.4.Syntax JSP

JSP berusaha untuk menggabungkan antara konten web statis dan

dinamis. Oleh karena itu JSP memungkinkan kode java untuk disertakan

dalam sebuah halaman JSP. Secara garis besar, elemen – elemen standar

dalam JSP bila dikelompokkan menjadi 3, yaitu :

Elemen perintah (Directive)

Elemen scripting

Elemen action

7.4.1. Elemen Perintah (Directive)

Elemen directive merupakan elemen yang memberikan

informasi mengenai halaman JSP itu sendiri. Ada 3 directive, yaitu

page, include dan taglib.

Page directive

Page directive mendefiniskan atribut dalam jangkauan

seluruh file JSP itu. Syntax standart page directive itu adalah

seperti ini : <%@ page attribute %>.

Atribute page directive bisa dilihat di :

http://java.sun.com/products/jsp/syntax/2.0/syntaxref2010.html

Contoh page directive :

<%@ page import=”java.util.*” %>

<%@ page buffer=”5kb” %>

56

Page 57: Komplit Modul

<%@ pag errorpage=”error.jsp” %>

Include directive

Include directive digunakan untuk menginclude suatu file

dalam JSP. Syntax standart include directive adalah seperti ini :

<%@ include file=”relativeURL” %>

Contoh include directive :

<%@ include file=”date.jsp” %>

Taglib directive

Taglib directive mendefinisikan tag library dan prefix

untuk custom tag dalam halaman JSP. Syntax standar taglib

directive adalah seperti ini :

<%@ taglib url=”URLToTagLibrary” prefix=”tagPrefix” %>

Contoh taglib directive:

<%@ taglib url=http://www.jspcentral.com/tags

prefix=”public” %>

7.4.2. Scripting

Elemen scripting mengizinkan code java untuk dimasukkan

dalam halaman JSP. Ada 3 cara memasukkan code java, yaitu

ekspression, scriplet dan declaration.

Expression

Expression biasanya digunakan untuk mencetak nilai

variable. Saat halaman jsp dijalankan, expression akan dievaluasi

dan dikonversi menjadi string. Syntax standart expression adalah

seperti ini : <%= expression %>. Contoh expression :

<%= numguess.getHint( ) %>

Scriplet

Scriplet digunakan untuk menyisipkan code java biasa

pada halaman JSP. Kode java meliputi perulangan, kondisi, akses

57

Page 58: Komplit Modul

database, deklarasi variable dan sebagainya. Contoh syntax

scriplet adalah seperti ini : <% code fragment %>

Contoh scriplet :

<%

String name = null;

If(request.getParameter(“name”) == null

{

%>

<%@ include file=”error.html” %>

<%

}

else

{

foo.setName(request.getParameter(“name”));

if(foo.getName( ).equalsignoreCase(“integra”))

name = “acura”;

if( name.equalsIgnoreCase(“acura”))

name = “integra”;

}%>

Declaration

Declaration digunakan untuk mendefinisikan variable atau

method. Syntax dasar declaration adalah seperti ini :

<%! Declaration; [declaration;]+ …%>

Contoh declaration :

<%! Int I = 0; %>

<%! Int a,b,c; %>

<%! Circle a = new Circle(2,0); %>

58

Page 59: Komplit Modul

7.4.3. Action

Elemen action merespon action berdasarkan informasi yang

diperlukan halaman JSP. Elemen action didefinisikan dengan prefix

“jsp”. Berikut daftar elemen action :

<jsp:attribute>

<jsp:body>

<jsp:element>

<jsp:doBody>

<jsp:forward>

<jsp:getProperty>

<jsp:include>

<jsp:invoke>

<jsp:output>

<jsp:plugin>

<jsp:root>

<jsp:setProperty>

<jsp:text>

<jsp:useBean>

Jika ingin mempelajari lebih lanjut mengenai syntax JSP secara

lengkap bisa dilihat di :

http://java.sun.com/products/jsp/syntax/2.0/syntaxref20.htm.

7.5. Contoh Program

Buatlah form penjumlahan 2 buah bilangan. Buat juga error-page

jikalau user nantinya salah melakukan input selain angka. Proses

penjumlahan dan penanganan error akan dilakukan di dalam halaman JSP.

Langkah – langkah penyelesaian :

1. Buat project baru dan beri nama DemoJSP. Lakukan pengaturan seperti

pada contoh soal Bab sebelumnya.

59

Page 60: Komplit Modul

2. Buat 2 buah form input penjumlahan pada index.jsp. ketik kode berikut :

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <form method='post' action='result.jsp'> <fieldset> Angka 1: <input type='text' name='angka1' /> <br><br> Angka 2: <input type='text' name='angka2' /> <br><br> <input type='submit' value='Hitung' /> </fieldset> </form> </body></html>

3. Tidak seperti bab sebelumnya, dimana kita menggunakan servlet untuk

memproses input. Kali ini proses penjumlahan akan kita lakukan di

dalam JSP.

4. Karena proses penjumlahan ini memungkinkan terjadi exception semisal

input bukanlah angka, maka perlu kita buat error-page. Klik kanan pada

web pages di tab project pilih New > JSP. Beri nama file : error dan

klik finish. Ketik kode berikut pada error.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page isErrorPage="true" %>

<html> <head>

60

Page 61: Komplit Modul

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Telah Terjadi ERROR!!</h1> </body></html>

5. Buat sebuah halaman jsp untuk memproses penjumlahan dan

menampilkan hasilnya. Beri nama result

Gambar 7.3. Halaman result.jsp

6. Ketik kode berikut pada result.jsp

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <%@page errorPage="/error.jsp" %> <% String angka1str = request.getParameter("angka1"); String angka2str = request.getParameter("angka2"); int angka1 = Integer.parseInt(angka1str);

61

Page 62: Komplit Modul

int angka2 = Integer.parseInt(angka2str); int hasil = angka1 + angka2; %> <h3>Hasil dari <%=angka1%> + <%=angka2%> adalah <%=hasil%></h3> </body></html>

Program akan mengambil angka 1 dan angka 2 kemudian di parse ke tipe data

integer. Kedua angka tersebut dijumlahkan dan hasilnya akan ditampilkan. Kita

daftarkan error-page menggunakan page directive errorPage

<%@page errorPage=”/error.jsp” %>

JSP container akan mengarahkan ke halaman error.jsp bila terjadi exception di

halaman result.jsp ini

7. Build dan jalankan program dan coba masukkan angka numeric terlebih

dahulu

Gambar 7.4. Memasukkan angka numerik

8. Klik back pada web browser dan coba masukkan input bukan angka.

9. Hasilnya adalah error. User diarahkan ke error.jsp

RANGKUMAN

JSP bertujuan memisahkan business logic dengan presentation/tampilan. JSP dibuat

untuk menyederhanakan proses presentation halaman web

Kelemahan servlet ada dalam pembuatan halaman web. Servlet harus mengirimakan

code html sebagai code java sehingga proses pengiriman akan menjadi lebih lama.

62

Page 63: Komplit Modul

Kelebihan JSP adalah codingnya sama dengan HTML namun bercampur dengan tag

script JSP. JSP lebih mudah dipakai untuk membuat halaman web yang cantik.

JSP merupakan perluasan dari servlet dimana ketika JSP dijalankan maka akan

dikompilasi menjadi servlet terlebih dahulu

JSP memiliki siklus hidup dan siklus hidup JSP mirip seperti servlet terdiri atas 3

tahap, yaitu init, service dan destroy

Secara garis besar, elemen – elemen standar dalam JSP bila dikelompokkan menjadi

3, yaitu :Elemen perintah (Directive),Elemen scripting dan Elemen action

Elemen directive merupakan elemen yang memberikan informasi mengenai halaman

JSP itu sendiri

Elemen scripting mengizinkan code java untuk dimasukkan dalam halaman JSP

Elemen action merespon action berdasarkan informasi yang diperlukan halaman JSP

LATIHAN SOAL

1. Berikan perbedaan antara JSP dan Servlet. Berikan keuntungan dan kelemahannya

masing – masing !

2. Jelaskan dengan menggunakan bagan cara kerja dari JSP !

3. Apakah yang dimaksud dengan siklus hidup JSP. Jelaskan dengan menggunakan

gambar ?

4. Jelaskan elemen – elemen dasar dari JSP !

5. Buatlah JSP page yang digunakan untuk mengautentikasi user. User hanya bisa masuk ke

halaman utama apabila nama dan passwordnya sama serta memiliki jumlah karakter

lebih dari delapan !

63

Page 64: Komplit Modul

BAB VIII

JSP LANJUT

8.1. Expression Language

Expression Language dapat digunakan untuk menggantikan elemen

scripting guna mempermudah penulisan ekspresi dalam halaman JSP.

Expression Language diperkenalkan dengan spesifikasi JSP 2.0

Expression Language memiliki bentuk yang lebih sederhana dan

ditulis dengan syntax : ${Expression}. Sebagai gambaran bagaimana

sederhanaya penggunaan expression language, jika itu menggunakan

elemen scripting atau elemen action kita akan menulis syntax seperti ini :

<% String name = user.getName ( ); %>

atau

<jsp:getProperty name = “user” property=”name” />

Namun dengan expression language penulisan syntax hanya seperti ini :

${user.name}

Perhatikan, jika kita menggunakan elemen scripting kita juga harus

memahami property dari tipe data di Java. Dan jika kita menggunakan

elemen action ini, penulisannya cukup panjang dan susah. Bandingkan jika

kita menggunakan Expression Language penulisannya singkat dan

langsung pada intinya dan kita tidak harus memahami property dan tipe

data di java.

Halaman JSP bisa dibuat tanpa scripting dengan menggunakan

expression language, sehingga memungkinkan pemisahan antara

programmer dengan web designer. Hal ini sesuai dengan tujuan JSP, yaitu

memisahkan antara presentation dengan business logic. Expression

language bisa berupa literal, operator, object implicit ataupun fungsi.

64

Page 65: Komplit Modul

8.1.1 Literal

Expression language mendefinisikan literal berupa

o Boolean

o Long

o Float

o String

o Null

Contoh expression language berupa literal :

${false} hasilnya adalah false

${1+2+3} hasilnya adalah 6

${“Saya ganteng”} hasilnya adalah string “Saya ganteng”

8.1.2 Operator

Expression language menyediakan operator berikut :

o Aritmetika : -, bianary, *, / dan div, % dan mod, unary

o Logika : and, &&,or,||,not,!

o Relational : ==, eq, !=, ne, <, lt, >, gt, <=, ge, >=, le

Perbandingan dapat dilakukan terhadap nilai – nilai lain atau

terhadap Boolean, string, integer, atau literal floating point

o Empty : Operator kosong adalah prefix yang digunakan untuk

menentukan apakah suatu nilai adalah null atau kosong

o Kondisional : A ? B : C. Jika A true maka hasilnya B, Jika A false

maka hasilnya C

o Referensi: .,// Referensi berdasarkan property atau index.

Contoh : ${user,nama} sama dengan ${user[name]}

8.1.3 Object Implisit

65

Page 66: Komplit Modul

Expression Language mendefinisikan sekumpulan object implicit

yaitu

o Object pageContext merupakan context untuk halaman JSP.

Menyediakan akses ke berbagai objek, termasuk servletContext,

session, request, response.

o Object Param; Object map yang berisi request nama parameter

untuk nilai tunggal

o Object ParamValues; Object map yang berisi request nama

parameter untuk array

o ObjectHeader; Object map yang berisi request nama header untuk

nilai tunggal

o ObjectHeaderValues; Object map yang berisi request nama header

untuk array

o Object Cookie; Object map yang berisi nama – nama cookie

o Object InitParam; Peta suatu context inisialisasi nama parameter

Expression Language menyediakan beberapa object implicit yang

mewakili sebuah object Map di dalam jangkauan yang berbeda.

o Object PageScope; Object map yang berisi nama attribute dan

nilainya dalam jangkauan halaman

o Object RequestScope; Object map yang berisi nama attribute dan

nilainya dalam jangkauan request

o Object SessionScope; Object map yang berisi nama attribute dan

nilainya dalam jangkauan session

o ObjectApplicationScope; Object map yang berisi nama attribute

dan nilainya dalam jangkauan application

8.2. JSTL

66

Page 67: Komplit Modul

Java Server Pages Standart Tag Library (JSTL) adalah library yang

menyediakan fungsi – fungsi dasar yang umumnya ada pada JSP. JSTL

memiliki tag – tag seperti untuk perulangan, kondisi, manipulasi XML,

mengakses database dan sebagainya.

Penggunaan JSTL dimaksudkan untuk mengurangi penggunaan

fungsi – fungsi standart java sehingga memungkinkan menulis kode JSP

yang rumit tanpa menggunakan code java.

JSTL memiliki berbagai variasi tag sesuai fungsinya masing –

masing. Untuk menggunakan library – library JSTL, kita mengimpor dari

beberapa URI-nya. Kategorisasi dari tag – tag JSTL adalah Core, XML,

Internationalization, SQL dan functions.

Untuk menyertakan halaman JSTL didalama halaman JSP, kita harus

menyertakan library JSTL serta menuliskan taglib di dalam halaman JSP.

Contoh :

<%@ taglib uri=http://java.sun.com/jstl/core prefix=”c” %>

8.2.1 JSTL Core

Untuk menggunakan JSTL core kita harus mengimport dari URL:

http://java.sun.com/jsp/jstl/core. JSTL core menggunakan prefix : “c”.

JSTL core terdiri atas subkategori :

Variable support

Flow control

URL management

Miscellaneous

Daftar tag JSTL core :

o <c:out/> <c:otherwise/>

o <c:set/> <c:forEach/>

o <c:remove/> <c:forTokens/>

67

Page 68: Komplit Modul

o <c:catch/> <c:param/>

o <c:if/> <c:url/>

o <c:choose/> <c:redirect/>

o <c:when/> <c:import/>

8.2.2 JSTL SQL

Untuk menggunakan JSTL SQL, kita harus mengimport dari URI :

http://java.sun.com/jsp/jstl/sql. JSTL SQL menggunakan prefix: “sql”

Daftar tag JSTL SQL :

o <sql : setDataSource/> <sql: transaction/>

o <sql : query/> <sql:param/>

o <sql : update/> <sql:dateParam/>

8.2.3 JSTL XML

Untuk menggunakan JSTL XML, kita harus mengimport dari URI :

http://java.sun.com/jsp/jstl/xml. JSTL XML menggunakan prefix :”x”

dan terdiri atas subkategori :

Core

Flow control

Transformation

Daftar tag JSTL XML :

o <x:parse/> <x:when/>

o <x:out/> <x:otherwise/>

o <x:set/> <x:forEach/>

o <x:if/> <x:transform/>

o <x:choose/> <x:param/>

8.2.4 JSTL Internationalization

68

Page 69: Komplit Modul

Untuk menggunakan JSTL internationalization, kita harus

mengimport dari URI : http://java.sun.com/jsp/jstl/fmt. JSTL

internationalization menggunakan prefix :”fmt” dan terdiri atas

subkategori

Locale

Message formatting

Number and date formatting

Daftar tag JSTL internationalization :

o <fmt :setLocale/> <fmt:setTimeZone/>

o <fmt:setBundle/> <fmt:timeZone/>

o <fmt:bundle/> <fmt:parseDate/>

o <fmt:message/> <fmt:formatDate/>

o <fmt:param/> <fmt:parseNumber/>

o <fmt:requestEncoding/> <fmt:formatNumber/>

8.2.5 JSTL Functions

Untuk menggunakan JSTL functions, kita harus mengimport dari

URI: http://java.sun.com/jsp/jstl/functions. JSTL functions

menggunakan prefix :”fn” dan terdiri atas subkategori :

Collection length

String manipulation

Daftar fungsi JSTL functions :

o ${fn:contains ( )} ${fn:split ( )}

o ${fn:containsIgnoreCase( )} ${fn:startsWith ( )}

o ${fn:endsWith ( ) } ${fn:substring ( ) }

o ${fn:escapeXml( )} ${fn:substringAfter( )}

o ${fn:indexOf( )} ${fn:substringBefore( )}

o ${fn:join ( )} ${fn:toLowerCase( )}

69

Page 70: Komplit Modul

o ${fn:length ( )} ${fn:toUpperCase( )}

o ${fn:replace( )} ${fn:trim ( )}

8.2.6 Contoh Program

Berikut ini akan diberikan contoh penggunaan Expression Language dan

JSTL. Ikuti Langkah berikut ini :

1. Buat sebuah project baru dan beri nama :DemoJSPLanjut. Lakukan

penyettingan seperti pada Bab sebelumnya

2. Tambahkan library JSTL pada project. Klik kanan pada libraries > add

library. Cari library JSTL 1.1. Klik add library

Gambar 8.1. Library JSTL

3. Ketik kode berikut pada index.jsp

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><%@page import="java.util.Date" %>

<html> <head>

70

Page 71: Komplit Modul

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <c:set var="judul" value="Demo Expression Language dan JSTL"/> <h2><c:out value="${judul}"/></h2>

<% Date tgl = new Date(); pageContext.setAttribute("tanggal", tgl); %> <h3>Tanggal : <fmt:formatDate value="${tanggal}" pattern="dd-mm-yyyy"/></h3>

<c:forEach var="nama" items="Maksy, Natan, Steven, Silvan Litow"> <li><b>${nama}</b> </c:forEach> </body></html>

Ada tiga hal yang kita buat disini :

Yang pertama kita mengeset sebuah data string lalu

mencetaknya

Yang kedua kita mencetak tanggal hari ini

Yang ketiga kita menggunakan perulangan untuk mencetak nilai

suatu kumpulan data string berisi nama

Dalam mencetak semua datanya, kita menggunakan expression

language. Disini digunakan JSTL Core dan Internationalization, dimana

sebelum tag <html> kita sudah mendaftarkan taglibnya.

4. Build dan jalankan programnya . Akan didapat hasil sebagai berikut :

71

Page 72: Komplit Modul

Gambar 8.2. Hasil pemakaian EL dan JSTL

RANGKUMAN

Expression Language dapat digunakan untuk menggantikan elemen scripting guna

mempermudah penulisan ekspresi dalam halaman JSP

Expression Language memiliki bentuk yang lebih sederhana dan ditulis dengan syntax :

${Expression}

Expression language bisa berupa literal, operator, object implicit ataupun fungsi.

Expression Language mendefinisikan sekumpulan object implicit berupa Object

pageContext, Object Param, Object ParamValues,Object Header, object HeaderValues,

Object Cookie, object InitParam

Java Server Pages Standart Tag Library (JSTL) adalah library yang menyediakan fungsi

– fungsi dasar yang umumnya ada pada JSP

Penggunaan JSTL dimaksudkan untuk mengurangi penggunaan fungsi – fungsi standart

java sehingga memungkinkan menulis kode JSP yang rumit tanpa menggunakan code

java

Untuk menyertakan halaman JSTL didalama halaman JSP, kita harus menyertakan

library JSTL serta menuliskan taglib di dalam halaman JSP

Untuk menggunakan JSTL core kita harus mengimport dari URL:

http://java.sun.com/jsp/jstl/core.

Untuk menggunakan JSTL SQL, kita harus mengimport dari URI :

http://java.sun.com/jsp/jstl/sql

Untuk menggunakan JSTL XML, kita harus mengimport dari URI :

http://java.sun.com/jsp/jstl/xml

Untuk menggunakan JSTL internationalization, kita harus mengimport dari URI :

http://java.sun.com/jsp/jstl/fmt

LATIHAN SOAL

72

Page 73: Komplit Modul

1. Apakah yang dimaksud dengan expression language ? Apakah yang membedakannya dengan jsp ?

2. Jelaskan objek – objek implicit yang dikandung oleh expression language !3. Apakah manfaat dari Java Server Pages Standart Tag Library (JSTL) ?4. Dengan menggunakan expression language buatlah java web yang dapat digunakan

untuk membandingkan 2 buah string yang diinput oleh user melalui input form !5. Buatlah program menggunakan expression language yang dapat digunakan untuk

menentukan apakah bilangan yang diinput user ganjil atau genap !

BAB IX

MODEL – VIEW – CONTROLLER

Sering kali antara business logic dan user interface digabung dalam satu

file yang sama ( servlet atau jsp) atau disebut dengan arsitektur model 1. Hal ini

tidak menjadi masalah jika diterapkan pada aplikasi yang sederhana. Tapi jika

aplikasi menjadi besar dan kompleks, akan menimbulkan masalah jika terjadi

perubahan pada salah satu komponennya. Solusi permasalahan ini adalah

menggunakan arsitektur model 2 atau Model – View – Controller(MVC) dalam

pengembangannya.

9.1. MVC

MVC merupakan konsep arsitektur aplikasi yang memisahkan

model data, user interface dan business logic sebagai komponen yang

berbeda sehingga modifikasi komponen menjadi lebih mudah.

Pada aplikasi dimana code user interface tergabung dengan business

logicnya, jika terjadi perubahan pada user interface atau business logic

maka keduanya akan salaing mempengaruhi. Misalnya sebuah file jsp

dimana berisi code user interface dan business logic untuk mengakses

database. Ketika kita ingin mengubah user interfacenya, maka business

logicnya juga harus ikut menyesuaikan,. Itu berarti kita harus merombak

seluruh kode dalam file jsp tersebut, yang tentunya akan sangat

merepotkan.

73

Page 74: Komplit Modul

Disamping itu tidak semua programmer bisa melakukan desain atau

sebaliknya, seorang desainer web belum tentu bisa melakukan

pemrograman. Jika user interface dan business logic digabung maka

diperlukan orang yang bisa melakukan program dan desain. Akan tetapi

jika aplikasi terlalu besar akan sangat menyulitkan.

Perubahan yang terjadi pada komponen yang satu tidak akan terlalu

mempengaruhi komponen lainnya secara significant. Paling tidak dengan

memakai arsitektur MVC, memerlukan lebih sedikit penyesuaian jika

terjadi perubahan. Selain itu seorang desainer bisa focus pada user

interface aplikasi dan programmer bisa focus pada business logicnya.

Untuk aplikasi yang besar, penerapan MVC akan sangat membantu

maintenance atau pengembangan yang selanjutnya. Misal jika hanya

aplikasi web apalagi dengan halaman yang statis, tidak perlu menggunakan

pola MVC ini. Tetapi untuk aplikasi yang besar misal aplikasi ERP, maka

penggunaan kosnsep MVC akan sangat membantu sekali.

9.2. Komponen MVC

Arsitektur MVC membagi aplikasi menjadi 3 bagian besar, yaitu

model, view, controller dan kemudian membuat interaksi antar ketiganya.

9.2.1. Model

Model merepresentasikan data yang digunakan oleh aplikasi.

Dengan pemisahan antara data dan interface, komponen model dapat

digunakan kembali oleh bagian aplikasi lain yang memiliki

kegunaan yang sama. Mungkin kita pernah mengakses situs berita

dengan browser desktop atau browser mobile. Yang berbeda dari

keduanya hanyalah tampilannya, tetapi business logic yang

digunakan tetap sama. Ini menunjukkan bahwa dengan pemisahan

seperti ini, berarti interface tidak terikat dengan data, sehingga apa

pun interfacenya data yang digunakan bisa sama. Umumnya

komponen model berupa class java.

74

Page 75: Komplit Modul

9.2.2. View

View merupakan implementasi user interface yang

menampilkan data yang telah diolah pada user, atau komponen yang

akan berinteraksi dengan user. View ini termasuk komponen yang

paling sering berubah. Bahkan pada aplikasi web yang canggih biasa

dimodifikasi sendiri oleh user tanpa mempengaruhi business logic

dari aplikasi. Umumnya komponen view berupa halaman jsp.

9.2.3. Controller

Controller merupakan pengontrol aliran request. Data request

akan diteruskan ke komponen lain yang mengolah data. Controller

juga menentukan komponen aplikasi manakah yang akan dieksekusi,

serta menentukan transisi view mana yang akan ditampilkan.

Dengan penggunaan komponen controller yang terpisah ini, view

dapat didesain tanpa harus memperhatikan komponen lainnya.

Umumnya komponen controller berupa servlet.

9.3. Framework MVC

Ada banyak framework yang dibuat berbasis arsitektur MVC.

Beberapa diantaranya adalah Spring dan Struts . Framework menyediakan

sarana untuk mengimplementasikan ketiga komponen MVC

(model,view,controller) secara mudah pada aplikasi web. Beberapa

framework lain bahkan menyediakan fitur lainnya.

9.3.1. Spring

Spring adalah application framework lightweight untuk

mempermudah pengembangan aplikasi heavyweight java.

Penggunaan Spring tidak hanya terbatas pada aplikasi berbasis web

tetapi juga untuk aplikasi java yang lain.

Didalam situs resmi spring dikatakan “Spring memberikan

solusi lightweight untuk pengembangan aplikasi enterprise, serta

tetap mendukung kemungkinan penggunaan declarative

75

Page 76: Komplit Modul

Spring Core

SpringAOP

SpringWebMVC

Spring ORM Spring Web

Spring DAO Spring Context

transaction, remote access dengan menggunakan RMI ataupun web

service, fasilitas mailing serta dukungan ke teknologi presistance

yang telah ada. Spring menyediakan sebuah framework MVC, serta

tata cara yang transparan dalam integrasi Aspect oriented

Programming (AOP) ke dalam aplikasi yang dibangun, dan

menyediakan hirarki exception yang terstruktur. Spring dapat

menjadi one-stop-solution untuk pengembangan aplikasi enterprise

java, tetapi Spring juga bersifat modular sehingga developer dapat

mengambil beberapa modul dan mengabaikan modul lainnya”.

Seperti yang telah disinggung diatas, Sprint terdiri dari

beberapa modul yang dapat dipilih, sehingga kita dapat memilih

sesuai kebutuhan aplikasi yang kita kembangkan. Modul – modul

Spring dapat digambarkan seperti gambar berikut ini

Gambar 9.1 Susunan Modul Spring Framework

Penjelasan singkat untuk masing – masing modul adalah

sebagai berikut :

Spring Core; menyediakan sarana fungsionalitas yang

fundamental dalam Spring Framework. Dalam modul ini

terdapat beanfactory yang merupakan inti dari aplikasi yang

menggunakan Spring.

Spring Context; modul ini merupakan ekstensi dari

BeanFactory dengan menambahkan dukungan untuk

76

Page 77: Komplit Modul

internalization, event-event dari siklus hidup aplikasi serta

validasi. Modul ini juga menydeiakan service enterprise seperti

email, akses JNDI, integrasi dengan EJB, remoting dan

penjadwalan, serta integrasi dengan velocity dan freemarker.

Spring AOP; modul ini menyediakan layanan penuh pada

Aspect Oriented Programming (AOP)

Spring DAO; modul ini menyediakan abstraksi ke JDBC dan

DAO, sehingga pemrograman dengan kedua komponen

tersebut menjadi lebih sederhana dan mudah.

Spring ORM; modul ini menyediakan integrasi dengan

beberapa Object Relational Mapping (ORM) yang popular saat

ini seperti Hibeernate, JDO,Ibatis,SQL Maps, Oracle TopLink

Spring Web; modul integrasi menyediakan context yang

ditujukan untuk aplikasi berbasis web, dan juga integrasi

dengan framework seperti Jakarta Struts, Tapestry,dan

WebWork

SpringMVC Framework

Gambar 4.2 diatas pada dasarnya merupakan pembagian

secara koseptual. Pada kenyataannya sebuah modul dapat tersusun

dari satu atau beberapa package. Package – package yang terdapat

dalam org.springframework terdiri dari aop, beans, chace, context,

corte, dao,

jb,jca,jdbc,jms,jmx,jndi,mail,metadata,orm,remoting,scheduling

dan web.

9.3.2. Struts

Spring adalah application framework lightweight untuk

mempermudah pengembangan aplikasi heavyweight java. Penggunaan

Spring tidak hanya terbatas pada aplikasi berbasis web tetapi juga untuk

aplikasi java yang lain.

77

Page 78: Komplit Modul

Spring Core

SpringAOP

SpringWebMVC

Spring ORM Spring Web

Spring DAO Spring Context

Didalam situs resmi spring dikatakan “Spring memberikan solusi

lightweight untuk pengembangan aplikasi enterprise, serta tetap

mendukung kemungkinan penggunaan declarative transaction, remote

access dengan menggunakan RMI ataupun web service, fasilitas mailing

serta dukungan ke teknologi presistance yang telah ada. Spring

menyediakan sebuah framework MVC, serta tata cara yang transparan

dalam integrasi Aspect oriented Programming (AOP) ke dalam aplikasi

yang dibangun, dan menyediakan hirarki exception yang terstruktur.

Spring dapat menjadi one-stop-solution untuk pengembangan aplikasi

enterprise java, tetapi Spring juga bersifat modular sehingga developer

dapat mengambil beberapa modul dan mengabaikan modul lainnya”.

Seperti yang telah disinggung diatas, Sprint terdiri dari beberapa

modul yang dapat dipilih, sehingga kita dapat memilih sesuai kebutuhan

aplikasi yang kita kembangkan. Modul – modul Spring dapat

digambarkan seperti gambar berikut ini

Gambar 9.2 Susunan Modul Strut Framework

Penjelasan singkat untuk masing – masing modul adalah

sebagai berikut :

Spring Core; menyediakan sarana fungsionalitas yang

fundamental dalam Spring Framework. Dalam modul ini

terdapat beanfactory yang merupakan inti dari aplikasi yang

menggunakan Spring.

78

Page 79: Komplit Modul

Spring Context; modul ini merupakan ekstensi dari

BeanFactory dengan menambahkan dukungan untuk

internalization, event-event dari siklus hidup aplikasi serta

validasi. Modul ini juga menydeiakan service enterprise seperti

email, akses JNDI, integrasi dengan EJB, remoting dan

penjadwalan, serta integrasi dengan velocity dan freemarker.

Spring AOP; modul ini menyediakan layanan penuh pada

Aspect Oriented Programming (AOP)

Spring DAO; modul ini menyediakan abstraksi ke JDBC dan

DAO, sehingga pemrograman dengan kedua komponen

tersebut menjadi lebih sederhana dan mudah.

Spring ORM; modul ini menyediakan integrasi dengan

beberapa Object Relational Mapping (ORM) yang popular saat

ini seperti Hibeernate, JDO,Ibatis,SQL Maps, Oracle TopLink

Spring Web; modul integrasi menyediakan context yang

ditujukan untuk aplikasi berbasis web, dan juga integrasi

dengan framework seperti Jakarta Struts, Tapestry,dan

WebWork

SpringMVC Framework

Gambar 4.2 diatas pada dasarnya merupakan pembagian

secara koseptual. Pada kenyataannya sebuah modul dapat tersusun

dari satu atau beberapa package. Package – package yang terdapat

dalam org.springframework terdiri dari aop, beans, chace, context,

corte, dao,

jb,jca,jdbc,jms,jmx,jndi,mail,metadata,orm,remoting,scheduling

dan web.

9.4. Contoh Program

79

Page 80: Komplit Modul

Client(Browser)

Index.jsp Controller(GoTutorial)

Model(DataLinks) View

(Web.jsp)(mobile.jsp)(desktop.jsp)

Kita akan menerapkan arsitektur MVC secara sederhana dalam

aplikasi web berikut ini. Skenarionya adalah kita buat halaman yang

memuat link menuju halaman tutorial pemrograman. Jika link tersebut

diklik, maka oleh controller akan diarahkan ke halaman tutorial yang

dimaksud. Secara garis besar, alur aplikasi ini bisa digambarkan sebagai

berikut :

Gambar 9.3 Alur Aplikasi MVC

Langkah – langkah pembuatannya adalah sebagai berikut :

1. Buat project dengan nama DemoMVC. Lakukan penyetingan atas server

dan java EE yang digunakan

2. Pertama akan dibuatkan komponen model terlebih dahulu. Buat sebuah

class java dan beri nama DataLinks serta tempatkan pada package model.

Ketikkan kode berikut ini :

package model;

/** * * @author Maksy */public class DataLinks {

80

Page 81: Komplit Modul

public String links[] = { "Web Application Programming", "Mobile Application Programming", "Desktop Application Programming"};

public String targets[] = {"web","mobile","desktop"};

public int getLinksNumber(){ return links.length; }

public String getLink(int num){ return links[num]; }

public String getTarget(int num){ return targets[num]; }}Class DataLinks ini memuat 3 buah link target. Array targets nantinya

akan digunakan oleh controller untuk mengarahkan user ke halaman yang

sesuai.

3. Langkah kedua, kita buat komponen viewnya. Selain index.jsp, kita

tambahkan 3 buah halaman jsp lagi sebagai tujuan target dari link pada

DataLinks tadi. Ketiga file jsp ini kita beri nama sesuai dengan isi dalam

array targets.

4. Klik kanan pada web pages di tab project. Pilih New > JSP dan beri nama

file web. Klik finish. Buat kode JSP pada halaman ini sehingga akan

ditampilkan “Tutorial Web Programming” saat program dijalankan

5. Buat lagi 2 jsp file berturut – turut diberi nama mobile.jsp dan

desktop.jsp. Halaman ini saat dijalankan akan menghasilkan tulisan

sebagai berikut : “Tutorial Mobile Programming” dan “Tutorial Desktop

programming”.

6. Buka halaman index.jsp dan ketikkan kode berikut ini

<html>

81

Page 82: Komplit Modul

<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h2>Programming Tutorial</h2> <ul> <% DataLinks links = new DataLinks(); for(int i=0; i<links.getLinksNumber(); i++){ String link = links.getLink(i); String target = "tutorial?type=" + links.getTarget(i); %> <li> <a href="<%=target%>"><%=link%></a> </li> <% } %> </ul> </body></html>

Index.jsp mengambil links dari class DataLinks dan menampilkannya

serta mengeset sesuai targetnya. Keunggulan dari penggunaan MVC

sudah terlihat disini. Jika kita ingin menambahkan links, kita hanya

menambahkan links dari class DataLinks( model ) tanpa harus repot

mengubah index.jsp (view)

7. Jangan lupa kita impor class DataLinks menggunakan page directive

import. Lakukan sebelum tag <html>

8. Yang terakhir, kita buat servlet sebagai controllernya yang

mengendalikan request user sesuai tergetnya dan beri nama GoTutorial.

Isikan package controller. Ketik kode berikut pada servlet GoTutorial.

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

82

Page 83: Komplit Modul

throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); String type = request.getParameter("type"); String file = type +".jsp"; RequestDispatcher dis = null; if(type != null){ dis = request.getRequestDispatcher(file); } dis.forward(request, response); }

Servlet GoTutorial akan melihat target dalam parameter “type” kemudian

akan diteruskan ke halaman jsp sesuai isi parameter type tersebut.

9. Build dan run program dan kemudian klik salah satu link.

Gambar 9.4. Halaman index MVC

10.Lihat url hasilnya kemudian coba isi parameter type “web”. Program

akan mengarahkan langsung ke halaman web.jsp

RANGKUMAN

MVC merupakan konsep arsitektur aplikasi yang memisahkan model data, user interface

dan business logic sebagai komponen yang berbeda sehingga modifikasi komponen

menjadi lebih mudah.

Arsitektur MVC membagi aplikasi menjadi 3 bagian besar, yaitu model, view, controller

dan kemudian membuat interaksi antar ketiganya

Model merepresentasikan data yang digunakan oleh aplikasi dan umumnya berupa java

class

View merupakan implementasi user interface yang menampilkan data yang telah diolah

pada user, atau komponen yang akan berinteraksi dengan user dan umumnya berupa jsp

Controller merupakan pengontrol aliran request dan umumnya berupa servlet

83

Page 84: Komplit Modul

LATIHAN SOAL

1. Jelaskan manfaat penggunaan konsep MVC dalam pengembangan aplikasi berskala

enterprise !

2. Bagaimana konsep modeling diterjemahkan dalam kerangka MVC !

3. Bagaimana konsep view digunakan dalam MVC !

4. Buatlah aplikasi penjualan barang secara online menggunakan konsep MVC.

Kembangkan java class yang akan digunakan, halaman jsp dan servlet untuk aplikasi

ini !

BAB X

DATABASE , SQL DAN JDBC

Untuk membuat aplikasi web berskala enterprise, belum lengkap

rasanya jika tanpa koneksi ke database.

10.1. Database

Database atau basis data adalah kumpulan data yang disimpan

secara sistematik sehingga dapat diakses untuk memperoleh informasi

dari database tersebut.Database ini misalnya seperti buku telepon di mana

kita mencatat nama dan nomor telepon seseorang.

Database yang dimaksud disini, tentunya adalah data yang

disimpan dalam computer, yang dikelola menggunakan perangkat lunak

khusus yang disebut dengan Database Management System (DBMS).

Sebuah database memiliki penjelasan terstruktur dari data yang tersimpan

di dalamnya yang disebut dengan skema. Skema menggambarkan objek

yang diwakili suatu database, dan hubungan diantara objek tersebut. Cara

mengorganisasikan skema umumnya menggunakan model relational yanr

tabeg direpresentasikan dalam bentuk table, yang terdiri atas baris dan

kolom. Dalam model ini, hubungan antara table diwakili dengan nilai

yang sama antar table.

84

Page 85: Komplit Modul

10.2. SQL

SQL adalah standar ANSI untuk mengakses dan memanipulasi

database. Statemen SQL digunakan untuk menerima, mengubah dan

menghapus data. Perintah SQL tidak bersifat case sensitive pada kata

kuncinya, tetapi pada nilainya.

Pada aplikasi yang membutuhkan akses ke database, umumnya

akan melakukan aksi – aksi seperti memasukkan data, mengambil data

mengupdate dan menghapus data.

10.2.1. Memasukkan Data

Untuk memasukkan baris data yang baru ke dalam table

database yang aktif, kita menggunakan perintah INSERT. Struktur

dasar dari perintah INSERT :

INSERT INTO nama_tabel VALUES (nilai1,nilai2,…)

Clause INTO diikuti nama dari table yang akan diisi data baru.

Parameter yang diberikan di dalam kata kunci VALUES adalah daftar

nilai data yang akan dimasukkan ke dalam table.

Perintah INSERT harus diikuti aturan integritas pada table data. Oleh

karena itu jika sebuah field pada table ditetapkan not-null, maka jika kita

mencoba memasukkan nilai null, akan menyebabkan error.

10.2.2 Mengambil Data

Untuk mengambil data dari database yang aktif, kita menggunakan

perintah SELECT. Struktur dasar perintah SELECT :

SELECT kolom1,kolom2,…FROM nama_tabel WHERE kondisi

Perintah SELECT diikuti oleh kolom – kolom table yang akan diambil

datanya. Jika kita ingin mengambil semua data dari seluruh kolom pada

table, gunakan * sebagai pengganti nama kolom. Clausa FROM diikuti

nama tabelnya. Claus WHERE dapat disertakan dan diikuti dengan

kondisi data yang ingin diambil.

85

Page 86: Komplit Modul

10.2.3 Meng-update Data

Untuk mengupdate baris data dari table database yang aktif, kita

menggunakan perintah UPDATE. Struktur dasar perintah UPDATE :

UPDATE nama_tabel SET nilai-kolom WHERE kondisi

Perintah UPDATE diikuti oleh nama table yang ingin di-update

datanya. Clause SET diikuti daftar data dari nama kolom dan nilai

barunya. Clausa WHERE harus disertakan jika kita hanya mengupdate

baris data tertentu. Jika tidak, semua baris data akan ikut terupdate.

10.2.4 Menghapus Data

Untuk menghapus baris data dati table database yang aktif, kita

menggunakan perintah DELETE. Struktur dasar perintah DELETE :

DELETE FROM nama_table WHERE kondisi

Clause FROM diikuti oleh nama table yang ingin di-update

datanya. Clause WHERE harus disertakan jika kita hanya menghapus

baris data tertentu. Jika tidak, semua baris data akan ikut terhapus.

10.3. JDBC

Java menyediakan API untuk mengakses database yang disebut

Java Database Connectivity (JDBC) API. Dengan JDBC, kita bisa

mengakses database tanpa mempedulikan DBMS-nya.

JDBC API memungkinkan untuk melakukan tiga hal, yaitu

membuat koneksi dengan database, mengirim perintah SQL, dan

memproses hasil.

Setiap mengakses database,kita menggunakan JDBC driver sebagai

interface atau koneksi ke database tersebut. Setiap vendor DBMS

memerlukan driver yang berbeda. Untuk beberapa vendor telah tersedia

86

Page 87: Komplit Modul

drivernya didalam JDBC API, sedangkan yang tidak ada bisa

didownload pada website vendor masing – masing.

10.4. Membuat Database

Untuk membuat database kita bisa menggunakan netbeans seperti

yang akan dicontohkan berikut ini. Database yang akan dibuat terdiri

atas dua table dengan struktur sebagai berikut :

Tabel Subject

Field Type

Kode Varchar(4)

Nama Varchar(10)

SKS int

Tabel Mahasiswa

Field Type

Nis Varchar(10)

Nama Varchar(40)

Alama

t

Varchar(40)

Tabel Jadwal

Field Type

Nis Varchar(10)

Kode Varchar(4)

Langkah – langkah pembuatannya adalah sebagai berikut :

1. Buka aplikasi Netbeans. Klik tab Services

87

Page 88: Komplit Modul

2. Buat database baru. Klik databases dalam tab services. Klik kanan Mysql

Server > Create database. Jika Mysql belum berjalan, jalankan terlebih

dahulu,pilih Start

Gambar 10.1. Membuat database baru

3. Isikan nama database Akademik hingga diperoleh tampilan sbb :

Gambar 10.2. Database Akademik telah dibuat

4. Buat table – tablenya . Klik kanan pada akademik > Execute Command.

Hasilnya akan nampak seperti gambar berikut ini :

88

Page 89: Komplit Modul

Gambar 10.3. Database Akademik dengan tabel

RANGKUMAN

Database adalah kumpulan table – table yang menyimpan data dan telah memenuhi

aturan tertentu (ternormalisasi)

Untuk membuat, mengakses dan memanipulasi data – data yang tersimpan dalam satu

database digunakan bahasa yaitu SQL.

Structured Query Language (SQL) terbagi atas Data Definition Language (DDL) dan

Data Manipulation Language (DML).

DDL terdiri atas perintah CREATE, DROP dan ALTER.

DML terdiri atas perintah INSERT, SELECT, UPDATE, dan DELETE.

CREATE digunakan untuk membuat table. DROP digunakan menghapus table dari

satu database. ALTER digunakan untuk memodifikasi table.

INSERT digunakan menambahkan record dalam satu table.

SELECT digunakan untuk mengquery record tertentu dari satu database berdasarkan

kondisi tertentu

UPDATE digunakan untuk mengupdate record tertentu berdasarkan criteria tertentu.

DELETE digunakan untuk menghapus baris tetentu dari satu table.

Java menyediakan API untuk mengakses database yang disebut Java Database

Connectivity (JDBC) API. Dengan JDBC, kita bisa mengakses database tanpa

mempedulikan DBMS-nya.

LATIHAN SOAL

1. Apa yang dimaksud dengan database, jelaskan !2. Jelaskan perintah – perintah yang tergabung dalam kelompok SQL DDL ! 3. Apa yang dimaksud dengan JDBC dan kapan JDBC digunakan ?4. Dengan menggunakan netbeans dan Mysql buatlah database yang memiliki table – table

seperti dibawah ini :Tabel Barang

Nama Field Tipe Data

Kode_Baran

g

Varchar(4)

Nama Varchar(30)

89

Page 90: Komplit Modul

Harga int

Tabel Customer

Nama Field Tipe Data

Kode_Cus Varchar(4)

Nama_Cus Varchar(30)

Alamat Varchar(20)

Phone Varchar(20

Tabel Transaksi

Nama Field Tipe Data

Kode_Cus Varchar(4)

Kode_Barang Varchar(4)

BAB XI

ENTERPRISE BEANS

Enterprise beans adalah komponen java enterprise edition yang

mengimplementasikan teknologi enterprise javabeans (EJB). Enterprise beans

berjalan dalam EJB container yang ada dalam application server. Meskipun

transparent terrhadap pengembangan aplikasi, container EJB memberikan

layanan terhadap sistem seperti transaksi dan keamanan bagi enterprise

beannya. Layanan ini memungkinkan kita untuk membangun dan mendeploy

enterprise beans secara cepat yang merupakan bentuk inti dari aplikasi java EE.

11.1. Apa itu Enterprise Bean

Ditulis dengan bahasa pemrograman java, enterprise bean adalah

komponen pada sisi server yang membungkus business logic dari suatu

aplikasi. Business logic adalah kode yang memenuhi maksud dari

aplikasi. Sebagai contoh dalam suatu aplikasi inventory, enterprise bean

mengimplementasikan business logic dalam method yang disebut

checkInventoryLevel dan orderProduct. Dengan menginvoke method –

90

Page 91: Komplit Modul

method ini, client dapat mengakses layanan inventory yang disediakan

oleh aplikasi.

Enterprise beans menyederhanakan pengembangan aplikasi –

aplikasi yang besar dan terdistribusi. Pertama karena container EJB

menyediakan layanan – layanan system-level ke enterprise bean seperti

management transaksi dan securitas , pengembang bean dapat

berkonsentrasi dalam memecahkan masalah – masalah business. Kedua

karena bean berisikan business logic dari aplikasi, pengembang pada sisi

client dapat focus pada client. Pengembang client tidak harus

mengkoding rutin untuk mengimplementasikan business rule atau

mengakses database. Hal ini menyebabkan, client menjadi lebih kecil dan

dapat diterapkan pada peralatan – peralatan yang kecil.

Enterprise beans digunakan pada aplikasi yang memiliki criteria

sebagai berikut :

1. Aplikasi harus scalable. Untuk mengakomodir pertumbuhan jumlah

pengguna, kita perlu mendistribusikan komponen – komponen

aplikasi pada berbagai mesin.

2. Aplikasi yang memiliki transaksi yang harus menjamin integritas

data. Enterprise bean mendukung transaksi

3. Aplikasi yang memiliki berbagai macam client. Dengan hanya

beberapa baris kode, remote client dengan mudah dapat menghubungi

enterprise bean.

11.2. Jenis – Jenis Enterprise Bean

11.2.1. Session Bean

Session bean menunjuk pada client tunggal yang ada

dalam application server. Untuk mengakses aplikasi yang

dideploy dalam server, client menginvoke method – method dari

session bean. Session bean bekerja untuk clientnya, melindungi

91

Page 92: Komplit Modul

client dari kompleksitas dengan mengeksekusi persoalan –

persoalan business dalam server.

Seperti namanya, session bean sama dengan interaktif

session. Session bean tidak dapat di shared, session bean hanya

memiliki satu client. Ketika client berhenti, session bean juga

berhenti dan terputus koneksi dengan client.

Ada dua jenis session bean yaitu stateful session bean dan

stateless session bean. Pada stateful session bean , instance

variable menunjukkan keadaan dari suatu client session bean

tertentu. Karena client berinteraksi dengan beannya, keadaan ini

sering dinamakan conversational state.

State dipertahankan selama client-bean session. Jika client

menghapus bean atau menghentikannya, session berakhir dan

state hilang. Sifat transient dari state tidak menjadi masalah

karena percakapan antara client dan bean berakhir disana.

Stateless session bean tidak mempertahankan suatu

keadaan conversational dengan client. Ketika client menginvoke

method – method suatu stateless bean, instance variable bean

dapat berisi keadaan tertentu untuk client tersebut, tetapi hanya

selama invokasi. Ketika method selesai, keadaan specific client

tidak dipertahankan. Client dapat mengubah state instance

variable dalam pool stateless bean, dan state ini dipertahankan

sampai pada invokasi selanjutnya dari pool stateless bean.

Session bean harus digunakan pada keadaan sebagai berikut :

Pada waktu tertentu, hanya satu client mengakses instance

bean

State bean tidak persistent (tetap), hanya ada pada periode

yang pendek

Bean mengimplementasikan web service

92

Page 93: Komplit Modul

Statefull session bean cocok untuk criteria sebagai berikut :

Bean state menunjukkan interaksi antra bean dan client

tertentu

Bean perlu menyimpan informasi tentang client

Dibelakang layar, bean mengelola aliran kerja dari beberapa

enterprise bean.

Untuk memperbaiki performance, kita dapat menggunakan

stateless session bean terutama jika bean state tidak memiliki data untuk client

tertentu dan dalam suatu invokasi method tunggal, bean melakukan tugas –

tugas generic untuk semua client. Sebagai contoh kita dapat menggunakan

stateless session bean untuk mmengirimkan email yang mengkonfirmasi suatu

pesanan online.

11.2.2. Massage-Driven Bean

Message-driven bean adalah enterprise bean yang menyebabkan

aplikasi – aplikasi java Entertprise Editon memproses message secara

asinkronous. Umumnya bertindak sebagai JMS message listener, yang

sama dengan suatu ecent listener kecuali message driven bean menerima

pesan – pesan JMS bukan event. Message dapat dikirim oleh setiap

komponen java enterprise edition atau aplikasi JMS atau sistem yang

tidak menggunakan teknologi java EE. Message driven bean dapat

memproses pesan – pesan JMS atau pesan – pesan lainnya.

Perbedaan utama antara message-driven bean dan session bean

adalah bahwa client tidak mengakses message – driven bean melalui

interfaces. Tidak seperti session bean, message-driven bean hanya

mempunyai satu class bean. Message-driven bean memiliki ciri sebagai

berikut :

o Message-driven bean dieksekusi setelah menerima message dari

client

93

Page 94: Komplit Modul

o Diinvoke secara asinkronous dan waktu hidup singkat

o Tidak menunjukkan share data secara langsung dalam database,

tetapi dapat mengakses dan mengupdate data

o Bersifat stateless

11.3. Access Client dengan Interface

Seorang client dapat mengakses session bean hanya melalui method

yang didefinisikan dalam business interface dari bean. Business interface

mendefinisikan pandangan client terhadap suatu bean. Semua aspek lain

dari bean tersembunyi dari client. Session bean dapat memiliki lebih dari

satu business interface. Client dapat mengakses enterprise bean secara

remote, local ataupun melalui web service.

11.3.1. Remote Client

Remote client dari suatu enterprise bean dapat berjalan pada

mesin yang berbeda dan Java Virtual Machine yang berbeda

dengan enterprise beannya. Remote client dapat berupa web

component, aplikasi client ataupun enterprise bean.

Untuk membuat enterprise bean yang mengijinkan remote

access, yang harus dilakukan adalah :

o Menambahkan business interface dari enterprise bean dengan

anotasi @Remote sebagai berikut :

@Remote

public interface InterfaceName {….}

o Menambahkan bean class dengan @Remote, mendefinisikan

business interface atau interface :

@Remote(InterfaceName.class)

public class BeanName implements InterfaceName {…}

Remote interface mendefinisikan business dan siklus hidup

method yang specific dari bean. Sebagai contoh, remote interface dari bean

94

Page 95: Komplit Modul

bernama BankAccountBean dapat memiliki business method deposit dan credit,

seperti dapat dilihat pada contoh berikut :

Gambar 11.1. Interface Enterperise Bean dengan Remote Access

11.3.2. Local Client

Local client memiliki karekteristik sebagai berikut :

1. Berjalan pada JVM yang sama dengan enterprise beannya

2. Dapat berupa web component atau enterprise bean lainnya

3. Lokasi enterprise bean yang diakses tidak transparent.

Untuk membuat enterprise bean yang hanya dapat diakses secara

local, maka dapat dilakukan sebagai berikut :

1. Tambahkan business interface dari enterprise bean dengan

@local interface, contoh

@local

public interface InterfaceName {…}

2. Tentukan interface dengan menambahkan bean class

dengan @Local dan tentukan nama interface.

11.4. Isi Enterprise Bean

Untuk membangun enterprise bean kita harus menyiapkan file –

file sebagai berikut :

1. Enterprise bean class; mengimplementasikan method- method yang

didefinisikan dalam business interface dan semua callback method

2. Business Interface; mendefinisikan method – method yang

diimplementasikan oleh enterprise class bean

95

Page 96: Komplit Modul

3. Class Helper; class – class lainnya yang dibutuhkan oleh enterprise

class bean seperti class exception dan class utility

Semua file ini dipaketkan dalam file EJB JAR, modul yang menyimpan

enterprise bean. File EJB JAR bersifat portable dan dapat digunakan untuk

aplikasi – aplikasi yang berbeda. Untuk memasang aplikasi java enterprise, kita

mempaketkan satu atau beberapa modul (seperti file – file EJB JAR) ke dalam

EAR file, yaitu file yang menyimpan aplikasi. Ketika EAR file yang berisi EJB

JAR file dideploy, kita juga mendeploy enterprise bean ke application server.

Kita juga dapat mendeploy EJB JAR yang tidak terdapat dalam EAR file.

Gambar 11.2 berikut ini menunjukkan isi dari EJB JAR file

Gambar 11.2 Struktur Enterprise Bean JARRANGKUMAN

Enterprise bean adalah komponen pada sisi server yang membungkus business logic dari

suatu aplikasi

Enterprise beans menyederhanakan pengembangan aplikasi – aplikasi yang besar dan

terdistribusi

Enterprise beans digunakan pada aplikasi yang memiliki criteria scalable, memiliki

transaksi yang harus mempertahankan integritas data dan memiliki banyak client.

Enterprise bean terdiri atas session bean dan message-driven bean

Session bean bekerja untuk clientnya, melindungi client dari kompleksitas dengan

mengeksekusi persoalan – persoalan business dalam server

Ada dua jenis session bean yaitu stateful session bean dan stateless session bean

Pada stateful session bean , instance variable menunjukkan keadaan dari suatu client

session bean tertentu

96

Page 97: Komplit Modul

Stateless session bean tidak mempertahankan suatu keadaan conversational dengan client

Message-driven bean adalah enterprise bean yang menyebabkan aplikasi – aplikasi java

Entertprise Editon memproses message secara asinkronous

Perbedaan utama antara message-driven bean dan session bean adalah bahwa client tidak

mengakses message – driven bean melalui interfaces

Client dapat mengakses enterprise bean secara remote, local ataupun melalui web service

LATIHAN SOAL

1. Jelaskan peran enterprise bean dalam pengembangan aplikasi berskala enterprise

2. Jelaskan criteria aplikasi yang membutuhkan enterprise bean !

3. Ada dua jenis enterprise bean, sebutkan dan jelaskan perbedaannya ?

4. Apa perbedaan antara stateful session bean dan stateless session bean ?

5. Jelaskan file – file yang dibutuhkan untuk membangun enterprise bean !

BAB XIISESSION BEAN

12.1. Pengertian Session Bean

Session bean adalah enterprise bean yang berinteraksi secara

langsung dengan user dan berisi business logic dari suatu aplikasi

enterprise. Session bean merepresentasikan access dari satu client pada

aplikasi enterprise yang dideploy pada server dengan memanggil

methodnya. Satu aplikasi dapat berisi banyak session tergantung pada

jumlah user yang mengakses aplikasi tersebut. Session bean membuat

interaktiv session hanya untuk client tunggal dan melindungi client

tersebut dari kompleksitas dengan mengeksekusi persoalan bisnis pada

sisi server. Sebagai contoh ketika seorang client ingin melakukan aksi

seperti membuat reservasi atau memvalidasi kartu kredit, satu session

bean harus digunakan. Session bean memutuskan data apa yang akan

dimodifikasi. Pada dasarnya, session bean menggunkan satu entity bean

untuk mengakses atau memodifikasi data. Session dan entity bean

mengimplementasikan business logic, business rules, algorithma dan alur

97

Page 98: Komplit Modul

kerja. Session bean adalah komponen yang bersifat short-lived. Container

EJB akan menghapus session bean jika client telah keluar.

Nilai Session bean tak dapat dishare dan tidak tetap ( nilainya tak

dapat disimpan dalam database). Satu session bean hanya memiliki satu

client. Ketika client berakhir, session bean yang berasosiasi dengannya

juga berakhir dan data yang berasosiasi dengan session bean ini

dimusnahkan.

Gambar dibawah ini menunjukkan bagaimana session bean

berinteraksi dengan client dan entity bean

Gambar 12.1 Interaksi Session Bean dengan Client dan Entity Bean

Session bean terbagi atas :

Stateless Session Bean; stateless session bean tidak mempertahankan apa

yang disebut conversational state dengan client. Ketika clien memanggil

method – method dari stateless bean, instance dari variable bean dapat

mempertahankan keadaan spesifik untuk client tersebut hanya selama

pemanggilan method. Ketika method selesai, keadaan spesifik client tidak

dipertahankan yaitu EJB container memusnahkan stateless session bean.

98

Page 99: Komplit Modul

Jenis session bean ini tidak menggunakan instance variable sehingga session

bean menyimpan data selama pemanggilan method. Karena stateless session

bean dapat mendukung multiple client, stateless session bean menyediakan

skalabilitas yang lebih baik terhadap aplikasi yang membutuhkan banyak

client.

Stateful Session Bean

Jenis bean ini menggunakan instance variable yang mengijinkan data

persistent selama pemanggilan method karena instance variable

memungkinkannya. Client mengeset data ke variable – variable ini yang

dikehendaki untuk persist. Statefull session bean mempertahankan statenya

terhadap pemanggilan method – method yang dibuat loeh client yang sama.

Jika state statefull session bean diubah selama pemanggilan satu method,

maka keadaan tersebut akan tersedia pada client yang sama pada invokasi

yang selanjutnya. Keadaan client bean dipertahankan selama sesi dari client

bean. Ketika client menghilangkan atau mengakhiri bean, session berakhir

dan state menghilang. Karena client berinteraksi dengen beannya, state ini

sering dinamakan conversational state.

Sebagai contoh misalnya seorang customer yang menggunakan debit card

pada mesin ATM. ATM dapat melakukan bermacam operasi seperti

memeriksa saldo, mentransfer uang, ataupun mengadakan penarikan.

Operasi ini dapat dilakukan satu demi satu terhadap client yang sama. Jadi

bean haru mempertahankan keadaannya untuk setiap operasi – operasi

diatas pada client yang sama.

User interface memanggil method – method session bean user ingin

menggunakan fungsi dari session bean. Session bean dapat memanggil session

bean dan entity bean lainnya.

12.2. Kapan Menggunakan Session Bean

Umumnya session bean digunakan dalam keadaan sebagai berikut :

99

Page 100: Komplit Modul

o Ketika hanya ada satu client sedanga mengakses instance bean pada

waktu tertentu

o Ketika bean tidak persistent yang berarti bahwa bean tidak akan

bertahan lama

o Bean dimplementasikan pada web services.

Statefull session bean digunakan dalam keadaan berikut :

o Bean ingin menyimpan informasi tentang client selama invokasi

method

o Ketika bean bekerja sebagai mediator antara client dan komponen –

komponen lain dari aplikasi

o Ketika bean harus mengatur aliran kerja dari beberapa enterprise bean

lainnya

Stateless session bean sesuai untuk keadaan berikut :

o Jika bean tidak mengandung data untuk client tertentu

o Jika hanya ada satu invokasi method diantara semua client untuk

melakukan generic task

12.3. Siklus Session Bean

12.3.1 Siklus Stateless Session Bean

Karena stateless session bean tidak pasivate terhadap pemanggilan

– pemanggilan method maka stateless session bean hanya mencakup dua

tingkat yaitu tidak ada atau siap untuk invokasi method. Stateless session

bean mengawali siklus hidupnya ketika client memperoleh reference

terhadap session bean. Untuk itu, container melakukan injeksi

ketrgantungan sebelum memanggil anotasi @PreContruct method jika

ada. Setelah memanggil anotasi method ini bean akan siap untuk

menginvokasi methodnya melalui client.

100

Page 101: Komplit Modul

Gambar 12.2 Siklus hidup stateless session bean

Container memanggil anotasi method @PreDestroy saat mengakhiri

siklus session bean. Setelah itu session bean akan disimpan di garbage

collection.

12.3.2 Siklus Statefull Session Bean

Stetefull session bean mengawali siklusnya ketika client

mendapatkan reference statefull session bean. Sebelum menginvoke

anotasi method @PostConstruct container melakukan injection

dependency setelah bean ini siap. Container dapat menonaktifkan sebuah

bean dalam keadaan ready (umumnya container menggunakan algorithma

terakhir yang digunakan untuk mempasifkan sebuah bean). Dalama

mekanisme yang dapat dipasifkan bean pindah dari memory ke memory

kedua. Container menginvoke anotasi method @PrePassivate sebelum

mempasifkan bean. Jika client menginvoke business method pada bean

yang telah dipasifkan maka container menginvoke method anotasi

@PostActivate untuk membawa bean dalam keadaan ready. Perhatikan

gambar berikut ini :

101

Page 102: Komplit Modul

Gambar 12.3 Siklus hidup statefull session bean

Saat mengakhiri siklus bean, client memanggil anotasi method @Remove

setelah itu container memanggil anotasi method @PreDestroy yang

mengakibatkan bean akan dibawa ke garbage collection.

12.4. Contoh Statefull Session Bean

Untuk contoh statefull session bean kita akan membuat, mendeploy

dan menjalankan aplikasi java JEE sederhana yang dinamakan account.

Tujuan dari account adalah melakukan dua operasi transaksi (simpan dan

tarik) bagi customer. Aplikasi account ini terdiri atas sebuah enterprise

bean, yang melakukan transaksi – transaksi dan dua jenis client yaitu

appilication client dan web client.

Langkah – langkah untuk membuat aplikasi ini adalah :

1. Buat enterprise bean : AccountBean

2. Buat aplikasi client : AccountCustomer

3. Deploy account ke server

4. Jalankan aplikasi client

12.4.1. Membuat Enterprise Bean

Enterprise bean dalam contoh ini adalah sebuah statefull session

bean yang dinamakan AccountBean. Account session menunjukkan

informasi account bagi account customer yang sementara online. Bean

customer dapat menyimpan dan menarik sejumlah uang dari accountnya.

Untuk mengelola account dibutuhkan Remote business interface

(Account) dan Session bean class (AccountBean).

Account business interface adalah interface Java yang

mendefinisikan semua business method yang diimplementasikan dalam

102

Page 103: Komplit Modul

class bean. Jika class bean mengimplementasikan interface tunggal,

interface itu dianggap business interface. Business interface adalah local

interface kecuali jika dianotasikan dengan anotasi javax.ejb.Remote.

Class bean dapat juga mengimplementasikan lebih dari satu

interface.Jika bean class mengimplementasikan lebih dari satu interface,

business interface harus dijelaskan dengan class bean menggunakan

@Local atau @Remote. Source code untuk business interface Account

adalah sebagai berikut :

package ejbExample.stateful;import javax.ejb.Remote;@Remotepublic interface Account {  public float deposit(float amount);  public float withdraw(float amount);  @Remove public void remove();}

Session bean class pada contoh ini dinamakan AccountBean.

Class ini mengimplementasikan dua business method (deposit dan

withdraw). Source code dari bean class ini adalah sebagai berikut :

package ejbExample.stateful;import javax.ejb.Stateful;import javax.ejb.Remote;  import javax.ejb.Remove; import javax.ejb.*;

@Stateful(name="AccountBean")

103

Page 104: Komplit Modul

@Remote(AccountRemote.class)  public class AccountBean implements AccountRemote {

 float balance = 0;

  public float deposit(float amount){  balance += amount;

  return balance;  }

  public float withdraw(float amount){  balance -= amount;

  return balance;  }

@Remove  

public void remove() {  balance = 0;

  }

}

12.4.2. Membuat Account Web Client

Source code untuk aplikasi client dinamakan WebClient.jsp yang

mengilustrasikan tugas dasar yang dilakukan oleh client dari enterprise

bean. Kodenya adalah sebagai berikut :

<%@page language="java" %><%@ page contentType="text/html; charset=UTF-8" %><%@ page import="com.javajazzup.examples.ejb3.stateful.*,    javax.naming.*"%>

 <%!  public AccountRemote account = null;

104

Page 105: Komplit Modul

  float bal=0;

  public void jspInit() {  try { InitialContext ic = new InitialContext(); account = (AccountRemote) ic   .lookup("example/AccountBean/remote"); System.out.println("Loaded Account Bean");

  } catch (Exception ex) {  System.out.println("Error:"+  ex.getMessage());  }  }  public void jspDestroy() {  account = null;  }%>  <%

  try {  String s1 = request.getParameter("amt");  String s2 = request.getParameter("group1");

  if ( s1 != null) {  Float amt  = new Float(s1);    if(s2.equals("dep"))  bal=account.deposit(amt.floatValue());  else if(s2.equals("with"))  bal=account.withdraw(amt.floatValue());  else   %> <p>Please select your choice</p>    <%  }  else  %>

  <br>Please enter the amount<br>  <p>  The Transaction is complete<br>  <b>Your Current Balance is:</b> <%= bal%>

105

Page 106: Komplit Modul

  <p>

  <%  }// end of try  catch (Exception e) {  e.printStackTrace (); }  %>

Source kode untuk form.jsp dan index.jsp masing – masing adalah

sebagai berikut :

<html><head><title>Bank Account</title></head>

<body><h1><p align="center"><font size="6" color="#800000">Bank Transaction Request Form</h1><hr><br><table bgcolor="#FFFFCC" align="center"> <form action="WebClient.jsp" method="POST"><tr><td></tr></td><tr><td>Enter the amount in rupees:<input type="text" name="amt" size="10"></tr></td><br> <tr><td><b>Select your choice:</b></tr></td><tr><td><input type="radio" name="group1" value ="dep">Deposit</tr></td><tr><td><input type="radio" name="group1" value ="with">Withdraw<br></tr></td>

<tr><td><input type="submit" value="Transmit"><input type="reset" value="Reset"></tr></td><tr><td></tr></td></form></table></body></html>

106

Page 107: Komplit Modul

<%@page language="java" %><html>

<head><title>Ejb3 Stateful Tutorial</title></head>

<body bgcolor="#FFFFCC">

<p align="center"><font size="6" color="#800000"><b>Welcome to <br>Ejb3-Jboss 4.2.0 Tutorial</b></font>Click <a href="ejb3/form.jsp">Bank Transaction Example</a> to execute Bank Bean<br></p></body></html>

12.5. Contoh Stateless Session Bean

Untuk stateless session bean kita akan membuat sebuah aplikasi

yang dinamakan Example dimana aplikasi ini akan melakukan operasi –

operasi matematika seperti penjumlahan, pengurangan, perkalian dan

pembagian. Aplikasi ini terdiri atas enterprise bean, yang melakukan

kalkulasi diatas, dua jenis client masing – masing sebuah application

client dan web client.

Adapun langkah – langkah untuk membangun aplikasi ini adalah

sebagai berikut :

1. Membuat enterprise bean : CalculatorBean

2. Membuat web client : WebClient

3. Deploy ke server

4. Gunakan web browser untuk menjalankan web client

12.5.1. Membuat Enterprise Bean

Enterprise bean dalam contoh ini berupa stateless session bean

yang dinamakan CalculatorBean yang pembuatannya meliputi Remote

107

Page 108: Komplit Modul

Business interface dan Enterprise bean. Business interface

mendefinisikan business method yang dapat dipanggil client secara

remote. Method - method ini diimplementasikan dalam enterprise bean

class. Source codenya adalah sebagai berikut :

package net.roseindia.ejb3.stateless; import java.math.*;

import javax.ejb.Remote;import java.lang.annotation.*;@Remote

public interface CalculatorRemote { public float add(float x, float y); public float subtract(float x, float y); public float multiply(float x, float y); public float division(float x, float y);}

Enterprise bean class untuk contoh in adalah CalculatorBean.

Class ini mengimplementasikan empat business method yang ada pada

CalculatorRemote. Source code dari CalculatorBean adalah sebagai

berikut :

package net.roseindia.ejb3.stateless;import java.math.*;import javax.ejb.Stateless;import javax.ejb.Remote;  

@Stateless(name="CalculatorBean")

@Remote(CalculatorRemote.class)  public class CalculatorBean implements CalculatorRemote{

  public float add(float x, float y){ 

108

Page 109: Komplit Modul

  return x + y; }

 public float subtract(float x, float y){  return x - y; }

  public float multiply(float x, float y){  return x * y; }

 public float division(float x, float y){ return x / y; }

}

12.4.2. Membuat Calculator Web Client

Web client berupa halaman jsp (WebClient.jsp) yang source

code adalah sebagai berikut :

<%@ page contentType="text/html; charset=UTF-8" %><%@ page import="com.javajazzup.examples.ejb3.stateless.*, javax.naming.*"%>

 <%!  private CalculatorRemote calculator = null;  float result=0;

  public void jspInit() {  try {    InitialContext ic = new InitialContext();    calculator = (CalculatorRemote) ic  .lookup("example/CalculatorBean/remote");

  System.out.println("Loaded Calculator Bean");//CalculatorBean  } catch (Exception ex) {

109

Page 110: Komplit Modul

  System.out.println("Error:"+  ex.getMessage());  }  }  public void jspDestroy() {  calculator = null;  }%>  <%  try {  String s1 = request.getParameter("num1");  String s2 = request.getParameter("num2");  String s3 = request.getParameter("group1");

System.out.println(s3);

  if ( s1 != null && s2 != null ) {  Float num1  = new Float(s1);  Float num2  = new Float(s2);    if(s3.equals("add"))  result=calculator.add(num1.floatValue(),num2.floatValue());  else if(s3.equals("sub"))  result=calculator.subtract(num1.floatValue(),num2.floatValue());  else if(s3.equals("multi"))  result=calculator.multiply(num1.floatValue(),num2.floatValue());  else  result=calculator.division(num1.floatValue(),num2.floatValue());   %>  <p>  <b>The result is:</b> <%= result %>  <p>    <%  }  }// end of try  catch (Exception e) {  e.printStackTrace (); //result = "Not valid";

110

Page 111: Komplit Modul

  }  %>

Untuk form.jsp dan index.jsp dari aplikasi ini adalah sebagai berikut :

<html>

<head>

<title>Calculator</title>

</head>

<body bgcolor="pink">

<h1>Calculator</h1>

<hr>

<form action="WebClient.jsp" method="POST">

<p>Enter first value:

<input type="text" name="num1" size="25"></p>

<br>

<p>Enter second value:

<input type="text" name="num2" size="25"></p>

<br>

<b>Seclect your choice:</b><br>

<input type="radio" name="group1" value

="add">Addition<br>

<input type="radio" name="group1" value

="sub">Subtraction<br>

<input type="radio" name="group1" value

="multi">Multiplication<br>

<input type="radio" name="group1" value

="div">Division<br>

<p>

<input type="submit" value="Submit">

<input type="reset" value="Reset"></p>

111

Page 112: Komplit Modul

</form>

</body>

</html>

Sedangkan index.jsp adalah sebagai berikut :

<%@page language="java" %><html><head><title>Ejb3 Stateless Tutorial</title></head> <body bgcolor="#FFFFCC">

<p align="center"><font size="6"

color="#800000"><b>Welcome to <br>

Ejb3-Jboss 4.2.0 Tutorial</b></font>

Click <a href="ejb3/form.jsp">Calculator Example</a>

to execute Calculator<br></p>

</body>

</html>

Apabila dijalankan dan semua bekerja dengan baik maka akan didapat hasil

sebagai berikut:

Gambar 12.4 Tampilan Home Page Aplikasi

Apabila link diatas diklik akan didapat tampilan sebagai berikut :

112

Page 113: Komplit Modul

Gambar 12.5 Calculator Form

The result is: 9.0

Download the full sourcecodeGambar 12.6 Tampilan Akhir Session Bean

RANGKUMAN

Session bean adalah enterprise bean yang berinteraksi secara langsung dengan user

dan berisi business logic dari suatu aplikasi enterprise

Pada dasarnya, session bean menggunkan satu entity bean untuk mengakses atau

memodifikasi data. Session dan entity bean mengimplementasikan business logic,

business rules, algorithma dan alur kerja

Session bean terbagi atas statefull session bean dan stateless session bean.

Stateless session bean tidak mempertahankan apa yang disebut conversational state

dengan client sedangkan statefull session bean menggunakan instance variable yang

mengijinkan data persistent selama pemanggilan method karena instance variable

memungkinkannya

Session bean digunakan ketika hanya ada satu client, bean tidak persistent dan

iimplementasikan pada web services

113

Page 114: Komplit Modul

Statefull session bean digunakan bila kita ingin menyimpan informasi tentang client

selama method invokasi dan bean bekerja sebagai mediator antara client dan

komponen lain dari aplikasi

Stateless session bean digunakan jika bean tidak mengandung data untuk client

tertentu dan hanya ada satu invokasi method diantara semua client untuk melakukan

generic task.

LATIHAN SOAL

1. Jelaskan apa yang dimaksud dengan session bean !

2. Bedakan statefull session bean dan stateless session bean !

3. Kapan anda menggunakan statefull session bean dan stateless session bean !

4. Dengan menggunakan konsep session bean buatlah aplikasi registrasi member baru

dari suatu organisasi !

5. Dalam session bean dikenal dua client. Bedakan kedua client tersebut dan berikan

contoh dalam bentuk program !

BAB XIII

JAVA PERSISTENCE API

Java Persistence API (JPA) adalah API standart yang digunakan untuk

mengelola data persistent dan object/relational mapping. Java Persistence API

ditambahkan pada platform Java EE 5. Setiap application server yang

compatible dengan java EE 5 mendukung java persistent API.

Java Persistence API menjamin management persistence dan mapping

objek. Ini amat membantu ketika menggunakan JPA dalam pengembangan

aplikasi menggunakan platform untuk java EE 5.

13.1. Ciri dan Keuntungan JPA

Java Persistence API adalah framework ringan yang didasarkan pada

objek java untuk mapping object relational. Anotasi metadata java dan

atau descriptor XML digunakan untuk mepping antara java object dan

114

Page 115: Komplit Modul

relational database. Ini juga mengijinkan SQL seperti query language

yang bekerja untuk query statis maupun dinamis. Ini juga mengijinkan

penggunaan persistence API. Java persistence API tergantung pada

anotasi metadata. API meliputi :

o Java Persistence API

o Anotasi Metadata

o Java persistence query language

Java persistence API dibangun diatas ide – ide cemerlang dari

teknologi – teknologi persistence seperti TopLink, JDO dan Hibernate.

JPA compatible dengan java SE juga java EE dan mengijinkan

pengembang mengambil keuntungan dari standart persistence API.

Data persistence tidak mudah bagi kebanyakan aplikasi

enterprise karena harus mengakses relational database seperti Oracle 10g.

Ini adalah tanggung jawab kita untuk mengupdate dan mengambil

database dengan menuliskan kode menggunakan SQL dan JDBC.

Sementara itu beberapa frameworks object relational seperti JBoss

Hibernate dan Oracle TopLink membuat persistence lebih mudah dan

menjadi lebih terkenal.

Persistence tier sebuah aplikasi dapat dibangun dalam

beberapa cara tetapi platform java tidak mengikuti standart yang dapat

digunakan baik oleh java EE maupun java SE. Tetapi Java Persistence

API membuat standart persistence API untuk platform java. Process

kerja aplikasi Enterprise Java Bean menggunakan JPA dapat dilihat pada

gambar berikut ini :

115

Page 116: Komplit Modul

Gambar 13.1 Proses Kerja EJB dan JPA

13.2. Domain Model

Saat membangun aplikasi enterprise, pertama rancang domain

object model yang dibutuhkan untuk menyimpan data dalam database.

Domain model menunjukkan object atau entity persistence dalam

database. Satu entity menunjukkan satu baris dalam data. Entity dapat

berupa person, tempat atau benda yang ingin disimpan di data dalam

database. Domain model mencakup karekteristik - karekteristik semua

object oriented seperti inheritance, polimorfisme dan lain – lain.

Ketika mengembangkan aplikasi enterprise, pertama rancang

domain object model untuk menyimpan data dalam database dan

kemudian database skema. Gambar berikut mengilustrasikan hubungan

one to many antara Employee dan Department. Entity contractor dan

fulltime diwariskan dari entity employee.

Gambar 13.2 Contoh Domain Object Model

13.3. Entity

Entity adalah light weight persistence domain object yang

mendefinisikan sebuah table dalam relational database dan setiap instance

suatu entity berasosiasi dengan satu baris dalam table tersebut. Entity

116

Page 117: Komplit Modul

menunjuk ke koleksi logic data yang dapat disimpan atau dipanggil

sebagai satu kesatuan. Sebagai contoh, dalam aplikasi bank, Customer

dan BankAccount dapat diperlakukan sebagai entity. Customer name,

customer address dapat dikelompokkan secara logic menunjuk pada

entity Customer. Demikian pula account number, total balance dapat

dikelompokkan secara logic pada entity BankAccount.

Persistance field atau persistent properties menyatakan keadaan

persistent suatu entity. Untuk memetakan entiry dan relatinshipnya ke

data dalam relational database entity – entity ini menggunakan object-

relational mapping.

Ada beberapa ketentuan dari entity class :

o Class harus memiliki constructor tanpa argument baik public atau

protect

o Class juga method dan instance variable yang persistence jangan

dideklarasikan sebagai final

o Gunakan anotasi javax.persistance.Entity untuk menganotasi class

o Deklarasikan persistence instance variable sebagai protected, private

atau package private sehingga dapat diakses secara langsung oleh

method – method class

o Entity class dapat mengextend entity juga non entity class dan

sebaliknya

13.4. Persistance Fields dan property dalam Entity Class

Ada dua cara untuk mengakses keadaan persistent suatu entity baik

dengan menggunakan instance variable atau menggunakan property

javaBean. Field atau property harus mengikuti field dan property java.

Entity menggunakan persistence fields sementara memetakan anotasi –

anotasi. Anotasi dikenakan pada instance variable entity. Pada lain pihak

117

Page 118: Komplit Modul

enetity menggunakan persistence property ketika memetakan anotasi.

Anotasi dikenakan pada entity get method untuk javaBean style. Kita tak

boleh memetakan anotasi ke field dan property secara bersama dalam satu

entity.

Persistance mengakses instance variable entity class secara

langsung pada saat runtime, jika entity class menggunakan persistence

fields. Perlu untuk menggunakan mapping object/relational pada instance

variable. Entity harus mengikuti konvensi method dari component

javaBean ketika menggunakan property persistent. Property javaBean

style menggunakan getter dan setter method yang digunakan setelah

instance variable dari entity class. Ada getter dan setter method untuk

setiap persistence property. Dalam hal Boolean property kita dapat

menggunakan isProperty daripada getProperty seperti pada contoh berikut

. Misalkan sebuah entity dengan tipe customer menggunakan persistent

property yang mempunyai private instance variable dengan nama

firstName, class mendefinisikan dua method getFirstName dan

setFirstName untuk mengambil dan mengeset nilai – nilai instance

variable. Gunakan method signature berikut untuk property single valued

persistent

o Type getProperty ( )

o Void setProperty( Type type)

13.4. Primary Key dalam Entity

Untuk menunjukkan property primary key gunakan anotasi

javax.persistance.Id. Composite Primary Key disusun apakah oleh

property persistent tunggal atau field dan menggunakan

javax.persistance.IdClass dan javax.persistence.EmbeddedId. Sebuah

class primary key harus mengikuti ketentuan sebagai berikut :

o Harus memiliki access modifier sebagai public

118

Page 119: Komplit Modul

o Class harus mencakup sebuah contstructor public

o Class harus serialized

o Class harus mengimplementasikan method equals

Contoh berikut menampilkan source code untuk mengelola Primary Key yang

berupa Composite Key.

public final class ListItemKey implements Serializable{

 public Interger order_Id; public int item_Id; public ListItemKey() {}

 public ListItemKey(Integer order_Id, int item_Id){ this.order_Id = order_Id; this.item_Id = item_Id; }

 public boolean equals(Object otherOb){ if(this == otherOb){ return true; }

 if(!otherOb instanceof ListItemKey){ return false; }

 ListItemKey other = (ListItemKey) otherOb; return ((order_Id==null?other.order_Id==null:order_Id.equals(other.order_Id))     &&(item_Id == other.item_Id)); }

 public int hashCode(){ return ((orderId==null?0:orderId.hashCode())^((int) itemId)); }

 public String toString() { return "" + orderId + "-" + itemId;

119

Page 120: Komplit Modul

 } }

13.4. Contoh Java Persistance

Dalam contoh berikut kita akan membuat aplikasi JPA yang

memiliki domain model seperti pada gambar berikut :

Gambar 13.3 Domain Model JPA

Langkah langkah membangun aplikasi ini adalah :

1. Membuat Remote business interface : BookCatalogInterface

2. Mengimplementasikan anotasi SessionBean : BookCatalogBean

3. Membuat entity bean : BookBank

4. Membuat web client : WebClient

5. Mendeploy book ke dalam server

6. Menjalankan web browser

Source code dari Book Bean adalah sebagai berikut :

package entity.library;import javax.persistence.Entity;import javax.persistence.GeneratedValue; import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;import java.util.Collection;import javax.persistence.*;import java.io.Serializable;@Entity@Table(name="bookbank")public class BookBank implements Serializable {

  long id;

120

Page 121: Komplit Modul

  String title;  String author;  double price;  //protected Collection <LineItems> lineitems;  public BookBank() {  super();  }

  public BookBank(String title, String author, double price) {  super();  this.title = title;  this.author = author;  this.price = price;  }  @Id  @GeneratedValue(strategy=GenerationType.AUTO)

 // Getter and setter methods for the defined properties..

  public long getId() {  return id;  }  public void setId(long id) {  this.id = id;  }

  public String getTitle() {  return title;  }  public void setTitle(String title) {  this.title = title;  }

  public String getAuthor() {  return author;  }

  public void setAuthor(String author) {  this.author = author;  }

  public double getPrice() {

121

Page 122: Komplit Modul

  return price;  }  public void setPrice(double price) {  this.price = price;  }}Anotasi @Table digunakan untuk menspesifikasikan nama table yang

digunakan oleh entity bean dan anotasi @Id digunakan untuk menandai field id

sebagai primary key dari entity bean. SQL schema dari BOOK adalah sebagai

berikut :

CREATE TABLE BOOKBANK ( 

ID int(11) NOT NULL auto_increment, 

TITLE varchar(50) NOT NULL, 

AUTHOR varchar(50) NOT NULL, 

PRICE decimal(12,2) NOT NULL, 

PRIMARY KEY (ID)  

);    

Business logic dalam aplikasi ini adalah Book catalog yang diperlukan untuk

menyimpan objek buku ke dalam database dan mengeluarkannya dari database

saat dibutuhkan. Kita menggunakan session bean untuk mengimplementasikan

business logic ini dengan source kode sebagai berikut :

package entity.library;import javax.ejb.Remote;import java.util.Collection;@Remote

public interface BookCatalogInterface {  public void addBook(String title, String author, double price);  public Collection <BookBank> getAllBooks();}

122

Page 123: Komplit Modul

Untuk menggunakan session bean dalam entity bean kita memerlukan class

utility yang disebut Entity Manager yang diimplementasikan dalam

BookCatalogBean dengan source code sebagai berikut :

package entity.library;import java.util.Iterator;import java.util.Collection;import javax.ejb.Stateless;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import java.io.Serializable;import javax.ejb.Remote;@Remote(BookCatalogInterface.class)@Statelesspublic class BookCatalogBean implements Serializable, BookCatalogInterface {  @PersistenceContext(unitName="EntityBean") EntityManager em;  protected BookBank book;  protected Collection <BookBank> bookList;

 public void addBook(String title, String author, double price) {  // Initialize the form  if (book == null) book = new BookBank(title, author, price);   em.persist(book);  }

  public Collection <BookBank>getAllBooks() { bookList=em.createQuery("from BookBank b").getResultList(); return bookList;  }}

RANGKUMAN

Java Persistence API (JPA) adalah API standart yang digunakan untuk mengelola data

persistent dan object/relational mapping

Java Persistence API adalah framework ringan yang didasarkan pada objek java untuk

mapping object relational

123

Page 124: Komplit Modul

Java persistence API tergantung pada anotasi metadata dan meliputi :

o Java Persistence API

o Anotasi Metadata

o Java persistence query language

Domain model menunjukkan object atau entity persistence dalam database

Persistance field atau persistent properties menyatakan keadaan persistent suatu entity.

Untuk memetakan entiry dan relatinshipnya ke data dalam relational database entity –

entity ini menggunakan object-relational mapping.

Ada dua cara untuk mengakses keadaan persistent suatu entity baik dengan

menggunakan instance variable atau menggunakan property javaBean

Entity adalah light weight persistence domain object yang mendefinisikan sebuah table

dalam relational database dan setiap instance suatu entity berasosiasi dengan satu baris

dalam table tersebut

LATIHAN SOAL

1. Jelaskan apa yang dimaksud dengan Java Persistance API dan apa kegunaanya dalam

pengembangan aplikasi enterprise !

2. Bedakan antara JPA dan session bean !

3. Apa yang dimaksud dengan Domain Model dalam kaitannya dengan JPA. Terangkan

maksudnya !

4. Dengan menggunakan entity manager utility buatlah aplikasi sederhana yang

berisikan entity student !

5. Kapan anda menggunakan entity manager, jelaskan !

124