Scarica Presentazione servlet - Java e più Slide in PDF di Elementi di Informatica solo su Docsity!
Laboratorio di Servizi Web - servlet - Ardissono 1
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 2
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 3
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 4
URL
- 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 in generale può essere sostituito da DNS name (es: 130.192.239.1 è www.di.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 5
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 stateless : gestisce solo interazioni del tipo
- 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 6
HyperText Transfer Protocol (HTTP) - II
- HTTP request: richiesta da client a server
- GET : richiesta di leggere pagina web
- HEAD : richiesta di leggere header di pagina web
- POST : invio dati a server
- …
- HTTP response: risposta da server a client
NB: Richieste effettuate normalmente da browser,
ma essendo HTTP protocollo testuale, ci si può
connettere a server anche via telnet
NB: HTTP stateless ⇒ usando HTTP da solo non si
gestiscono agevolmente applicazioni web che
richiedono più scambi di informazioni tra browser
e server
Laboratorio di Servizi Web - servlet - Ardissono 7
HTTP Request: metodo GET
- GET IP-address resourceName?param1=val1&…¶mN=valN
- Usato per richiedere dati (pagine HTML, …)
- Es: GET http://www.esempio.com ⇒ accedo a pagina index.html del server www.esempio.com
- Specifica parametri : parameterName=value
- Es: GET http://www.esempio.com?nome=liliana
- Web server destinatario può usare valore parametro per inviare contenuti specifici
- Come sempre, IP-address può essere sostituito da
nome DNS, se disponibile
Laboratorio di Servizi Web - servlet - Ardissono 8
HTTP Request: metodo POST
- POST IP-address resourceName?param1=val1&…¶mN=valN
- Usato per accedere a risorse dinamiche
- permette di incapsulare messaggi costituiti da parti multiple in body di richiesta
- Es: dati utente raccolti mediante FORM HTML, oggetti Java serializzati, ...
Differenze tra GET e POST
GET trasmette parametri a server appendendoli a URL ( ⇒ si può fare bookmark) POST trasmette parametri inclusi in body della richiesta ( ⇒ no bookmark)
Laboratorio di Servizi Web - servlet - Ardissono 9
HTTP Request: metodo HEAD
- Usato per richiedere header di risposta: es.
Content-Type, Content-Length
- I metodi GET e HEAD dovrebbero solo essere
usati per richiedere informazioni al server
- Per modificare dati nel server ⇒ usare POST
Laboratorio di Servizi Web - servlet - Ardissono 10
HTTP Response
Quando web server riceve HTTP request invia
- response header: specifica stato della risposta e meta- informazioni che la descrivono - Campi del content header: Date, Content-Type, Expires (se Expires=Date, browser non fa cache)
- contenuto della risorsa specificata in HTTP request (es. pagina web richiesta) (a meno che request non sia HEAD)
- HTTP protocollo testuale ⇒ per scambiare anche
contenuti multimediali è stato definito il formato
MIME
Laboratorio di Servizi Web - servlet - Ardissono 11
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 12
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 19
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 20
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 21
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 di applicazione 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 22
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 una servlet ⇒
Java Servlets è la tecnologia sottostante, ma JSP
facilitano creazione di interfacce utente
Laboratorio di Servizi Web - servlet - Ardissono 23
Applicazioni Web-based
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, istallare
applicazioni su web server, ...
Laboratorio di Servizi Web - servlet - Ardissono 24
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 25
Struttura di applicazione web-based java
Java servletJava servlet Java servletJava servlet
JSPJSP
Java classes, archives
Java classes, archives
Java classes, archives
Deployment descriptor (web.xml)
Applicazione web
Java servletJava servlet Java servletJava servlet
JSPJSP
Java classes, archives
Java classes, archives
Java classes, archives
Deployment descriptor (web.xml)
Applicazione web
Web Container
sweb5 (^) sweb
Laboratorio di Servizi Web - servlet - Ardissono 26
Servlet Java - I
- Programmi che girano in processo di web server e
agicono 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 : non limitata a gestione
di HTTP request e generazione di HTTP response
Laboratorio di Servizi Web - servlet - Ardissono 27
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
- settano 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 della computazione Laboratorio di Servizi Web - servlet - Ardissono 28
Servlet Java - III
- 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 29
Invocazione di applicazione basata su servlet
Web container
Web server
Web browser
Servlet/JSP instances
Risorse statiche
Applicazione web
HTTP request
HTTP response
Risorse statiche
Laboratorio di Servizi Web - servlet - Ardissono 30
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 37
FORM HTML - III
- Textarea: permette di specificare aree di testo di dimensioni prefissate - Es:
- 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: **
- hidden : permette di inserire testo nascosto (nel caso vogliamo passare parametri che utente non vede)
Laboratorio di Servizi Web - servlet - Ardissono 38
FORM HTML - IV
Laboratorio di Servizi Web - servlet - Ardissono 39
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 40
Java Servlet API
- package javax.servlet : include classi e interfacce
di gestione di servlet indipendenti da protocollo di
comunicazione
- package javax.servlet.http : include classi e
interfacce specifiche per uso di servlet con
protocollo HTTP
- alcune classi e interfacce di javax.servlet.http
estendono le rispettive di javax.servlet
Laboratorio di Servizi Web - servlet - Ardissono 41
Porzione di gerarchia delle classi - servlet
interface javax.servlet.Servlet
•init(ServletConfig c) •service(ServletRequest req, ServleResponse res) •destroy(), … altri metodi ...
abstract class javax.servlet.GenericServlet implements Servlet, ServletConfig, Serializable offre implementazione di interfaccia Servlet indipendente da protocollo di comunicazione (HTTP, …)
abstract class javax.servlet.http.HttpServlet extends GenericServlet implements Serializable offre implementazione di interfaccia Servlet specifica per HTTP
interface javax.servlet.ServletConfig
mantiene dati di configurazione di servlet
Laboratorio di Servizi Web - servlet - Ardissono 42
javax.Servlet - Interface ServletConfig
specifica metodi per accedere a parametri di
configurazione di servlet (es. database driver, costanti
globali della servlet, …)
- public String getInitParameter(String name)
- restituisce valore di parametro di inizializzazione “name”, se esiste. Null altrimenti
- public Enumeration getInitParameterNames()
- restituisce enumerazione di nomi dei parametri di inizializzazione della servlet
- public String getServletName()
- ...
Laboratorio di Servizi Web - servlet - Ardissono 43
javax.Servlet - Interface Servlet - I
specifica metodi di gestione della servlet
- public void init(ServletConfig c) throws ServletException
- invocato da Web Container dopo aver istanziato servlet
- inizializza variabili di servlet (prima di accettare HTTP requests). Es: leggere dati di configurazione, registrare database driver, …
- public void service(ServletRequest req,
ServletResponse res) throws ServletException, IOException
- invocato da Web Container ad ogni HTTP request (oggetto req contiene dati di richiesta, res contiene risposta)
- public void destroy()
- invocato da Web Container prima di rimuovere istanza di servlet (es: prima di shut down di web server, o se serve spazio di memoria, …) Laboratorio di Servizi Web - servlet - Ardissono 44
javax.Servlet - Interface Servlet - II
Offre anche metodi per accedere a informazioni generiche
su servlet e a oggetto ServletConfig
(questi metodi sono usati nel codice delle classi da noi
implementate che estendono le servlet)
- ServletConfig getServletConfig()
- restituisce oggetto ServletConfig di una servlet
- String getServletInfo()
- restituisce informazioni generali su servlet (autore, data di creazione, ...)
Laboratorio di Servizi Web - servlet - Ardissono 45
javax.Servlet.http - abstract class HttpServlet - I
- public void service(ServletRequest req,
ServleResponse res)
- implementa metodo service di GenericServlet. Fa cast di ServletRequest/ServletResponse ad HttpServiceRequest/HttpServiceResponse e invoca metodo service protected.
- Non ridefinire!!
- protected void service(HttpServletRequest req,
HttpServleResponse res)
- invoca req.getMethod per sapere se è GET, POST, HEAD, … e delega gestione a metodo doXXX specifico….
- Non ridefinire!!!
Laboratorio di Servizi Web - servlet - Ardissono 46
javax.Servlet.http - abstract class HttpServlet - II
- protected void doGet(HttpServletRequest req,
HttpServleResponse res)
- gestisce HTTP request di tipo GET. Ridefinibile
- protected void doPost(HttpServletRequest req,
HttpServleResponse res)
- gestisce HTTP request di tipo POST. Ridefinibile
- protected void doHead(HttpServletRequest req,
HttpServleResponse res)
- gestisce HTTP request di tipo HEAD. Ridefinibile
- ...
Laboratorio di Servizi Web - servlet - Ardissono 47
Invocazione di servlet
Web container
Web server
Web browser
POST HTTP HttpServlet
Invoca metodo pubblico service di Servlet service(req, res)
service (protected) fa cast di parametri e invoca doXXX(req, res)
doXXX gestisce richiesta
Ridefinendo metodi doXXX integriamo logica di applicazione in funzionalità offerte da web server
NB: metodo service eseguito in thread di processo principale ⇒ gestione parallela di richieste, ma leggera
Laboratorio di Servizi Web - servlet - Ardissono 48
Porzione di gerarchia delle classi - Request
Interface javax.servlet.ServletRequest offre
- metodi per accedere a connessione client
- input stream associata a connessione supporta lettura di dati da input stream
interface javax.servlet.http.HttpServletRequest
offre implementazione di ServletRequest specifica per HTTP
InputStream ServiceInputStream
Laboratorio di Servizi Web - servlet - Ardissono 55
Altro esempio
Estendiamo applicazione swebi, che
inizialmente faceva solo il saluto,
aggiungendo un altro tipo di servizio:
richiesta informazioni personali
⇒⇒⇒⇒^ Implementiamo una nuova servlet
(Informazioni.java), in aggiunta ad
Hello.java, che invocheremo da una
pagina HTML
Laboratorio di Servizi Web - servlet - Ardissono 56
Nota bene
- NB: anche se le due servlet sono parte della
stessa applicazione, non comunicano tra loro
- In generale, le servlet di un’applicazione
dovrebbero cooperare e bisognerebbe definire
applicazioni diverse, se si offrono servizi
indipendenti
- Tuttavia, ciascun gruppo di laboratorio
corrisponde, per questioni di configurazione
del web server, ad una diversa applicazione
⇒⇒⇒⇒ usiamo applicazione per sviluppare tutte le
servlet che vogliamo (indipendentemente dal
fatto che c’entrino l’una con l’altra …)
Laboratorio di Servizi Web - servlet - Ardissono 57
Gestione informazioni personali
- /usr/home/studenti/labgroup/labsweb/swebi/
- file HTML : richiesta.html
– WEB-INF
- classes
- application » servlets: application.servlets.Informazioni.java » other: nessuna classe di utilità
- web.xml
- src (albero dei sorgenti da compilare)
Laboratorio di Servizi Web - servlet - Ardissono 58
swebi - web.xml - preambolo
**Web Application sweb40 descrizione dell'applicazione... **
….
DTD di web.xml Descrizione applicazione web
Laboratorio di Servizi Web - servlet - Ardissono 59
swebi - web.xml - context parameters
**
contextPar Questo parametro e’ generale di applicazione ... **
Parametri di inizializzazione usati in tutta l’applicazione web sono memorizzati nel contesto di applicazione
Laboratorio di Servizi Web - servlet - Ardissono 60
swebi - web.xml - descrizione servlet
info
** Servlet che fornisce informazioni personali **
application.servlets.Informazioni
** saluto CIAO!! **
Parametri di inizializzazione di servlet info
Descrizione di servlet gestita da web container
Alias per invocazione servlet
Nome della classe servlet
Laboratorio di Servizi Web - servlet - Ardissono 61
swebi - web-xml - ultima parte
** DB-URL
jdbc:idb:/usr/home/studenti/labgroup/labsweb/sweb40/localDB/properties.prp
5
…… definizione di altra servlet ….
…... **
Specifico che servlet deve essere caricata appena web server viene lanciato
Laboratorio di Servizi Web - servlet - Ardissono 62
Pagina web: richiesta.html - I
** RICHIESTA INFORMAZIONI
**
** Richiesta di informazioni
…..**
NB: posso invocare la servlet con nome di classe o con alias (alias più robusto e flessibile)
Laboratorio di Servizi Web - servlet - Ardissono 63
Pagina web: richiesta.html - II
**
Login:
Password:
...**
Laboratorio di Servizi Web - servlet - Ardissono 64
Pagina web: richiesta.html - III
** Tipo di informazioni:
**
Laboratorio di Servizi Web - servlet - Ardissono 65
Servlet Informazioni.java - I
package application.servlets; import javax.servlet.; import javax.servlet.http.; import java.io.; import java.util.; import java.sql.; public class Informazioni extends HttpServlet { String cheers; String url; Connection con; public Informazioni() { cheers = ""; url = “”; con = null; }*
Costruttore classe (usato da Web Container per istanziare la servlet)
Laboratorio di Servizi Web - servlet - Ardissono 66
Servlet Informazioni.java - II
public void init(ServletConfig config) throws ServletException {
super.init(config);
cheers = config.getInitParameter("saluto"); url = config.getInitParameter("DB-URL"); try { Class.forName("org.enhydra.instantdb.jdbc.idbDriver"); } catch (ClassNotFoundException e) { System.err.println(e); throw new ServletException(e);} }
Prima di istruzioni di inizializzazione specifiche eseguo metodo init di base!!
Chiedo a ServletConfig object i valori dei parametri di inizializzazione di servlet
Carico Driver JDBC e catturo eccezioni forzando ServletException...
Laboratorio di Servizi Web - servlet - Ardissono 73
Deployment di applicazione - build
- ANT usa file di build passato come parametro, che
specifica operazioni di deployment (task eseguibili)
- vd alias definito in catEnv.sh (e file ant.bat)
- alias ant '$JWSDP_HOME/jakarta-ant-1.5.1/bin/ant - buildfile build_unix.xml’
- ant install: task di istallazione di applicazione
(rinnova directory, compila, istalla)
- ant remove: rimuove istallazione di applicazione da
web container
Laboratorio di Servizi Web - servlet - Ardissono 74
build_unix.xml - I
- File di build da usare per deployment delle vostre
applicazioni in ambiente unix (build_win.xml opera
in ambiente windows)
- Sulla pagina del corso è accessibile la nuova versione
del file, che include uso di JAXB per generare classi
java
- Vediamo alcune parti del file di build: definizione di
properties (variabili), di task, esecuzione task, ...
Laboratorio di Servizi Web - servlet - Ardissono 75
build_unix.xml - II
**
…...**
Definizione properties usate come variabili nel resto del file
Laboratorio di Servizi Web - servlet - Ardissono 76
build_unix.xml - II
**
**
**
**
**
**
Login e password per istallare applicazioni in web container tomcat
URL per connettersi a tomcat durante istallazione applicaz
Carico librerie JWSDP da classpath
Laboratorio di Servizi Web - servlet - Ardissono 77
build_unix.xml - III
**
**
** **
**
**
Definizione task di ant di base
Task di invocazione di codice esterno (jaxb)
Rimozione directory applicaz in area di deployment Laboratorio di Servizi Web - servlet - Ardissono 78
build_unix.xml - IV
**
**
**
**
**
**
Creazione directory di build: richiama init task...
Ant install ...
init prepare
build install
Laboratorio di Servizi Web - servlet - Ardissono 79
build_unix.xml - V
**….
**
Ant remove ...
Laboratorio di Servizi Web - servlet - Ardissono 80
build_unix.xml - VI
**
**
Clean
build
Prepare
bindXMLSchema
Laboratorio di Servizi Web - servlet - Ardissono 81
build_unix.xml - VII
**
**
Invoca xjc per generare classi da XML schema