Architetture N-tier: secondo livello
• Sviluppo di applicazioni accessibili da web
browser ed eseguite in server remoto
• Server può usare database etc. per accedere a dati
(mediante JDBC, vd. lucidi su architetture a 3 e N
livelli)
• Vedremo:
– Servlet
– Java Server Pages
• Ma prima: cenni ad HTTP e WWW (vedere altri
corsi per dettagli!!)
Laboratorio di Servizi Web - servlet Ardissono
1
World Wide Web
• Basata su modello client-server
• Lato Client
– WWW appare come enorme collezione di pagine
(statiche o dinamiche, multimediali e non, ...),
accessibili usando browser (Netscape, Microsoft
Explorer, Mosaic, …)
– pagine web legate mediante link, formano ipertesto
– NB: i link permettono di raggiungere da una pagina
web delle pagine situate su server diversi
• Lato Server
– Ogni sito Web ha processo server che ascolta su porta
TCP per ricevere richieste di connessione e gestirle
Laboratorio di Servizi Web - servlet Ardissono
2
Web Server
• Programma che gira su macchina server
– resta in ascolto di richieste
– ad ogni richiesta lancia azione per gestirla (recupera
pagina web, esegue programma sul server, …)
– restituisce al chiamante risultato (pagina richiesta,
risultato di esecuzione del programma, …)
• Web server più comuni
– Apache (disponibile per sistemi operativi diversi)
– Internet Information Server (IIS di Microsoft, per
Windows)
Laboratorio di Servizi Web - servlet Ardissono
3
HyperText Transfer Protocol (HTTP) - I
• Protocollo a livello applicativo (sopra TCP)
• Basato su due tipi di azioni
– richiesta da client a web server
– risposta da web server a client
• HTTP gestisce interazioni <richiesta - risposta>
–
–
–
–
client chiede connessione
stabilita la connessione, client effettua richiesta
server gestisce richiesta e invia risposta
connessione viene chiusa
NB: connessioni sempre iniziate da client e chiuse da
server
Laboratorio di Servizi Web - servlet Ardissono
4
HyperText Transfer Protocol (HTTP) - II
•
HTTP request: richiesta da client a server
– GET: richiesta di accedere a risorsa disponibile sul
server (pagina web, file, applicazione, …)
– HEAD: richiesta di leggere header di pagina web
– POST: invio dati a server (ad applicazione web)
–
•
(PUT, DELETE di documenti su server, …)
HTTP response: risposta da server a client
NB: Richieste HTTP effettuate normalmente da
browser. Però, HTTP protocollo testuale

ci si può connettere a server anche via telnet
1. telnet IP-address:port
2. GET resource
Laboratorio di Servizi Web - servlet Ardissono
5
HyperText Transfer Protocol (HTTP) - III
• HTTP request: richiesta da client a server
– Basata su specifica di IP-address: URL di
risorsa a cui si vuole accedere
• URL di pagina web
• URL di applicazione che gira su web server
•…
– Es: GET http://www.esempio.com/index.html
client richiede pagina index.html del server
www.esempio.com
Laboratorio di Servizi Web - servlet Ardissono
6
URL (ripasso)
• URL: Uniform Resource Locator
–
–
–
–
identificatore univoco della pagina su internet
protocol://IP-address:port/resourceName
http://130.192.241.1:10000/sweb40/prova.html
IP-address può essere sostituito da DNS name, se
disponibile e risolvibile (es: 130.192.241.1 è
speedy.unito.it)
– ftp://www.di.unito.it/liliana/pippo.txt
• URL usati per richiedere a web server di leggere
pagine
– accesso a pagine web
– usati nei link tra pagine
Laboratorio di Servizi Web - servlet Ardissono
7
HTTP Request: metodo GET
• GET IP-address
resourceName?param1=val1&…&paramN=valN
• Usato per richiedere risorse del server
– Es: GET http://www.esempio.com  accedo a pagina
index.html di web server www.esempio.com
• Specifica parametri: parameterName=value
– Es: GET http://www.esempio.com?nome=liliana
– Client inserisce in richiesta HTTP dati supplementari,
rappresentati come parametri che il server legge al
momento della ricezione della richiesta
Laboratorio di Servizi Web - servlet Ardissono
8
GET – specifica parametri
• Per effettuare richieste personalizzate: Web server
destinatario può usare valori di parametri per inviare
contenuti specifici
• Limitazioni
– Tipo di informazioni trasmissibile è limitato (molti
browser limitano lunghezza di URL+query a 255 caratteri)
– Trasmissione dati leggibile a tutti (non protetta)
– Specifica di HTTP 0.9 dice che GET non deve fare
aggiornamenti su server (idempotenza)
 Introdotto con HTTP 1.0 metodo POST per
richiedere risorse passando parametri complessi in
body di richiesta (vd dopo)
Laboratorio di Servizi Web - servlet Ardissono
9
HTTP Request: metodo HEAD
• Usato per richiedere solo header di risposta: es.
Content-Type, Content-Length, …
• Serve quando si vuole scoprire il tipo di risposta
che si otterrebbe facendo una GET o POST, prima
di eseguirla
Laboratorio di Servizi Web - servlet Ardissono
10
HTTP Response - I
Quando web server riceve HTTP request invia
– response header: specifica stato di risposta e
meta-informazioni che la descrivono
• Campi di content header: Date, ContentType, Expires (se Expires=Date, browser
non fa cache)
• Header contiene anche response code (200
se tutto Ok, 404 se file not found, …) che
descrive risposta (errori)
– contenuto di risorsa specificata in HTTP
request (es. pagina web richiesta)
Laboratorio di Servizi Web - servlet Ardissono
11
HTTP Response - II
• NB: se request è HEAD server invia solo
metainformazioni di risposta
• HTTP protocollo testuale  per scambiare
anche contenuti multimediali è stato
definito formato MIME
Laboratorio di Servizi Web - servlet Ardissono
12
Formato MIME
Multi-Purpose Internet Mail Extensions
• nato come estensione di protocollo di posta
elettronica, per trasmettere contenuti multimediali
• tra i tipi MIME: text/html, image/gif
• usato in HTTP per indicare tipo di contenuto
incluso in body di HTTP request e response
• Web server setta header MIME all’inizio di ogni
trasmissione
• Web browser usa header quando riceve risposta
per decidere come visualizzare dati del body
Laboratorio di Servizi Web - servlet Ardissono
13
HTTP Request: metodo POST
• POST IP-address
resourceName?param1=val1&…&paramN=valN
• permette di
– incapsulare messaggi costituiti da parti multiple in body
di richiesta
– specificare parametri in URL di richiesta, come GET
– Non ha vincolo di modifica dati su server (no
idempotenza)
• Può inviare a server quantità “illimitata” di dati
attraverso connessione a socket gestita come parte
della richiesta HTTP
Laboratorio di Servizi Web - servlet Ardissono
14
HTTP Request: metodo POST
• Usato per accedere a risorse dinamiche, che fanno
largo uso di dati in input per generare risposte
• Tipicamente si includono nel body della richiesta
dati utente raccolti mediante compilazione di
FORM HTML
Differenze tra GET e POST
GET trasmette parametri a server appendendoli a URL
( si può fare bookmark, dati sensibili!!!)
POST trasmette parametri inclusi in URL e in body di
richiesta ( no bookmark, ma dati protetti e di grandi
dimensioni)
Laboratorio di Servizi Web - servlet Ardissono
15
HTTP – Interazione con client
• HTTP stateless: gestisce solo interazioni del tipo
<richiesta - risposta>
•  usando HTTP da solo non si gestiscono
agevolmente applicazioni web che richiedono più
scambi di informazioni tra browser e server
• Serve
– Session tracking (es. Cookies): riconoscimento che
richieste successive provengono da uno stesso browser
– Mantenimento sessione utente: applicazione server-side
deve mantenere stato di interazione con client
• Tecnologie server-side (es. Servlets, JSP)
sviluppate per gestire interazioni durature con
client
Laboratorio di Servizi Web - servlet Ardissono
16
Pagine web statiche e dinamiche
Inizialmente, su web, solo pagine statiche (HTML)
 client richiede a web server pagina (specificando
URL) e server recupera pagina e invia a browser
Pagine dinamiche
– contenuto generato dinamicamente in base a dati forniti
da utente o altri parametri, o perchè dati cambiano nel
tempo (es. meteo)
– interazione con web server bidirezionale (non solo
lettura, anche inserimento dati)
 serve tecnologia server-side per generare pagine di
risposta a richieste utente
Laboratorio di Servizi Web - servlet Ardissono
17
Gestione richieste HTTP in web server - I
Web server sa solo ascoltare su porta HTTP e
inviare dati a client  gestisce richieste
delegando altro programma
Quando riceve HTTP request web server
• identifica tipo di programma necessario per gestire
richiesta
• Se necessario, carica ambiente runtime per
esecuzione richiesta
• lancia programma
• restituisce risultati a client tramite output stream
Laboratorio di Servizi Web - servlet Ardissono
18
Gestione richieste HTTP in web server - II
Identificazione ambiente di gestione della richiesta
tramite mapping (regole standard). Es:
– richieste di file con estensione .jsp indicano Java Server
Pages  serve ambiente di esecuzione di servlet java
– file richiesto è in directory cgi-bin  è un CGI script
 server lancia processo e carica interprete Perl
– pagine .html  non serve particolare ambiente
(statiche…)
– …
Laboratorio di Servizi Web - servlet Ardissono
19
Applicazioni server-side
Sono programmi come altri ma
• Li si deve poter invocare attraverso web server 
quando server riceve richiesta, deve poter
identificare ed eseguire programma richiesto
• Web server deve poter passare a programma
HTTP request (affinchè il programma la interpreti)
• Quando programma ha ottenuto risultato, li
impacchetta ed invia a web server che li spedisce a
client via HTTP
• In generale un’applicazione server-side è
composta di molte risorse, statiche (es. pagine
HTML) o dinamiche (programmi eseguibili)
Laboratorio di Servizi Web - servlet Ardissono
20
Applicazioni server-side – esempio in
ambiente Java
Applicazione web
Web Container
Web
server
HTTP
request
Risorse
statiche
HTTP
response
Web
browser
Servlet/JSP
instances
Risorse
statiche
Laboratorio di Servizi Web - servlet Ardissono
21
Tecnologie server-side: CGI - I
Common Gateway Interface
• nata per sviluppare programmi che fanno query a
database e restituiscono risultati a client
(domanda-risposta)
• supportata praticamente da tutti i web server
• programmi CGI possono essere scritti in molti
linguaggi diversi, ma il più usato è Perl
Laboratorio di Servizi Web - servlet Ardissono
22
Tecnologie server-side: CGI - II
• web server fa da gateway tra richiesta utente e dati
da consultare. Ad ogni richiesta da client
–
–
–
–
crea processo per ospitare programma
carica ambiente di esecuzione (interprete Perl,…)
passa un oggetto richiesta e invoca programma
al termine del programma, web server legge risposta e
invia a client
• Limitazioni
– poca scalabilità: creazione di un processo (caricamento
ambiente, etc.) per ogni HTTP request
– gestione di interazioni one-shot  uso di meccanismi
diversi per mantenere stato delle sessioni utente
Laboratorio di Servizi Web - servlet Ardissono
23
Proprietary web server APIs
• NSAPI (Netscape), ISAPI (Microsoft)
• Nate per risolvere problemi di efficienza di CGI
• permettono sviluppo di applicazioni web
– caricate nello stesso processo del web server
– capaci di servire richieste multiple senza creare processi
nuovi
• Svantaggi:
– API proprietari  applicazioni web non portabili da un
web server ad un altro
– problemi di gestione degli accessi in mutua esclusione a
variabili condivise
Laboratorio di Servizi Web - servlet Ardissono
24
Active Server Pages (ASP) - I
• Tecnologia basata su template: combina HTML,
scripting e componenti server-side in file che
rappresentano pagine dinamiche (.asp)
• Pagina ASP contiene
– parti (statiche) di visualizzazione dati (HTML)
– invocazioni di programmi server-side, effettuate usando
linguaggi di scripting quali JScript e VBScript
– invocazioni servono per recuperare risultati, poi inseriti
in pagina da visualizzare su browser utente
Laboratorio di Servizi Web - servlet Ardissono
25
Active Server Pages (ASP) - II
• Quando browser richiede pagina ASP, web server
compila pagina (template) e la esegue
• Risultato: pagina completa da visualizzare su
browser
• NB: componenti server-side possono essere scritte
in qualunque linguaggio
• Vantaggi: pagine browser-independent perchè
tutta la computazione è fatta su server
• Svantaggi: girano solo su web server Microsoft,
compilazione run-time è pesante
Laboratorio di Servizi Web - servlet Ardissono
26
Java servlets
Tecnologia server-side offerta in ambiente Java
• programma java che gestisce HTTP requests e
restituisce HTTP responses
• estende funzionalità di Web server permettendo
di gestire logica applicativa come programma. Es:
permette di gestire sessioni utente che includono
più HTTP requests e responses
• gestisce ogni HTTP request in thread separato
 parallelismo, ma in un’applicazione si può
mantenere copia unica di programma, i dati
generali di applicazione, ...
Laboratorio di Servizi Web - servlet Ardissono
27
Java Server Pages (JSP)
Tecnologia basata su template, simile a Microsoft
Active Server Pages, ma basata su compilazione
di pagine (vs. interpretazione)
• Java Server Page (file .jsp) include codice HTML,
codice Java e componenti JavaBean
• permette invocazione di componenti server-side
• risultati di invocazione inseriti in pagina per
visualizzazione su browser
• compilazione di pagina JSP genera Servlet  Java
Servlets è tecnologia sottostante, ma JSP facilitano
creazione di interfacce utente
Laboratorio di Servizi Web - servlet Ardissono
28
Applicazioni Web-based - requisiti
Requisiti
• Modello di programmazione ed API che
specifica come sviluppare applicazione
• Server-side runtime support: per gestire
comunicazione in rete ed eseguire programmi su
server
• Supporto al deployment: strumenti per
configurare componenti di applicazioni, installare
applicazioni su web server, ...
Laboratorio di Servizi Web - servlet Ardissono
29
Applicazioni Web-based in ambiente java
In ambiente java (J2EE)
• Java servlets e JSP: strumenti base per sviluppare
applicazioni (web components)
• applicazione web composta di Servlets, JSP,
librerie di classi, risorse statiche (HTML, XML,
…), immagini, ...
• Web Container: java runtime che ospita ed
esegue applicazioni web (crea, inizializza ed
invoca Servlet e JSP in seguito a HTTP requests)
• struttura di package standard per applicazioni e
file XML descrittori di property di applicazioni
Laboratorio di Servizi Web - servlet Ardissono
30
Struttura di applicazione Web-based Java
Applicazione web
Applicazione web
Java
Javaservlet
servlet
Java
Javaservlet
servlet
Java
Javaservlet
servlet
Java
Javaservlet
servlet
sweb5
JSP
JSP
Java
classes,
Java
classes,
Java
classes,
archives
archives
archives
sweb8
JSP
JSP
Java
classes,
Java
classes,
Java
classes,
archives
archives
archives
Deployment descriptor (web.xml)
Deployment descriptor (web.xml)
Web Container (es. Jakarta Tomcat)
Laboratorio di Servizi Web - servlet Ardissono
31
Servlet Java - I
• Programmi che girano in processo di web server e
agiscono come livello intermedio tra
– richieste provenienti da HTTP clients (web browser, ...)
– database e altre sorgenti informative gestite da server
• servlet caricate in processo web server da Web
Container, che interagisce con Servlet via Java
Servlet API
• esecuzione dura nel tempo: Servlet caricate da Web
Container, vivono finchè non vengono esplicitamente
scaricate  possono gestire innumerevoli richieste da
parte dei client
Laboratorio di Servizi Web - servlet Ardissono
32
Servlet Java - II
• per ogni HTTP request inviata a web server
ospitante
– leggono dati inviati da utente (es. form HTML)
– estraggono altre info specificate in request (cookies, host
name del client, …)
– generano risultato e lo formattano in documento
– impostano parametri di HTTP response
– inviano response a web server, che spedisce a client
• per generare risposta usano
– parametri passati in HTTP request
– variabili locali e stato di computazione
Laboratorio di Servizi Web - servlet Ardissono
33
Invocazione di applicazione basata su Servlet
Applicazione web
Web container
Web
server
HTTP
request
Risorse
statiche
HTTP
response
Web
browser
Servlet/JSP
instances
Risorse
statiche
Laboratorio di Servizi Web - servlet Ardissono
34
Invocazione di applicazione - I
2: web server identifica
applicazione (via
Servlet context di Web
Container, es. sweb40) e Web container
delega gestione richiesta
Web
server
HTTP
request
Web
browser
3: Web Container
identifica tipo di
applicazione (JSP,
Servlet, risorsa statica). Se
Servlet, identifica Servlet
instance e delega richiesta
(passa oggetti request e
response streams)
Applicazione web
Servlet/JSP
instances
Risorse
statiche
1: web browser invia
HTTP request
Laboratorio di Servizi Web - servlet Ardissono
35
Invocazione di applicazione - II
5: web container
invia risposta
a web server
Web
server
HTTP
response
Web
browser
Applicazione web
Web container
4: Servlet
• interpreta request
•gestisce richiesta
•invia risultato a
web container in
response stream
Servlet/JSP
instances
Risorse
statiche
6: web server
invia risposta
a browser
Laboratorio di Servizi Web - servlet Ardissono
36
Servlet Java - vantaggi
• Essendo programmi duraturi
– permettono a web server di gestire interazioni
complesse con client (non solo risposte a richieste, ma
anche sequenze di scambi con gestione di stato
dell’interazione)
– permettono di integrare logica di applicazione in
processo di scambio di HTTP requests e responses
• Scritte in Java  indipendenti da piattaforma su
cui devono girare (portabilità)
Laboratorio di Servizi Web - servlet Ardissono
37
Web Container
• java runtime che ospita ed esegue applicazioni
web (crea, inizializza ed invoca Servlet e JSP)
• Tipi di web container
– Web container incluso in web server: web server
scritti in Java includono web container.
Es: Jakarta Tomcat (di Apache)
– Web Container in J2EE application server:
application server che gestiscono Enterprise Java Beans
includono anche web server
– Web container in runtime separato: web servers
come Apache e Microsoft IIS necessitano di runtime
separato per gestire servlets, più plug-in che gestisce
comunicazione tra web server e web container
Laboratorio di Servizi Web - servlet Ardissono
38
PRIMO ESEMPIO: Hello.java
• Semplice Servlet che, quando invocata,
invia al browser utente una pagina (Hello
Servlet) con scritto “Hello world!!”
• Invocazione Servlet: da pagina prova.html
che include bottone di invocazione (POST)
• Se utente clicca sul bottone di prova.html la
Servlet manda pagina di saluto al browser
(interazione semplice: richiesta, risposta)
Laboratorio di Servizi Web - servlet Ardissono
39
Invocazione di Hello Servlet
Applicazione web
Web container
Web
server
HTTP
request
Risorse
Statiche:
prova.html
HTTP
response
Web
browser
Hello.java
Qualunque browser, se accede
a prova.html, può invocare la
Servlet per ricevere saluto
(applicazione Web!!)
Laboratorio di Servizi Web - servlet Ardissono
40
ESEMPIO: Servlet Hello.java
package application.servlets;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
Gestione richiesta (HTTP
request): mediante metodo
doPost (eseguito quando
HTTP request è POST)
public class Hello extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
resp.setContentType("text/html");
per GET metodo doGet
PrintWriter out = resp.getWriter();
out.println("<HTML> <HEAD> <TITLE>Hello Servlet</TITLE></HEAD>");
out.println ("<BODY><CENTER><H1>Hello World!!” +
“</H1></CENTER></BODY></HTML>“);
out.close();
}
}
Laboratorio di Servizi Web - servlet Ardissono
41
Richiamo Servlet (da pagina HTML)
<HEAD>
<TITLE>PROVA SERVLET</TITLE>
</HEAD>
http://130.192.241.1:10000/swebi/prova.html
<BODY >
<FORM ACTION=”servlet/application.servlets.Hello" METHOD="POST" >
<H1>
pagina web (form HTML)
chiamo la servlet
invoca Servlet con metodo POST
</H1>
<CENTER>
<INPUT TYPE="Submit" NAME="btnSubmit" VALUE="Submit request">
</CENTER>
</FORM>
Click su submit button fa eseguire
</BODY>
</HTML>
POST  invocazione web server
In questa form elementare non si
inseriscono valori di input
Laboratorio di Servizi Web - servlet Ardissono
42
FORM HTML - I
• permettono di
– specificare dati di input per applicazione
– invocare richieste HTTP quali GET, POST, HEAD, ...
Con alias
(indipendente da
• Invocazione richiesta HTTP (post)
nome classe)
– <form action=“servlet/info/” method=“POST”>
Invocazione
diretta di classe
– <form action=“servlet/application.servlets.Information/”
method=“POST”>
Identificatore di Servlet in contesto
di applicazione (swebi)
la pagina è interna all’applicazione web
Laboratorio di Servizi Web - servlet Ardissono
43
FORM HTML - II
• Specifica dati di input: mediante controlTypes che
permettono vari tipi di inserimento di parametri
– text: permette specifica di piccole aree di testo
• Cognome: <input type=“Text” name=“parameter1” align=“left”
size=“a5”>
Nome parametro
– Menu:
Nome parametro
visualizzato in pagina
passato a web server
• <select name=“parameter2” size=“1”>
<option value=“val1”>Bianco</option>
<option value=“val2”>Rosso</option>
….
Valore
interno di
Valore visualizzato
</select>
parametro (opzione)
in pagina web
Laboratorio di Servizi Web - servlet Ardissono
44
FORM HTML - III
– Textarea: permette di specificare aree di testo di
dimensioni prefissate
• Es: <textarea name=“describe” cols=“50” rows=“5”></textarea>
–
–
–
–
checkbox: permette di cliccare su bottoncini on/off
password: nasconde i caratteri in input (asterischi)
radio: radio button
submit: bottone di submit, che fa inviare contenuto della
form a web server (effettua HTTP request)
• Es: <INPUT TYPE="Submit" NAME="btnSubmit"
VALUE="Submit request">
– hidden: permette di inserire testo nascosto (nel caso
vogliamo passare parametri che utente non vede)
Laboratorio di Servizi Web - servlet Ardissono
45
FORM HTML - IV
Laboratorio di Servizi Web - servlet Ardissono
46
FORM HTML - V
quando usate le form, attenzione ai valori di default:
l’utente potrebbe lasciare campi della form vuoti
e voi dovete garantire che il valore inviato
all’applicazione sia uno di quelli previsti
dall’applicazione stessa (altrimenti non lo saprà
gestire)
nei casi di menu, radio button, etc., è consigliabile
inserire sempre valore nullo specificato da voi (così
applicazione può essere programmata per trattarlo)
Laboratorio di Servizi Web - servlet Ardissono
47
Scarica

Web Server