Komplit Modul - Gudangnya Tugas Kampus

advertisement
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 componentbased 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
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
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
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
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
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
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
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
 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
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
Initialization
(Load Resources)
Request
Service
Response
(Accept Request)
Servlet
Destruction
(Unload Resources)
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
javax.servlet.Servlet
javax.servlet.Servlet
javax.servlet.http.HttpS
ervlet
MyServlet
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
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
Request
Browser
Request
Servlet
Response
Respon
se
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
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
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
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: " +
request,
15
"<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
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>");
request,
16
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 :
Gambar 2.7 Servlet Registrasi
8. Klik tombol daftar maka akan tampil output sebagai berikut
17
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
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
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
<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
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
22
 SendRedirect
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.
23
 Session
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
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"
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>
content="text/html;
25
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
HttpServletResponse response)
throws ServletException, IOException {
String nama = request.getParameter("nama");
request,
//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
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
request,
//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
}
}
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
 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
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
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
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
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"
charset=UTF-8">
<title>JSP Page</title>
content="text/html;
32
</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
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
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
RequestDispatcher dis;
String cookieMember = "1234567890";
request,
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
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 nonmember 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”.
Gambar 4.1. Login sebagai member
35
7. Jika login benar akan muncul tampilan berikut :
Gambar 4.2. Berhasil masuk sebagai member
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.
Gambar 4.3. Halaman index dengan peringatan user belum login sebagai
member
11. Sekarang coba untuk masuk sebagai member. Ketikkan username dan
password sembarang. Hasilnya akan dikembalikan ke index dengan
peringatan login salah.
Gambar 4.4. Peringatan Login Salah
36
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
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
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
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
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
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
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");
request,
42
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
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);
request,
}
5. Buat lagi sebuah servlet dan beri nama HomeServlet. Ketikkan kode berikut
pada method processRequest( )
protected
void
processRequest(HttpServletRequest
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
RequestDispatcher dis = null;
HttpSession session = request.getSession();
request,
43
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 :
Gambar 5.1. Masuk sebagai Member (implementasi Session)
7. Jika login benar kita akan masuk ke halaman member seperti tampilan
berikut ini
Gambar 5.2 Halaman khusus member
44
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
Gambar 5.3 Halaman index dengan 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
 Beberapa
method
yang
penting
dalam
HttpSession.setAttribute(NamaSession,
class
value),
HttpSession
new
adalah
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
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
Web App
Servlet
HTTP
Request
JSP
ServletFilter
Static file
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 (
).
Initialization
int( )
Request
Response
Service
doFilter ( )
Destruction
destroy ( )
Gambar 6.2 Siklus Hidup Filter
48
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.
Filter A
Request FilterChain.doFilter ( )
Response
Filter B
FilterChain.doFilter ( )
Servlet
FilterChain.doFilter ( )
Gambar 6.3. Rantai Filter
49
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
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
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);
}
request,
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
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
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
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
HTTPRequest
New
Or
Change
d
Y
JSP
Servlet
(java)
Servlet
(class)
HTTPRespons
e
Servlet
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
jspinti( )
(Load Resources)
Reques
t
Respon
se
jspService( )
(Accept Request)
jspDestroy( )
(Unload
Gambar 7.2 Siklus hidup JSP
Resources)
55
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
<%@ 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
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
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 :
59
1. Buat project baru dan beri nama DemoJSP. Lakukan pengaturan seperti
pada contoh soal Bab sebelumnya.
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
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
4.01
<%@page isErrorPage="true" %>
60
<html>
<head>
<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");
61
int angka1 = Integer.parseInt(angka1str);
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
62
 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 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
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
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
Expression Language mendefinisikan sekumpulan object implicit
yaitu
65
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
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.
66
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/>
o <c:catch/>
<c:param/>
o <c:if/>
<c:url/>
o <c:choose/>
o <c:when/>
<c:redirect/>
<c:import/>
67
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 :
8.2.3
o <sql : setDataSource/>
<sql: transaction/>
o <sql : query/>
<sql:param/>
o <sql : update/>
<sql:dateParam/>
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/>
8.2.4
<x:param/>
JSTL Internationalization
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
68
 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( )}
o ${fn:join ( )}
${fn:substringBefore( )}
${fn:toLowerCase( )}
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 :
69
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>
<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>
<%
70
Date tgl = new Date();
pageContext.setAttribute("tanggal", tgl);
%>
<h3>Tanggal
:
<fmt:formatDate
pattern="dd-mm-yyyy"/></h3>
value="${tanggal}"
<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 :
Gambar 8.2. Hasil pemakaian EL dan JSTL
71
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:
SQL,
kita
harus
mengimport
dari
URI
:
XML,
kita
harus
mengimport
dari
URI
:
http://java.sun.com/jsp/jstl/core.
 Untuk
menggunakan
JSTL
http://java.sun.com/jsp/jstl/sql
 Untuk
menggunakan
JSTL
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
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 !
72
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.
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
73
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.
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.
74
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
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
75
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
Spring ORM
Spring Web
Spring
Web
MVC
Spring
AOP
Spring
Context
Spring DAO
Spring Core
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;
BeanFactory
modul
dengan
ini
merupakan
menambahkan
ekstensi
dukungan
dari
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)
76

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.
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
77
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
Spring ORM
Spring Web
Spring
Web
MVC
Spring
AOP
Spring
Context
Spring DAO
Spring Core
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.

Spring
Context;
BeanFactory
modul
dengan
ini
merupakan
menambahkan
ekstensi
dukungan
dari
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.
78

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
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 :
79
Client
(Browser)
Index.jsp
Model
(DataLinks
)
Controller
(GoTutorial)
View
(Web.jsp)
(mobile.jsp)
(desktop.jsp
)
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 {
public String links[] = {
"Web Application Programming",
"Mobile Application Programming",
"Desktop Application Programming"};
public String targets[] = {"web","mobile","desktop"};
public int getLinksNumber(){
return links.length;
}
80
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>
<head>
<meta
http-equiv="Content-Type"
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++){
content="text/html;
81
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
HttpServletResponse response)
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);
}
request,
82
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
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 !
83
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.
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.
84
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.
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
85
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
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
86
Field
Type
Kode Varchar(4)
Nama Varchar(10)
SKS
int
 Tabel Mahasiswa
Field
Type
Nis
Varchar(10)
Nama
Varchar(40)
Alamat 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
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
87
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 :
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.
88
 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.
2.
3.
4.
Apa yang dimaksud dengan database, jelaskan !
Jelaskan perintah – perintah yang tergabung dalam kelompok SQL DDL !
Apa yang dimaksud dengan JDBC dan kapan JDBC digunakan ?
Dengan menggunakan netbeans dan Mysql buatlah database yang memiliki table – table
seperti dibawah ini :
Tabel Barang
Nama Field
Tipe Data
Kode_Barang Varchar(4)
Nama
Varchar(30)
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)
89
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 –
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
90
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
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
91
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
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 –
92
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
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
93
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
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 :
94
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
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
95
Gambar 11.2 Struktur Enterprise Bean JAR
RANGKUMAN
 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
 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 !
96
BAB XII
SESSION 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
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
97
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.
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,
98
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 :
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
99
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.
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
100
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 :
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
101
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
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;
@Remote
102
public 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")
@Remote(AccountRemote.class)
public class AccountBean implements AccountRemot
e {
float balance = 0;
public float deposit(float amount){
balance += amount;
return balance;
}
public float withdraw(float amount){
balance -= amount;
return balance;
103
}
@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=UTF8" %>
<%@ page import="com.javajazzup.examples.ejb3.st
ateful.*,
javax.naming.*"%>
<%!
public AccountRemote account = null;
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;
}
%>
104
<%
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%>
<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>
105
<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>
<%@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>
106
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
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);
107
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 Calculato
rRemote{
public float add(float x, float y){
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;
}
}
108
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=UTF8" %>
<%@ page import="com.javajazzup.examples.ejb3.st
ateless.*,
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) {
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);
109
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";
}
%>
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">
110
<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>
</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>
111
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 :
Gambar 12.5 Calculator Form
112
The result is: 9.0
Download the full sourcecode
Gambar 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
 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 !
113
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
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
114
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 :
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.
115
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
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 objectrelational mapping.
Ada beberapa ketentuan dari entity class :
o Class harus memiliki constructor tanpa argument baik public atau
protect
116
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
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
117
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
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;
}
118
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;
}
}
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
119
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;
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 propert
ies..
120
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() {
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,
121
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, do
uble price);
public Collection <BookBank> getAllBooks();
}
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)
@Stateless
public class BookCatalogBean implements Serializable,
BookCatalogInterface {
@PersistenceContext(unitName="EntityBean")
EntityManager em;
protected BookBank book;
protected Collection <BookBank> bookList;
122
public void addBook(String title, String author, dou
ble 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").getResult
List();
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
 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
123
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
Download