Architectures for Distributed Computing Chapter 5

Architectures for
Distributed Computing
Chapter 5
Piergiorgio Cremonese
Silvia Giordano
Netikos
SUPSI
Netikos Pisa - Italy
[email protected]
http://www.netikos.com
© SUPSI-DTI
Silvia Giordano
CH-6928 Manno
[email protected]
http://www.supsi.ch
Architecture 1
10/06/2004
Contents
‰Network
Applications Architecture
‰J2EE Summary
‰Laboratory: Network Applications
Architecture
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 2
1
Overview
‰Concept
of tiers
‰The ancestors of the client/server
architectures
‰The current three tiers architecture
‰Multi-tiers architectures
‰ practical example
© SUPSI-DTI
Silvia Giordano
Architecture 3
10/06/2004
Chapter goals:
‰ Use
the modern view of current
applications
‰ Understand the main features of evolving
applications and their related models
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 4
2
Introduction
‰ client
server model behind distributed
applications and how this model was born and
is evolving:
‰ View with tiers
‰ One tier architecture
‰ Two tiers architecture
‰ Three tiers architecture
‰ Multi-tiers architecture
© SUPSI-DTI
Silvia Giordano
Architecture 5
10/06/2004
Tiers
‰ One
‰
application is running on a single computer
‰ Two
‰
tier
tiers
application is running on two computers
‰ Three
‰
tiers
add a middle layer
‰ n-tiers
‰
© SUPSI-DTI
unlimited number of programs to run simultaneously
Silvia Giordano
10/06/2004
Architecture 6
3
Overview
‰Concept
of tiers
‰The ancestors of the client/server
architectures
‰The current three tiers architecture
‰Multi-tiers architectures
‰ practical example
© SUPSI-DTI
Silvia Giordano
Architecture 7
10/06/2004
The ancestors
‰ Mainframe
‰
‰
architecture
centralized intelligence
Users with simple terminals
‰ File-sharing
‰
‰
‰
© SUPSI-DTI
architecture
server downloads files from the shared location to
the desktop environment.
user jobs run (including logic and data) in the
desktop environment
for low usage
Silvia Giordano
10/06/2004
Architecture 8
4
Client/Server model
Client/server paradigm
❒ standard
❒ proprietary
Client must contact server
❒ server process must first be running
❒ server must have created socket (door) that welcomes client’s
contact
Client contacts server by:
❒ creating client-local socket
❒ specifying IP address, port number of server process
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 9
Main components of C/S model
‰A
presentation component:
‰
‰A
business component:
‰
‰A
perform some type of data manipulation.
data access component:
‰
© SUPSI-DTI
presents information to an external source and obtains
input from that source.
interfaces either with a data storage system such as
database systems or hierarchical file systems, or with
some other type of external data source as a data
feed or an external application system.
Silvia Giordano
10/06/2004
Architecture 10
5
One Tier Architecture
‰ Pros:
‰
‰
‰
easier management
easier control
more secure
‰ Cons:
‰
‰
‰
© SUPSI-DTI
scalability
portability
lack of flexibility
Silvia Giordano
10/06/2004
Architecture 11
Two Tier Architecture
‰ typical
client/server
architecture
‰ pros
‰
‰
‰
‰
© SUPSI-DTI
faster development
and deployment of
applications
hardware-independent
database systems
small servers
fat client (Javaapplets)
Silvia Giordano
10/06/2004
Architecture 12
6
‰ cons
‰
‰
‰
‰
‰
© SUPSI-DTI
Two Tier Architecture
worst security,
reliability, scalability,
and control
effective for simple
applications
client application must
enforce its own
security process
each database must
also enforce its own
security process
scalability
Silvia Giordano
10/06/2004
Architecture 13
From Two To Three Tier Architecture
‰
‰
‰
‰
‰
third (middle) tier server between
client and server
effective distributed client/server
design with hidden complexity
flexibility, maintainability,
reusability: provides separate
process management
scalability: can handle large
number-of-users
functions : queuing, application
execution, and database staging
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 14
7
Overview
‰Concept
of tiers
‰The ancestors of the client/server
architectures
‰The current three tiers architecture
‰Multi-tiers architectures
‰ practical example
© SUPSI-DTI
Silvia Giordano
Architecture 15
10/06/2004
Three Tier Architecture
‰ Client/server
‰
‰
‰
© SUPSI-DTI
model sub-divided into:
the data layer
the logic layer, or middle-tier (difference with 2-tiers)
the presentation layer, or client
Silvia Giordano
10/06/2004
Architecture 16
8
Three Tier Architecture
‰ fat
clients are
splitted into two
pieces :
‰
‰
a thin client
the application
logic, running on a
server
‰ easy
deployment of
simple clients
‰ logic is centralized
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 17
Different Three Tier Architecture
‰ Three
tier with TP monitor technology
‰ Three tier with message server
‰ Three tier with an application server
‰ Three tier with an ORB architecture
‰ Distributed/collaborative enterprise
architecture
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 18
9
Three tier with TP monitor technology
‰ Transaction
Processing (TP) monitor (middle
tier)
‰ message queuing, transaction scheduling, and
prioritization service
‰ client connects to the TP monitor
‰ the transaction is handled by TP monitor (client
is not blocked)
‰ effective for scalability
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 19
Three tier with message server
‰ intelligent
messages
‰ messages = headers (with priority information),
address number and identification number
‰ prioritized and processed asynchronously
‰ good solutions for wireless infrastructures
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 20
10
Three tier with an application server
‰ main
body of an application server to run on a
shared host
‰ smaller client
‰
‰
© SUPSI-DTI
more secure
more scalable
Silvia Giordano
10/06/2004
Architecture 21
Three tier with an ORB architecture
‰ support
distributed objects
‰ two prominent distributed object technologies:
‰
‰
© SUPSI-DTI
Common Object Request Broker Architecture
(CORBA)
COM/DCOM
Silvia Giordano
10/06/2004
Architecture 22
11
Distributed/collaborative enterprise
architecture
‰ based
on Object Request Broker
‰ enhanced by using shared, reusable business
models (not just objects) on an enterprise-wide
scale
‰ enterprise is a system comprised of multiple
business systems or subsystems
‰ improve effectiveness organizationally,
operationally, and technologically
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 23
Three Tiers Architecture advantages
‰ pros
of both one-tiered approach and the two-tiered
approach
‰ flexible architecture
‰ Object reuse
‰ Easier system maintenance
‰ More effective use of data and networks
‰ Higher developer productivity through specialization
‰ new perspectives of computational work in
methodological and also in production views: multi-tiers
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 24
12
Comparison of Tiers Architectures
Architecture
One tier
Two tiers
Three tiers
N tiers
© SUPSI-DTI
Silvia Giordano
Pros
Simple
Very high performance
Self-contained
Clean, modular design
Less network traffic
Secure algorithms
Can separate UI from business logic
Can separate UI, logic, and storage
Reliable, replicable data
Concurrent data access via
transactions
Efficient data access
Support multiple applications more
easily
Common protocol/API
Cons
No networking -- can't access remote
services Potential for spaghetti
code
Must design/implement protocol
Must design/implement reliable data
storage
Need to buy database product
Need to hire DBA
Need to learn new language (SQL)
Object-relational mapping is difficult
Quite inefficient
Must learn API (CORBA, RMI, etc.)
Expensive products
More complex; thus, more potential
for bugs
Harder to balance loads
Architecture 25
10/06/2004
Overview
‰Concept
of tiers
‰The ancestors of the client/server
architectures
‰The current three tiers architecture
‰Multi-tiers architectures
‰ practical example
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 26
13
Applicazioni multi-tier: distribuzione delle
risorse
‰ Il
concetto di base delle applicazioni multi-tier
è la distribuzione delle risorse (interfaccia,
computazioni, dati) fra varie macchine
‰ Ogni tier accumuna componenti software
uniformi
‰ Esempio tipico: applicazioni client-server (2tier: uno è il client, l’altro il server)
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 27
Applicazioni multi-tier
‰ Le
applicazioni 2-tier erano le più diffuse nel
passato
‰ Oggi la tendenza è di usare applicazioni 3-tier o
4-tier:
‰
‰
‰
‰
© SUPSI-DTI
Interfaccia utente, sul client
[protocollo standard, per esempio via web]
Logica di business, sul server
Dati di impresa, su un DBMS
Silvia Giordano
10/06/2004
Architecture 28
14
Applicazioni multi-tier
Macchina dell’utente finale
(client)
Interfaccia utente
Gestore protocollo
}
Server di applicazioni
Logica di business
Dati
© SUPSI-DTI
Silvia Giordano
Server dati
Architecture 29
10/06/2004
Applicazioni multi-tier
Interfaccia utente
‰
‰
Gestore protocollo
‰
Logica di business
‰
Dati
© SUPSI-DTI
Silvia Giordano
10/06/2004
Thin client: GUI basata su
FORM HTML
Applet: GUI fornita da un’applet
scaricata via web
Rich/thick client: GUI fornita
da un’applicazione stand-alone,
che però comunica tramite il
protocollo dato con il server
Batch/Poor client: interfaccia a
linea di comando, fornita da
un’applicazione stand-alone come
sopra
Architecture 30
15
Applicazioni multi-tier
Interfaccia utente
‰
Gestore protocollo
‰
Logica di business
‰
Dati
‰
© SUPSI-DTI
Silvia Giordano
Web-based: le comunicazioni con
la UI sono trasportate come
pacchetti HTTP
(GET/POST/PUT)
XML-based: le comunicazioni con
la UI sono trasportate come
messaggi SOAP
Custom: le comunicazioni con la
UI sono trasportate secondo un
protocollo privato (via socket)
Altro: (CORBA, protocolli
specifici di un dominio)
Architecture 31
10/06/2004
Applicazioni multi-tier
Interfaccia utente
Gestore protocollo
Logica di business
Dati
© SUPSI-DTI
Silvia Giordano
10/06/2004
‰ Applicazione
all-in-one: server
tradizionale
‰ Applicazione basata su Enterprise
beans: entity beans, session
beans, ecc.
‰ Applicazione basata su Web
components: servlet, JSP
‰ Applicazione basata su Web
services: componenti JAX-RPC
Architecture 32
16
Applicazioni multi-tier
Interfaccia utente
‰ Un
‰
Gestore protocollo
‰ Un
‰
‰
Logica di business
‰
qualunque DBMS relazionale
Per cui sia disponibile un driver
JDBC
DB specializzato
DB orientato agli oggetti
DB semistrutturato
…
‰ Un
legacy system con funzione di
data warehouse
Dati
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 33
Applicazioni multi-tier via web
‰ Usare
come protocollo di comunicazione la
tecnologia web presenta molti vantaggi pratici
‰
‰
‰
© SUPSI-DTI
È possibile realizzare applicazioni accessibili con un
semplice browser
I task di formattazione vengono lasciati al linguaggio
di markup (HTML+CSS, WML, ecc.)
Rimane possibile creare rich client, fornendo così vari
livelli di interazione per gli stessi servizi
Silvia Giordano
10/06/2004
Architecture 34
17
Applicazioni multi-tier via web
© SUPSI-DTI
Silvia Giordano
Architecture 35
10/06/2004
Applicazioni multi-tier via web
Interfaccia utente
‰
tecnologie più comunemente usate
per applicazioni multi-tier via web
con J2EE:
‰
Gestore protocollo
‰
‰
Logica di business
‰
‰
Dati
© SUPSI-DTI
Silvia Giordano
10/06/2004
Interfaccia utente basata su web
Tomcat o application server analoghi
come gestore di protocollo
Logica di business basata su Servlet o
JSP
Dati accessibili tramite JDBC
L’uso di tecnologie basata su Java
e/o open source ci garantisce la
durata dell’investimento
Architecture 36
18
Overview
‰Concept
of tiers
‰The ancestors of the client/server
architectures
‰The current three tiers architecture
‰Multi-tiers architectures
‰ practical example
© SUPSI-DTI
Silvia Giordano
Architecture 37
10/06/2004
Esempio1: Forum via servlet
Directory
Dati
Utente
Web Server
Applet
Servlet
Browser
DBMS
JDBC
Dati
magazzino
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 38
19
Esempio1: Forum via cgi
Directory
Dati
Utente
Web Server
javascript
CGI
Browser
DBMS
ODBC/DBI
Dati
magazzino
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 39
Esempio2 H2S: Un sistema proprietario
da HTTP a SMS
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 40
20
Physical Architecture
Silvia Giordano
M
© SUPSI-DTI
S
/G
IN
S2
ET
N
R
TE
TS
PO
S1
Architecture 41
10/06/2004
Logical Architecture
WEB
httpd
HTTP
AS
H2Sd
checker
listener
H2S
client
SMS
gateway
smsq
smss
H2S receiver
SMS
Browser
SMS
IP
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 42
21
Esempio2: H2S via servlet
Web
HTTP
browser
jk
Controller
Jsp
Servlet
DS
LDAP
smsq
smsSender H2SServer
© SUPSI-DTI
Silvia Giordano
H2S
H2S
Client
DB
JDBC
Application Server
Architecture 43
10/06/2004
Esempio2: H2S via CGI
HTTP
Web
browser
cgi
CGI
application
smsq
H2S
smsSender H2SServer
© SUPSI-DTI
Silvia Giordano
10/06/2004
H2S
Client
DS
LDAP
DB
JDBC
Application Server
Architecture 44
22
Architecture CGI
DB
http
Web cgi CGI
browser
smsq
H2S
smsSender H2SServer
© SUPSI-DTI
Silvia Giordano
H2SClient
Architecture 45
10/06/2004
Components Role
‰
Web
Access Functionality
‰ UnSafe Document Repository (imgs,..)
‰
‰
Application Server
Dynamic Presentation
‰ Check Controls
‰ Business Logic
‰ Security
‰ Data Access Functionality
‰
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 46
23
Application Server
‰ Controller
‰
Manages requests coming from the access point
(e.g. Web)
‰ JSP
‰
© SUPSI-DTI
Presentation Layer: it is implemented as an
exetension of HttpServlet: compiled at
RunTime
Silvia Giordano
10/06/2004
Architecture 47
Application Server
‰ Servlet
‰
‰
Action
Actions triggered by events: used for logic and
presentation
PreCompiled
‰ Classes
‰
‰
© SUPSI-DTI
Implement Business Logic
PreCompiled
Silvia Giordano
10/06/2004
Architecture 48
24
Applet & Servlet
‰
Le servlet sono per certi versi analoghe alle
applet
Le servlet stanno a un application server come le
applet stanno a un browser
‰ In entrambi i casi, un contenitore estende le proprie
capacità caricando componenti esterni: si tratta quindi
di plug-in
‰
‰
Le applet risiedono normalmente
‰
‰
‰
© SUPSI-DTI
Sul server, da cui vengono recuperate via HTTP
Nella cache locale del browser
Le servlet risiedono normalmente sul server, in un’area nota
all’application server
Silvia Giordano
Architecture 49
10/06/2004
Applet & Servlet
‰ Le
‰
‰
‰
© SUPSI-DTI
applet si usano spesso senza servlet
applet che non necessitano di processing
server-side: ricevono un po’ di parametri
all’avvio, e si limitano a mostrarli
in altri casi, le applet si collegano a un server
(non servlet) scritto in Java o altri linguaggi, e
usano un protocollo privato
volendo, le applet possono comunicare con il
server via HTTP (simulano una FORM)
Silvia Giordano
10/06/2004
Architecture 50
25
Applet & Servlet
‰ Le
‰
‰
‰
© SUPSI-DTI
servlet si usano spesso senza applet
spesso processano input proveniente da FORM
tradizionali
in altri casi, i dati possono essere generati da
una pagina con Javascript, memorizzati in campi
hidden di una FORM “invisibile” e inviati al
servlet
è anche possibile che un servlet processi input
proveniente da altre sorgenti
Silvia Giordano
Architecture 51
10/06/2004
Applet & Servlet
‰ Applet
e servlet si possono anche usare
insieme (come nel nostro esempio)
‰
‰
‰
‰È
© SUPSI-DTI
l’applet raccoglie e pre-elabora i dati, offrendo
una bella GUI all’utente
quando i dati sono pronti, li manda al server via
HTTP
il server li passa alla servlet per l’elaborazione
server-side
però un uso poco comune
Silvia Giordano
10/06/2004
Architecture 52
26
Differenza fra Servlet e CGI
‰ Gli
script CGI vengono eseguiti dal S.O.,
quindi sono potenzialmente meno portabili
‰ Le Servlet vengono eseguite dalla JVM
integrata nell’application server, quindi sono
“isolate” dal S.O. e dunque più portabili
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 53
Differenza fra Servlet e CGI
‰ Gli
script CGI vengono caricati ed eseguiti
una volta per ogni richiesta – quindi, il costo
di avvio (latenza) è alto
‰ Le Servlet vengono caricate solo una volta;
poi si crea un Thread (di Java) per ogni
richiesta – operazione meno costosa, e
dunque si ha una latenza più bassa
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 54
27
Differenza fra Servlet e CGI
‰ Gli
script CGI possono essere scritti in
qualunque linguaggio: potete scegliere il
linguaggio più adatto al particolare scopo
‰ Le Servlet devono essere scritte
necessariamente in Java: spesso va bene,
ma a volte non è conveniente
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 55
Differenza fra Servlet e CGI
Il protocollo CGI è supportato da tutti i Web
server (anche se a volte con qualche piccola
differenza)
‰ Le Servlet sono supportate solo da alcuni Web
server (quelli che fungono da application server)
‰
c’è comunque una buona scelta di prodotti commerciali
‰ È sempre possibile affiancare un application server a
un web server, anche su due porte diverse sulla stessa
macchina fisica
‰
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 56
28
Server che supportano le Servlet
Versione Servlet
supportata
Versione JSP supportata
Apache & Sun – Tomcat
2.4
2.0
Apache + Jserv
2.0
1.0
Borland AppServer
2.3
1.2
IBM WebSphere Application Server
2.4
2.0
2.2
1.1
2.4
2.0
Prodotto
IONA iPortal Application Server
(ora migrati su Jboss)
javaSystem Application Server 8
... e parecchi altri …
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 57
Struttura delle Servlet
‰
Le Servlet sono classi Java
che implementano
l’interfaccia
javax.servlet.Servlet
Una classe può implementare
Servlet direttamente
‰ Ma più comunemente
estende HttpServlet
‰
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 58
29
Dialogo con le Servlet
‰ Il
dialogo fra Servlet e il
browser è di tipo
client/server
‰ client
‰
→ server
interfaccia ServletRequest
‰ server
‰
© SUPSI-DTI
Silvia Giordano
→ client
interfaccia ServletResponse
Architecture 59
10/06/2004
Metodi di Servlet
Metodo
Descrizione
init()
Inizializza la servlet
(e alloca risorse)
service()
Serve una richiesta
destroy()
Elimina la servlet
(e libera le risorse)
getServletInfo()
Restituisce informazioni sulla
servlet (una stringa)
getServletConfig()
Restituisce la configurazione
della servlet
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 60
30
Ciclo di vita di una Servlet
‰
‰
‰
Al primo caricamento
viene chiamato init()
Per ogni richiesta,
viene chiamato il
metodo service()
Alla fine, viene
chiamato destroy()
‰
© SUPSI-DTI
es: quando il container
termina
Silvia Giordano
10/06/2004
Architecture 61
Servlet e HttpServlet
L’interfaccia delle Servlet è piuttosto
generica…
‰ GenericServlet la implementa e la estende con
metodi di utilità
‰
‰
‰
Gestione parametri, gestione contesto, file di log
La classe di sistema HttpServlet specializza
GenericServlet per il protocollo HTTP
‰
© SUPSI-DTI
ci sono HttpServletRequest e
HttpServletResponse associate
Silvia Giordano
10/06/2004
Architecture 62
31
Un esempio (una HttpServlet)
public class SimpleServlet extends HttpServlet {
public void doGet(HttpServletRequest richiesta,
HttpServletResponse risposta)
throws ServletException, IOException
{
String titolo = “Risposta dalla mia Servlet";
risposta.setContentType("text/html");
PrintWriter out = risposta.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(titolo);
out.println("</TITLE></HEAD><BODY>");
out.println("<H1>" + titolo + "</H1>");
out.println("<P>... resto della pagina ...");
out.println("</BODY></HTML>");
out.close();
}
© SUPSI-DTI
Silvia Giordano
10/06/2004
}
Architecture 63
Gestione della persistenza
‰È
importante ricordare che ogni singola
richiesta HTTP viene trattata
separatamente da tutte le altre
‰
‰
© SUPSI-DTI
come fa una povera servlet a gestire sessioni
che comprendono più di una richiesta?
come fanno più servlet che costituiscono una
sola applicazione a passarsi dati e comunicare
fra di loro?
Silvia Giordano
10/06/2004
Architecture 64
32
Gestione della persistenza
‰ Abbiamo
‰
sostanzialmente due vie
Gestire manualmente la persistenza
‰Adatto
quando i dati da rendere persistenti sono pochi o
poco strutturati
‰Bastano in genere poche righe di codice
‰
Affidarci agli Scope Object offerti dal framework
‰Adatto
per usi sofisticati
‰Consente vari livelli di persistenza
© SUPSI-DTI
Silvia Giordano
Architecture 65
10/06/2004
Gestione manuale della persistenza
‰ Usando
‰
‰
© SUPSI-DTI
i cookie
la servlet scrive i dati che
vuole rendere persistenti
tramite i cookie
successive richieste – alla
stessa servlet o a servlet
diverse – si porteranno
dietro i cookie scritti nel
client
Silvia Giordano
10/06/2004
‰ Usando
‰
‰
‰
sessionID
la servlet associa un
identificatore unico ad
ogni sessione
il sessionID viene usato
come chiave per accedere
a un DB sul server
successive richieste
accedono al DB con la
stessa chiave
Architecture 66
33
Gestione dei cookie – scrittura
Si crea un cookie con
1.
cookie = new Cookie(nome,valore);
Si impostano gli attributi del cookie
2.
cookie.setComment(...);
cookie.setDomain(...);
cookie.setMaxAge(...);
...eccetera
Si invia il cookie con la risposta
3.
risposta.addCookie(cookie);
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 67
Gestione dei cookie – lettura
1.
Si recuperano i cookie dalla richiesta
k = rich.getCookies();
2.
Si cerca il “nostro” cookie
for (i=0; i<k.length; i++)
if (k[i].getName().equals(“nostro”))
{ nostro=k[i]; break; }
3.
Si estrae il valore memorizzato nel cookie
(se lo abbiamo trovato)
valore=nostro.getValue();
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 68
34
Gestione del session ID
1.
Si estrae la sessione dalla richiesta,
creandola se necessario (primo accesso):
HttpSession sess=
richiesta.getSession(true);
2.
Si memorizzano/leggono i dati:
a.
b.
© SUPSI-DTI
da un DB, usando sess.getID() come chiave
dalla sessione stessa, usando
sess.putAttribute(chiave,valore) e
sess.getAttribute(chiave)
Silvia Giordano
Architecture 69
10/06/2004
Gli Scope Objects
‰
Ciascun componente web (servlet o pagine JSP,
che vedremo più avanti) può accedere a 4
Scope Objects:
ServletContext – il container
‰ HttpSession – la sessione corrente
‰ HttpServletRequest – la richiesta corrente
‰ JspContext – la pagina corrente (per JSP)
‰
‰
Ogni Scope Object fornisce metodi
putAttribute() e getAttribute() per
memorizzare a recuperare oggetti arbitrari
associati a chiavi alfanumeriche
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 70
35
ServletContext
‰ ServletContext
rappresenta il container che sta
eseguendo la Servlet corrente (e, di solito, tutte
le altre)
‰
‰
Il ServletContext è unico all’interno della JVM
Alcuni container offrono varie configurazioni:
‰Una
sola JVM per tutte le servlet: ServletContext è globale,
come pure i dati memorizzati in esso
‰Più JVM, ciascuna delle quali esegue più servlet: ci sono più
ServletContext; per avere un contesto globale occorre usare
un DB esterno
© SUPSI-DTI
Silvia Giordano
Architecture 71
10/06/2004
ServletContext
Per ottenere il ServletContext, basta chiamare il
metodo della servlet getServletContext()
‰ Da tenere a mente: il ServletContext è
condiviso; più servlet in esecuzione allo stesso
tempo potrebbero accedere concorrentemente
ai dati…
‰ Soluzione: usare i costrutti Java per la mutua
esclusione (synchronized)
‰
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 72
36
HttpSession
Una sessione può persistere per un periodo di
tempo specificato, e coprire più richieste HTTP
(e anche più visite distinte)
‰ Solitamente, una sessione è associata a un
singolo utente dell’applicazione web
‰ Il framework si occupa della persistenza della
sessione
‰
Usando cookie se il browser li supporta
‰ Tramite URL rewriting altrimenti
‰
© SUPSI-DTI
Silvia Giordano
Architecture 73
10/06/2004
HttpSession
Per ottenere l’HttpSession, basta chiamare il
metodo getSession() della richiesta (come
già visto)
‰ Anche l’HttpSession potrebbe essere usato
concorrentemente, se abbiamo Servlet che
fanno partire nuovi Thread
‰ Se si usa URL rewriting, bisogna avere cura di
chiamare encodeURL() su ogni URL che viene
inclusa nella risposta!
‰
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 74
37
‰ Notifiche
‰
Argomenti avanzati
Molte operazioni sulle o delle servlet generano eventi
(modello publish/subscribe)
‰Caricamento
‰Creazione
e scaricamento di una servlet
o associazione di una sessione
‰ecc.
‰
‰
© SUPSI-DTI
Altre componenti web possono registrare il loro
interesse ad essere notificate quando l’evento x si
verifica, implementando l’interfaccia xListener
Uso molto raro…
Silvia Giordano
Architecture 75
10/06/2004
Argomenti avanzati
‰ Re-routing,
‰
inclusione e filtri
È possibile alterare il cammino “naturale” di
richieste e risposte
‰Re-routing:
le richieste possono essere inoltrate da
una servlet a un’altra (o a un CGI!)
‰Inclusione: la risposta di una servlet (o CGI) può
essere inclusa in quella di un’altra
‰Filtri: la richiesta o risposta può passare attraverso
uno o più post-processori, che la possono modificare
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 76
38
Caratteristiche delle Servlet
‰
Velocità
‰
‰
Portabilità
‰
‰
molto veloci, il codice è compilato, e una volta
caricato viene tenuto in memoria dal server – bassa
latenza e alta banda
ottima – Java è sempre lo stesso ovunque
Fattori temporali
‰
© SUPSI-DTI
provare una Servlet richiede (i) modificare il codice
(ii) compilare il codice (iii) riconfigurare il web
server: non è adatto alla prototipazione rapida
Silvia Giordano
10/06/2004
Architecture 77
Caratteristiche delle Servlet
‰
Competenze
‰
‰
‰
con poche aggiunte, basta conoscere Java
Per servlet complesse, occorre conoscere Java bene…
Supporto
‰
‰
‰
© SUPSI-DTI
il supporto da parte di terzi è ancora un po’ limitato (ma in
crescita: si aspetta che diventi standard in Apache)
la tecnologia è portabile, ma al momento dipende molto da
Sun/IBM/Borland/Oracle
Ci sono ambienti di sviluppo molto belli e completi (inclusi
Eclipse e IBM WebSphere Studio)
Silvia Giordano
10/06/2004
Architecture 78
39
Deployment
‰ Punto
dolente!
‰ Ogni server ha modalità
proprie per la
configurazione
‰ Esistono però formati
standard di deployment
‰
© SUPSI-DTI
Silvia Giordano
Sono parte delle specifiche
J2EE
Architecture 79
10/06/2004
Confronto fra CGI, Perl e Servlet
Caratteristica
CGI
mod_perl
Servlet
Portabile fra web server
si
no (solo Apache)
si (limitata)
Portabile fra S.O.
si (con poche varianti)
parziale
si
Un processo per ogni
richiesta
si
no
no
Perdite di memoria
(leak)
no
si
no (in teoria)
Linguaggio
C, Perl, sh, ecc.
Perl
Java
Tipi stretti
no
no
si
Persistenza
no (va fatta a mano)
no (va fatta a mano)
si
Persistenza verso DB
no (va fatta a mano)
si
si
Portabilità fra DB
no (ad hoc)
no (ad hoc)
si (via JDBC)
Controllo dei diritti
no (solo via S.O.)
no (solo via S.O.)
si (diritti Java)
Supporto da IDE
no
no
si (es.: WebSphere)
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 80
40
JavaServer Pages – JSP
‰
‰
‰
Le pagine JSP sono normali
documenti testuali
Contentono un mix di markup
standard (es., HTML) e di
istruzioni speciali
Concettualmente simili alle
pagine ASP (ma più potenti e
portabili)
© SUPSI-DTI
Silvia Giordano
Architecture 81
10/06/2004
JSP e Servlet
Le Servlet funzionano bene per pagine con
tanto contenuto e poca “grafica”
‰ Però tutta la pagine deve essere generata in
Java...
‰
‰
‰
...bisogna mettere mano al codice Java anche solo
per cambiare il colore di sfondo!
JSP (come ASP) immerge codice (Java) in
pagine HTML
‰
© SUPSI-DTI
separazione fra presentazione e logica
Silvia Giordano
10/06/2004
Architecture 82
41
Esempio: una pagina JSP
<HTML>
<%@ page language=“java” import=“it.netikos.JSP” %>
<H1>Benvenuto!</H1>
Oggi è
<jsp:useBean id=“calendario” class=“JSPCalendar” />
<UL>
<LI>giorno: <%= calendario.getDayOfMonth() %>
<LI>mese: <%= calendario.getMonth() %>
<LI>anno: <%= calendario.getYear() %>
</UL>
<% if (calendario.get(Calendar.AM_PM)==Calendar.AM) { %>
buon giorno!
<% } else { %>
buona seeeeeraaaaa...
<% } %>
</HTML>
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 83
Elementi di una pagina JSP
‰
Una pagina JSP può contenere cinque tipi
di elementi:
1.
2.
3.
4.
5.
© SUPSI-DTI
direttive JSP, fra <%@ e %>
azioni JSP, fra <jsp: e />
(ma vedremo più avanti una versione estesa)
espressioni, fra <%= e %>
scriptlet, ovvero codice fra <% e %>
parti fisse, tutto il resto
Silvia Giordano
10/06/2004
Architecture 84
42
Direttive JSP
‰ Ci
‰
‰
‰
© SUPSI-DTI
sono tre tipi di direttive:
di pagina (linguaggio, dimensioni buffer,
trattamento errori, ecc.)
include (per inserire altri file dentro la pagina)
taglib (estensioni del linguaggio JSP)
Silvia Giordano
Architecture 85
10/06/2004
Azioni JSP
(istanzia un bean e gli
assegna un nome)
‰ jsp:setProperty (assegna un valore a una
proprietà di un bean)
‰ jsp:getProperty (legge il valore di una
proprietà, lo converte in stringa, e lo manda
in output)
‰ ... e alcune altre
‰ jsp:useBean
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 86
43
Espressioni
fra <%= e %> viene valutata
‰ Il valore ottenuto viene converito in stringa
‰ La stringa viene sostituita al posto di <%= ...
%>
‰ L’espressione
© SUPSI-DTI
Silvia Giordano
Architecture 87
10/06/2004
Scriptlet
‰ Il
codice fra <% e %> viene eseguito
‰ L’immersione può anche essere parziale,
come nel nostro esempio precedente:
<% if (calendario.get(Calendar.AM_PM)==Calendar.AM) { %>
buon giorno!
<% } else { %>
buona seeeeeraaaaa...
<% } %>
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 88
44
Trattamento delle pagine JSP
‰ Ma,
esattamente, cosa
accade quando un web
server deve trattare una
pagina JSP?
‰ Quali
caratteristiche
derivano alle JSP da
questo trattamento?
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 89
Trattamento delle pagine JSP
‰
‰
‰
La prima volta che al server viene richiesta una
certa pagina JSP, oppure se la pagina è stata
modificata rispetto all’ultimo accesso
precedente, la pagina viene compilata e
diventa una Servlet (.java)
La Servlet viene a sua volta compilata e
produce un file eseguibile (.class)
Il codice del .class viene caricato nel server,
viene eseguito, e tenuto pronto per eventuali
altre richieste successive
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 90
45
Trattamento delle pagine JSP
Container
p.class
Java compiler
client
client
client
p.java
JSP compiler
p.jsp
p.jsp
© SUPSI-DTI
Silvia Giordano
Spazio web
10/06/2004
Architecture 91
Caratteristiche di JSP
‰ Ereditano
tutte le buone caratteristiche delle
Servlet
‰ In più, rendono facile fare modifiche:
‰
‰
© SUPSI-DTI
la compilazione è automatica – si può fare
prototipazione rapida
se si vuole modificare l’aspetto delle pagine HTML,
non c’è bisogno di toccare il codice – il livello di
competenze richiesto è più basso
Silvia Giordano
10/06/2004
Architecture 92
46
Uso tipico di JSP
Il merito principale delle JSP è di separare la
presentazione (parte HTML) dalla logica
applicativa (parte codice)
‰ Per sfruttare al meglio questa separazione, è
bene ridurre al minimo le scriptlet <% … %>, e
spostare tutta la logica all’interno di JavaBean
appropriati
‰ Implementazione in stile MVC (Model-ViewController)
‰
© SUPSI-DTI
Silvia Giordano
Architecture 93
10/06/2004
Uso tipico di JSP
L’architettura MVC prevede un modello astratto
della realtà che si vuole modellare (M)
‰ Separatamente, uno strato di software legge lo
stato del modello e ne produce una vista (V)
‰ Analogamente, uno strato di software detto
controller interpreta le azioni dell’utente e le
effettua apportando modifiche al modello (C)
‰ Nel nostro caso, M è implementato come un
insieme di Javabean; pagine JSP fungono da V e
C
‰
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 94
47
Uso tipico di JSP
‰
Con una chiara separazione fra
presentazione e logica applicativa:
La pagina JSP può essere creata
inizialmente dal programmatore, ma poi
migliorata graficamente e mantenuta da
un designer HTML
‰ Il programmatore può cambiare il
comportamento dell’applicazione
modificando i bean, senza più toccare la
pagina JSP
‰
© SUPSI-DTI
Silvia Giordano
Architecture 95
10/06/2004
H2S Architecture via JSP (1)
http
Web
jk
Controller
browser
Jsp
Servlet
smsq
smsSender H2SServer
© SUPSI-DTI
Silvia Giordano
10/06/2004
DB
jdbc
H2S
H2SClient
Architecture 96
48
H2S Architecture via JSP (2)
http
Web
jk
Controller
browser
Jsp
DB
smsq
jdbc
smsSender H2SServer
© SUPSI-DTI
Silvia Giordano
H2SClient
H2S
Architecture 97
10/06/2004
Components Role
‰
Web/Application Server
Access Functionality
‰ UnSafe Document Repository (imgs,..)
‰ Application Server CGI
‰
Dynamic Presentation
‰ Check Controls
‰ Business Logic
‰ Security
‰ Data Access Functionality
‰
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 98
49
JavaServer Faces
JavaServer Faces (JSF) è una tecnologia di
interfaccia utente per applicazioni Web, basata
sulle tecnologie tipiche di Java (servlet e JSP)
‰ In particolare, fornisce una tag library che
mette a disposizione molti tag per la
costruzione di interfacce grafiche, la
validazione dell’input, e il routing degli eventi
‰
© SUPSI-DTI
Silvia Giordano
Architecture 99
10/06/2004
JavaServer Faces
I tag JSF vengono tradotti con opportuni
elementi di FORM HTML (o, potenzialmente,
con altri meccanismi adatti allo scopo)
‰ I FORM così generati sono dinamici
‰
‰
‰
Componenti GUI possono apparire all’interno di
<c:if>, <c:forEach>, ecc.
Il framework si occupa del re-rendering e del
dispatching
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 100
50
References
‰
Java Servlet 2.4 Specification
‰
Java Servlet Web site
‰
Java Servlet Technology
‰
‰
‰
http://java.sun.com/products/servlet/download.html#specs
http://java.sun.com/products/servlet
Capitolo 11 di E. Armstrong, J. Ball et al., “The J2EE 1.4 Tutorial”,
Novembre 2003
M. Hall, J. Brown, “Core Servlets Java and JavaServer
Pages, vol 1: Core Technologies”, 2nd edition
C. McClanaham, E. Burns, “JavaServer Faces Specification”, v1.0
JavaServer Face Web page
http://java.sun.com/products/jsf
© SUPSI-DTI
Silvia Giordano
10/06/2004
Architecture 101
51