Download Web 2.0 and RESTful Web Services

Document related concepts
no text concepts found
Transcript
Web Engineering 2010
Pertemuan ke-10
Teknologi Aplikasi Web III
(Servlet, JSP, Javabeans)
Husni
[email protected]
Husni.trunojoyo.ac.id
Komputasi.wordpress.com
Outline
•
•
•
•
Servlet
JSP
Java Beans
Rangkuman
2
SERVLETS
3
Sekilas Servlet
• Servlet adalah suatu ekstensi terhadap web server
yang memberikan fungsionalitas tambahan dan
programmability
• Servlet secara penuh menggunakan platform Java
• Servlet pada dasarnya adalah kelas Java. Setiap servlet
meng-extends kelas “javax.servlet.http.HttpServlet”
• Kelas-kelas terkait dibungkus dalam paket
“javax.servlet” dan “javax.servlet.http”
4
Aplikasi Web Servlet Java
• Siklus hidup pengembangan Servlet
– Development
• Mendefinisikan kelas-kelas servlet, metode dan
properti di dalamnya
– Deployment
• Pemetaan Servlet ke lingkungan web
• Deployment pada Web Application Server
– Execution
• Memahami siklus hidup eksekusinya
5
Struktur Servlet Dasar
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response )
throws ServletException, java.io.IOException
{
…
}
public void doPost(HttpServletRequest request,
HttpServletResponse response )
throws ServletException, IOException
{
…
}
}
6
Konstruktor dan Metode “Main”
• Instance servlet instances dibuat (dijalankan) oleh
servlet container secara otomatis saat diminta –
bukan oleh kelas atau metode pengguna
– Tidak perlu mendefinisikan konstruktor
• Titik masuk bukanlag metode “main”, tetapi dua
metode
– Gunakan “doGet” atau “doPost” untuk
mengerjakan tugas-tugas
7
Deployment Servlet
• Direktori web content root
(public_html)
– Titik awal dari aplikasi web
keseluruhan
– Semua file dan sub-direktori di sini:
html, images, documents …
• /public_html/WEB-INF/
– Direktori ini memuat file konfigurasi
dan kelas- ter-compile
– Tidak secara langsung dapat diakses
dari web
• /public_html/WEBINF/classes/
– Semua kelas ter-compile (kelas servlet
dan lainnya) ada dalam direktori ini
8
Pemetaan Servlet
• Kelas Servlet perlu dipetakan suatu URI yang dapat
diakses (accessible , terutama melalui HTTP)
• Agar nyaman, servlet dapat diakses dalam pola umum
(invoker servlet)
– http://[domain]/[context]/servlet/[ServletC
lassName]
– http://localhost:8988/servletintro/servlet/
SimpleServlet
• Pemetaan spesifik: menggunakan file konfigurasi
“web.xml”
– Servlet dipetakan secara khusus ke suatu URL yang
didefinisikan pengguna
9
Konfigurasi “web.xml”
• Menggunakan file
“web.xml” untuk
pemetaan lebih spesifik
– File-file dalam direktori
“WEB-INF”
• Contoh
<servlet>
<servlet-name>HelloW</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloW</servlet-name>
<url-pattern>hello</url-pattern>
</servlet-mapping>
– Kelas Servlet
• HelloWorld.class
– Konteks aplikasi:
• http://localhost:8080/servletintro/
– Pemetaaan kelas Invoker
• http://localhost:8080/servletintro/servlet/HelloWorld
– Pemetaan spesifik
• http://localhost:8080/servletintro/hello
– Contoh pemetaan lain, lihat “web.xml”
10
Siklus Hidup Eksekusi Servlet
Servlet Class
First Request
init()
Subsequent
Requests (can
be from
different users
and sessions)
doPost()
service()
doGet()
Servlet Instance in Memory
11
Pesan Response & Request
• Server dan client web berkomunikasi melalui
pesan HTTP (protokol)
– Pesan request: client  server
– Pesan response: server  client
• Pesan HTTP terdiri dari header dan body
– HTTP header: informasi yang mendeskripsikan
pesan dan konsteks dari pesan
– HTTP body: isi yang biasanya ditampilkan
12
Pemrosesan Request
• Tipe metode request utama
– GET
• Data pengguna dikirim sebagai bagian dari URL
request
• Tidak ada body pesan request
• Tindakan pemicuan: bar alamat (pada browser), link,
form, …
– POST
• Data pengguna dikirim dalam body pesan request
• Tindakan pemicuan: form, …
13
Metode doGet()
• Kelas Servlet menggunakan metode “doGet()”
untuk memroses request URL umum (servlet)
public void doGet( HttpServletRequest request,
HttpServletResponse response )
throws ServletException,IOException {
( generating response message … )
}
14
Pemrosesan Response
• Response body
– Pembangkitan HTML atau content lain untuk
ditampilkan
• Response header
– Pengubahan data header dari pesan
response untuk mempengaruhi perilakunya
15
Pembangkitan Response Content
• Menggunakan “response”
(javax.servlet.http.HttpServletResponse) dan
“java.io.PrintWriter” untuk menghasilkan
HTML ke stream output
java.io.PrintWriter out = response.getWriter();
out.println(“<html>”);
…
out.println(“</html>”);
16
Menggunakan StringBuffer
•
Saat ada perubahan sering terhadap string,
penggunakan StringBuffer
(java.lang.StringBuffer) lebih efisien
StringBuffer html = new StringBuffer();
html.append(“<html>”);
html.append(“<head>");
…
…
String s= html.toString();
•
Ini sangat berguna ketika membangkitkan
string-string halaman HTML
17
Penformatan Paragraf HTML
• Menformat kode sumber HTML, atau
tampilkan akhir dalam browser?
• Gunakan karakter escape (/n, /t, ...) untuk
menformat sumber kode HTML
• Gunakan tag-tag HTML untuk men-format
luaran akhir dalam browser
– <p>, <br>, …
18
Pembangkitan HTML Dinamis
• Gunakan kemampuan pemrograman Java
untuk membangkitkan HTML secara
dinamis
– Content dinamis: date/time, user name, ....
– Elemen (tag) HTML dinamis
– Atribut elemen dinamis
– … (kreatiflah!)
19
Mendapatkan Data Pengguuna
• Dua cara
– Parameter URL (Get)
• http:// …/somefile?p1=value1&p2=value2
– Form HTML (Get atau Post)
User Input
Servlet
URL parameter
doGet
HTML Form
Post
doPost
20
URL Dengan Parameter
• Data pengguna dapat dikirim dengan request “get”
– http:// …/somefile?p1=value1&p2=value2
• Aplikasi
– Halaman Template bagi detail item data
• http://www.newegg.com/Product/Product.asp?Item=N82E16827152058
• http://www2.cis.gsu.edu/cis/people/display.asp?pk=3
– Pemilihan content halaman
• http://forum.java.sun.com/category.jspa?categoryID=20
• http://javaweb.jackzheng.net/cis3270su06/index.jsp?page=schedule
– Masukan pengguna
• http://www.google.com/search?q=java
– Kondisi/konfigurasi
• http://finance.yahoo.com/q/bc?s=MSFT&t=5d&l=on&z=l&q=l
• http://msdn.e-academy.com/elms/Storefront/Home.aspx?campus=gsu_cis
– Tampilan/format halaman, content halaman, pesan error, …
21
Penanganan Parameter “Get”
• Dalam “get” HTTP , data pengguna dikirim dengan URL
– http://…/GetData?p1=value1&p2=value2
• Menggunakan obyek request (diberikan oleh metode
doGet) untuk me-retrieve data ini.
– String p1=request.getParameter(“p1”);
– String p2=request.getParameter(“p2”);
– String p[ ]=request.getParameterValues(“p1”);
• Catatan: nama parameter bersifat case sensitive
22
Konversi Bilangan
• Semua nilai parameter bertipe String
– String p1=request.getParameter(“p1”);
• Bagaimana jika perlu numerik?
– Integer.parseInt()
– Double.parseDouble()
• Eksepsi konversi harus ditangani
23
Parameter Tak-reguler
• Nilai hilang (string kosong dikembalikan)
– …/GetData?data=
• Parameter hilang (parameter tak terdefinisi, null)
– …/GetData?
– …/GetData?data
– …/GetData?Data=red
// tak ada parameter
// ”data” masih tak terdefinisi
// case sensitive
• Blank (kosong)
– …/GetData?data=hello world
• Parameter ganda (redundant)
– …/GetData?data=blue&data=red // Gunakan getParameterValues()
24
JAVA SERVER PAGES
25
Apa Itu JSP
• Servlets – HTML dalam kode Java
• JSP – Kode Java dalam HTML
<HTML>
<HEAD>
<TITLE>Java Server Pages</TITLE>
</HEAD>
<BODY>
<H1>JSP</H1>
<%= “Java Server Pages.” %>
<HR>
</BODY>
</HTML>
26
Siklus Hidup JSP
JSP to Servlet
Translation
Servlet
Compiled
Servlet
Loaded
jspInit()
called
_jspService()
called
27
Kebutuhan Terhadap JSP
• Dengan servlet
– Sulit menuliskan dan merawat HTML
– Tidak dapat menggunakan tool standard
HTML
– HTML bersifat inaccessible bagi pengembang
non-java
28
Keuntungan JSP
• Lebih mudah menuliskan dan merawat
HTML
• Dapat menggunakan tool HTML standar
• Dapat mudah membagi tim
pengembangan
29
Keuntungan
• Keuntungan dari Java
• API Berkembang
• Mudah dipelajari
• Komunikasi pengembangan besar
• Dukungan server dan standardisasi
30
Lokasi Halaman JSP
• Tak seperti servlet, halaman JSP dapat
diletakkan dimanapun file HTML
diletakkan, tidak harus di direktori tertentu.
31
Elemen Sripting JSP
• Elemen scripting JSP memungkinkan kita
menyisipkan kode Java ke dalam file JSP.
• Ada 3 jenis elemen
– Ekspresi
– Scriptlet
– Deklarasi
<%= Java Expression %>
<% Java Code %>
<%! Field/Method %>
32
Ekspresi JSP
• Ekspresi JSP digunakan untuk menyisipkan kode Java
secara langsung ke dalam output.
Sintaks:
<%= Expression %>
Contoh:
Current Time: <%= new java.util.Date() %>
Output:
Current Time: Tue Aug 22 21:05:47 IST 2006
• Ekspresi dievaluasi, dikonversi ke string dan disisipkan
ke dalam halaman.
33
Variabel Predefined
•
Agar ekspresi sederhana, JSP menyediakan sejumlah
variabel predefined (obyek impllisit).
–
–
–
–
–
–
–
request – HttpServletRequest
response – HttpServletResponse
session – HttpSession
out – Writer (versi ber-buffer dari tipe JspWriter)
application – ServletContext
config – ServletConfig
pageContext – memberikan titik akses tunggal ke atribut
halaman
– page – sinonim bagi “this”
34
Scriptlet JSP
• Penanganan sesuatu yanglebih sekedar mengoutput-kan nilai dari ekspresi sederhana.
• Memungkinkan programmer menyisipkan kode
tertentu ke dalam metode servlets _jspService.
Sintaks:
<% Java Code %>
Contoh:
<%
String str = request.getParameter(“name”);
out.print(“Name : ”+str);
%>
35
Deklarasi JSP
• Deklarasi JSP memungkinkan programmer
mendefiisikan metode atau field yang dapat disisipkan
ke dalam main body dari servlet yang dibangkitkan
(diluar metode _jspService())
Sintaks:
<%! Field/Method definition %>
Contoh:
<%!
private String getMessage(){
return “This is a simple message!!”;
}
%>
<%= getMessage() %>
36
Sintaks XML
• Sintaks mirip XML bagi ekspresi, scriptlet dan
deklarasi JSP
– <jsp:expression>…</jsp:expression>
– <jsp:scriptlet>…</jsp:scriptlet>
– <jsp:declaration>…</jsp:declaration>
• Didukung oleh JSP versi 1.2 ke atas
• Bersifat case sensitive, sebaiknya lowercase
37
Direktif JSP
• Direktif JSP mempengaruhi struktur
keseluruhan dari servlet yang dihasilkan dari
halaman JSP.
• Direktif JSP berbentuk:
– <%@ directive attribute=“value” … … %>
• Ada tiga jenis:
– page, include & taglib
38
Direktif Page JSP
• Direktif Page mengontrol struktur dari servlet dengan
mengimpor kelas-kelas, meng-custom superclass,
mengubah tipe content, dll.
• Direktif Page JSP mempunyai atribut :
– import, contentType, pageEncoding, session,
isELIgnored, buffer, autoFlush, info, errorPage,
isThreadSafe, language & extends
39
Atribut Direktif Page JSP
•
•
•
•
•
•
•
•
•
•
•
•
•
import=“java.util.*, java.sql.*”
contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“Shift_JIS”
session=“true/false”
isELIgnored=“false/true”
buffer=“size in kb”
autoFlush=“true/false”
info=“Some info message.”
errorPage=“error.jsp”
isErrorPage=“false/true”
isThreadSafe=“true/false”
language=“java”
extends=“package.class”
40
Menyertakan File
• Ada tiga cara menyertakan file eksternal
ke dalam dokumen JSP.
– <jsp:include …>…
– <%@ include …>
– <jsp:plugin …>…
41
Aksi jsp:include
• Ini menyertakan output dari halaman sekunder pada
waktu halaman utama direquest.
• Output dari sub-halaman harus berupa HTML yang
dibangkitkan oleh servlet atau JSP.
<jsp:include page=“/inc/header.jsp” flush=“true” />
<jsp:include page=“/inc/header.jsp” flush=“true”>
<jsp:param name=“paramName” value=“xyz”>
</jsp:include>
42
Direktif Include
• Direktif ini digunakan untuk menyertakan
suatu file ke dalam JSP utama pada waktu
translasi ke dalam servlet.
• Kode dari file yang disertakan ditambahkan ke
dokumen JSP.
<%@ include page=“/inc/header.jsp” %>
43
Meneruskan Request
• Aksi ini digunakan untuk mendapatkan output
file JSP secara lengkap dari JSP lain atau
servlet.
• Output dari JSP atau servlet pelengkat
dikirimkan ke client, bukan bagian dari JSP
terkini.
<jsp:forward page=“xyz.jsp” />
44
Aksi jsp:plugin
• Digunakan untuk menempelkan applet Java ke
dalam output yang dibangkitkan.
• Applet Java jarang digunakan di web saat ini.
<jsp:plugin type=“applet”
code=“MyApplet.class”
width=“400” height=“300”>
</jsp:plugin>
45
JAVA BEANS
46
Java Beans?
• Apa itu Beans?
• Beans adalah obyek Java standar.
– Harus ada konstruktur nol argumen.
– Sebaiknya tidak ada field public.
– Nilai-nilai diakses melalui pemanggilan metode,
getXxx, setXxx & isXxx.
47
Java Bean (Contoh)
public class Person {
private int age;
private String name;
………
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return this.age;
}
public String getName(){
return this.name;
}
………
}
48
Java Beans & JSP
• Ada tiga konstruksi utama untuk
menggunakan Java Beans dalam JSP.
– <jsp:useBean ……… />
– <jsp:getProperty ……… />
– <jsp:setProperty ……… />
49
jsp:useBean
• Digunakan untuk memuat beans yang akan digunakan
dalam dokumen JSP.
Sintaks:
<jsp:useBean id=“name” class=“package.Class” />
Contoh:
<jsp:useBean id=“person” class=“iiitmk.Person” />
Sama dengan:
<% iiitmk.Person person = new iiitmk.Person(); %>
50
Mendapatkan Properti bean
• Digunakan untuk membaca properti dari beans.
Sintaks:
<jsp:getProperty id=“name” property=“propName” />
Contoh:
<jsp:getProperty id=“person” property=“name” />
Sama dengan:
<%= person.getName() %>
51
Menseting Properti bean
• Digunakan untuk mengatur nilai dari properti beans.
Sintak:
<jsp:setProperty id=“name” property=“propName”
value=“propValue” />
Contoh:
<jsp:setProperty id=“person” property=“name”
value=“Popeye The Sailor” />
Sama dengan:
<% person.setName(“Popeye The Sailor”); %>
52
Parameter Property & Request
• Nilai dari properti bean dapat diset secara langsung
dari nilai parameter request yang berkaitan.
Sintaks:
<jsp:setProperty id=“name” property=“propName”
param=“propName” />
Contoh:
<jsp:setProperty id=“person” property=“name”
param=“name” />
<jsp:setProperty id=“person” property=“*” />
53
Bagi-pakai Beans (lingkup)
• Lingkup dari suatu bean mendefinisikan dimana bean
tersebut disimpan dan bagaimana dapat diakses.
Secara default, accessiblenya adalah variabel lokal.
Tempat lain penyimpanan bean adalah request, session
dan aplikasi (application).
Sintaks:
<jsp:useBean … … … scope=“…” />
Lingkup:
page, request, session & application
54
Lingkup Page
• Lingkup default dari suatu bean. Bean diikat ke
variabel lokal dalam metode _jspService dan juga
diletakkan dalam variabel predefined
pageContext, dapat dikases dengan pemanggilan
metode getAttribute().
Sintaks:
<jsp:useBean … … … scope=“page” />
<jsp:useBean … … … />
55
Lingkup Request
• Bean juga ditempatkan di dalam obyek the
HttpServletRequest (request) selama masa
request aktif.
• Dapat diakses dengan metode getAttribute().
Sintaks:
<jsp:useBean … … … scope=“request” />
56
Lingkup Session
• Bean juga diletakkan di dalam obyek
HttpSession (session).
• Dapat diakses dengan metode getAttribute().
Sintaks:
<jsp:useBean … … … scope=“session” />
57
Lingkup Application
• Bean juga diletakkan di dalam obyek
ServletContext (application). Context dari servlet
dishare oleh semua servlet dan JSP dalam aplikasi
web.
• Dapat diakses dengan metode getAttribute().
Sintaks:
<jsp:useBean … … … scope=“application” />
58
Rangkuman
• Servlet dan JSP digunakan untuk
membangun aplikasi web (server side
scripting)
• Servlet: HTML dalam kode Java
• JSP: Kode Java dalam HTML
• Javabeans merupakan obyek standar
yang terstruktur untuk memudahkan
pengembangan aplikasi berbasis Java
59
Referensi
• Bacaan Utama
– Java Servlet Tutorial
• http://java.sun.com/j2ee/tutorial/1_3fcs/doc/Servlets.html
– Java Server Pages Tutorial
• http://java.sun.com/j2ee/tutorial/1_3fcs/doc/JSPIntro.html
– Java Beans Tutorial
• http://java.sun.com/j2ee/tutorial/1_3fcs/doc/JSPBeans.html
60
Tools
• Apache Tomcat
– http://tomcat.apache.org/
• Eclipse
– http://www.eclipse.org/
• Eclipse Web Tools
– http://www.eclipse.org/webtools/
61
Pertanyaan?
62