Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni...

43
Corso di Laurea Specialistica in Ingegneria Informatica Corso di Laurea Specialistica in Ingegneria delle Telecomunicazioni Corso di Reti di Applicazioni Telematiche a.a. 2009-2010 Server-side Programming: Java servlets Parte II Simon Pietro Romano [email protected]

Transcript of Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni...

Page 1: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Corso di Laurea Specialistica in Ingegneria Informa ticaCorso di Laurea Specialistica in Ingegneria delle

Telecomunicazioni

Corso di Reti di Applicazioni Telematichea.a. 2009-2010

Server-side Programming: Java servlets

Parte II

Simon Pietro Romano

[email protected]

Page 2: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

AgendaAgenda

• Servlet:• Concetti introduttivi

• Ciclo di vita delle servlet;• servlet request, servlet response, servlet config, servlet context

• Learn by Example• Esempi di servlet generiche• Configurazione delle web application• Configurazione delle web application• Introspezione della richiesta

• HttpServlet:• HttpServletRequest, HttpServletResponse• Learn by Example

• Un esempio di servlet HTTP• Introspezione della richiesta HTTP

Parte II

Page 3: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Applicazione Web (Applicazione Web ( web appweb app))

• Una raccolta di:• servlet• Java Server Page (JSP)• documenti HTML• immagini• template• altre risorse web

• Concepita per permettere un deployment portabile su qualunque server web che supporti le servlet

Page 4: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Web apps: motivazioniWeb apps: motivazioni

• Garantire la portabilità delle applicazioni basate sul web, grazie a specifici accordi su:• Localizzazione dei file dell’applicazione sul server• Formato dei file di configurazione del server

• Archivi ‘war’ – Web Application Archive:• Un archivio contenente tutti i file di un’applicazione web• Costruito mediante l’utility di compressione ‘jar’ (Java

ARchive)• Memorizzato in una specifica cartella del web server

Page 5: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Archivi Archivi warwar in in TomcatTomcat

Tutti i file .war sono contenuti nella directory webapps del server

Tomcat

Page 6: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Contenuto di un archivio Contenuto di un archivio warwar

L’archivio evidenziato evidenziato nella slide

precedente(visualizzato

mediante Winrar…)

Page 7: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

La directory La directory WEBWEB--INFINF

• Una directory speciale:• I file al suo interno non vengono inviati direttamente al client,

dato che contengono:• Classi java• Informazioni di configurazione per la web app

• La cartella WEB-INF/classes contiene:• i file di classe per le servlet della web app• i file di classe per le servlet della web app• Le classi di supporto

• La cartella WEB-INF/lib contiene le classi memorizzate, per comodità, in archivi jar

• I caricatori di classi del server cercano automaticamente nelle suddette directory per caricare le classi invocate

Page 8: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Il descrittore di deploymentIl descrittore di deployment

• Il file web.xml nella directory WEB-INF contiene informazioni di configurazione relative alla web app nella quale risiede:• Registrazione delle servlet• Mapping delle URL• Mapping delle URL• Tipi MIME• Caratteristiche avanzate:

• Vincoli di protezione a livello di pagina• Comportamento delle servlet in ambiente distribuito

Page 9: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Il file Il file web.xmlweb.xml

Nome simbolico dato alla servletNome simbolico dato alla servlet

Classe della servlet

Page 10: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Invocazione della servlet ‘pippozzo’Invocazione della servlet ‘pippozzo’

La servlet è stata invocata tramite il nome simbolico prescelto!

Page 11: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Mapping di servletMapping di servlet

• Consente di impostare pattern di URL che richiamano una determinata servlet registrata nel container

• Utile per:• Nascondere l’uso di servlet da parte di un sito web• Nascondere l’uso di servlet da parte di un sito web• Sostituire in maniera ‘indolore’ una pagina

preesistente, corrispondente ad una determinata URL

Page 12: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Un esempio di mappingUn esempio di mapping

Qualsiasi richiesta della risorsa http://localhost:8080/AT-ServletSamples/ciao.htmlsarà gestita dalla servlet il cui nome simbolico è

‘pippozzo’

Page 13: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Invocazione della pagina Invocazione della pagina ciao.htmlciao.html

L’invocazione della servlet è mascherata dalla pagina ‘statica’ ciao.html

Page 14: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Regole di mappingRegole di mapping

• Mapping esplicito:• Tipo esempio precedente:

• Utile per sostituire una singola pagina esistente

• Mapping con prefisso di percorso:• Es: ‘/prefisso/*’:

• Gestisce tutte le richieste che iniziano con il prefisso specificato

• Mapping di estensione:• Es: ‘*.jsp, *.do’:• Es: ‘*.jsp, *.do’:

• Gestisce tutte le richieste che terminano con una particolare estensione

• Mapping predefinito:• ‘/’:

• Specifica la servlet predefinita per la web app:– Da utilizzare nel caso non si verifichi nessun’altra corrispondenza– Identico al mapping con prefisso: ‘/*’

Page 15: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Esempi di mappingEsempi di mapping

Tutte le richieste aventi AT-Samples come

prefisso devono essere gestite dalla servlet

avente nome simbolico pippozzo

Tutte le richieste aventi comeStai come

estensione devono essere gestite dalla servlet avente nome simbolico pippozzo

Page 16: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Effetti del mapping (1/2)Effetti del mapping (1/2)

Qualsiasi richiesta avente AT-Samples come prefisso viene servita

Modulo

Qualsiasi richiesta avente AT-Samples come prefisso viene servita dalla servlet avente nome simbolico pippozzo

Page 17: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Effetti del mapping (2/2)Effetti del mapping (2/2)

Qualsiasi richiesta avente comeStai come estensione viene Qualsiasi richiesta avente comeStai come estensione viene servita dalla servlet avente nome simbolico pippozzo

Page 18: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

La comunicazione tra servlet e containerLa comunicazione tra servlet e container

• All’attivazione di una servlet, il container:• Passa alla servlet un oggetto, chiamato

ServletConfig ,contenente informazioni necessarie per una corretta inizializzazione

• ServletConfig consente di accedere ad un ulteriore oggetto, chiamato ServletContext , che viene utilizzato dalla servlet per gestire eventuali successive comunicazioni con il container:per gestire eventuali successive comunicazioni con il container:

• Determinare il tipo MIME di un file;• Inoltrare le richieste (dispatching);• Scrivere informazioni in un file di logging;• Ecc…

• NB: Esiste un context per ogni web application e per ogni Java Virtual Machine!

Page 19: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

L’interfaccia L’interfaccia ServletConfigServletConfig

• E’ implementata dalla classe GenericServlet:• In tal modo, è possibile gestire le informazioni di configurazione in

maniera semplice ed immediata

Page 20: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Un occhio alla documentazione…Un occhio alla documentazione…

Page 21: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Inizializzazione: l’oggetto Inizializzazione: l’oggetto ServletConfigServletConfig

• Quando la servlet viene attivata dal container:• Viene invocato il metodo init(), il quale ha, come

parametro, l’oggetto ServletConfig

• E’ compito della servlet ‘salvare’ tale oggetto come propria variabile di istanzapropria variabile di istanza

• La classe GenericServlet effettua tale operazione nell’implementazione del metodo init()

Page 22: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Esempio di inizializzazioneEsempio di inizializzazione

La servlet è dotata di una variabile di istanza, di tipo

ServletConfig

Nel metodo init(), tale variabile è ‘settata’ al valore passato dal

container

Page 23: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Informazioni di contesto: un esempioInformazioni di contesto: un esempio

Page 24: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Esecuzione della servletEsecuzione della servlet

NB: Non compare alcun parametro di inizializzazione, né per la servlet, né per il contesto…

Page 25: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Passaggio dei parametri di inizializzazione in Tomc atPassaggio dei parametri di inizializzazione in Tomc at

Si può utilizzare il descrittore di deployment web.xml:

Per il context:

<context-param><param-name>

nome_del_parametro</param-name><param-value>

valore_del_parametro</param-value><description>

descrizione_del_parametro</description>

</context-param>

Per le servlet:

<init-param><param-name>

nome_del_parametro</param-name><param-value>

valore_del_parametro

<description>descrizione_del_parametro

</description></param-value>

</init-param>

Page 26: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Un esempioUn esempio

Page 27: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Esecuzione della servletEsecuzione della servlet

NB: In tal caso, i parametri di inizializzazione del contesto e della servlet vengono stampati nella

risposta…

Page 28: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Introspezione della requestIntrospezione della request

• L’oggetto ServletRequest mette a disposizione tutta una serie di metodi per reperire informazioni sulla richiesta effettuata dal client:• Protocollo;• Nome del server;• Porto del server;• Indirizzo dell’host client;• Nome dell’host client;• …

Page 29: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Un esempioUn esempio

Un frammento di codice che effettua introspezione della richiesta…

NB: Si provi ad aggiungere tale frammento al codice della precedente servlet ☺

Page 30: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Esecuzione della servletEsecuzione della servlet

Modulo

Risultato dell’introspezione…

Page 31: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

HttpServletHttpServlet

• Molto spesso, le servlet utilizzano il protocollo HTTP:• Il package javax.servlet.http è stato concepito

proprio per fornire un ulteriore supporto agli sviluppatori di questo tipo di servlet

• Tale package semplifica la gestione dei principali • Tale package semplifica la gestione dei principali messaggi HTTP:

• GET• POST• HEAD• TRACE• …

Page 32: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Il metodo HTTP GETIl metodo HTTP GET

• Il metodo HTTP GET è utilizzato per ricevere informazioni da un web server, sotto forma di:• File:

• Testo, html, ecc.

• Output proveniente da un particolare dispositivo • Output proveniente da un particolare dispositivo presente sul server:

• Es: telecamera, ecc.

• Output proveniente da un particolare programma in esecuzione sul server:

• Una servlet, uno script CGI, ecc.

Page 33: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

HTTP GET: passaggio dei parametriHTTP GET: passaggio dei parametri

• Un esempio:• http://localhost:8080/servlet/MiaServlet?parametro1=valore1&parametro2=valore2

• L’URL in questa richiesta GET invoca la servlet MiaServlet e contiene due parametri, chiamati, rispettivamente, parametro1 e parametro2:

• Ogni parametro è costituito da una coppia nome/valore, secondo il formato:

– Nome=valore

• I parametri seguono il nome della servlet e sono preceduti da un punto interrogativo ('?')

• Ogni parametro è separato dai precedenti tramite un ampersand ('&').

Page 34: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

HTTP GET: limitazioniHTTP GET: limitazioni

• La maggior parte dei server Web limita la quantità massima di dati che possono essere scambiati all’interno di una URL (solitamente il limite è pari a qualche centinaio di byte…)

• Nel caso in cui si presenti la necessità di • Nel caso in cui si presenti la necessità di passare molti dati al server all’interno della richiesta, bisogna ricorrere al metodo HTTP POST

Page 35: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

HTTP GET: particolaritàHTTP GET: particolarità

• E’ importante notare che ci si aspetta che l’implementazione del metodo GET da parte di qualsiasi server sia:• Sicura (safe):

• Vale a dire, priva di effetti collaterali (side effects)• Vale a dire, priva di effetti collaterali (side effects)

• Idempotente:• Cioè, capace di produrre il medesimo output in seguito ad

invocazioni successive

Page 36: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Il metodo HTTP POSTIl metodo HTTP POST

• Con il metodo POST, tutti i parametri di input per il server web sono passati all’interno di un input stream:• Non esiste più, dunque, la limitazione sulla dimensione

massima delle informazioni scambiate tra client e server• I parametri si trovano all’interno della richiesta, subito dopo

l’headerl’header

• A differenza del metodo GET, il metodo POST non è concepito per essere né sicuro, né idempotente:• Sono ammesse modifiche ai dati• Non è richiesto il requisito di ‘ripetibilità’ delle transazioni tra

client e server

Page 37: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Il metodo HTTP HEADIl metodo HTTP HEAD

• E’ molto simile al metodo GET• La richiesta è identica, eccezion fatta per la parola chiave

HEAD al posto di GET• Nella risposta, il server restituisce solo le informazioni relative

all’header• HEAD è spesso utilizzato per controllare:

• La data di ultima modifica di un documento presente sul server:• La data di ultima modifica di un documento presente sul server:• utile per gestire il caching

• La dimensione di un documento prima di scaricarlo dal server:• Per consentire al browser di mostrare, successivamente, una barra relativa

allo stato di avanzamento della procedura• Il tipo di server:

• Per consentire al client di ‘customizzare’ le richieste inviate ad un particolare server Web

• Il tipo di documento richiesto:• Per consentire al client di verificare se per esso sia disponibile il necessario

supporto

Page 38: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Le classi di supporto per HTTPLe classi di supporto per HTTP

• Il package javax.servlet.http semplifica notevolmente la scrittura di servlet HTTP:• La classe astratta HttpServlet eredita tutte le

caratteristiche della classe GenericServlet ed include funzionalità specifiche del protocollo HTTP:include funzionalità specifiche del protocollo HTTP:

• L’implementazione del metodo service() si occupa di gestire in maniera opportuna il “dispatching” (cioè la consegna) dei messaggi HTTP ad uno dei metodi speciali disponibili per tale protocollo

– Per tale motivo, non è necessario (anzi, è sconsigliato!) reimplementare il metodo service()

Page 39: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

I metodi speciali per HTTPI metodi speciali per HTTP

• doGet()• Per gestire richieste di tipo GET

• doHead()• Per gestire richieste di tipo HEAD

• doDelete()• Permette ad un client di eliminare un documento da un Web server

• doOptions()• doOptions()• Restituisce informazioni relative ai metodi supportati dal server

• doPost()• Per gestire richieste di tipo POST

• doPut()• Permette ad un client di salvare un documento su un Web server (simile

al trasferimento di file mediante FTP…)• doTrace()

• Utilizzato per il debugging

Page 40: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

HttpServlet: gestione delle richiesteHttpServlet: gestione delle richieste

doGet()

Sottoclasse HttpServlet

richiesta GETrisposta

Web server

service()doPost()

doTrace()

.

.

richiesta POSTrisposta

richiesta TRACErisposta

Page 41: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Utilizzo delle classi di supportoUtilizzo delle classi di supporto

• Quando si usano le classi di supporto per HTTP, generalmente occorre creare una nuova servlet che estende HttpServlet e ‘sovrascrivere’:• o il metodo doGet()…• …o il metodo doPost()…• …o entrambi.• …o entrambi.

• I metodi di elaborazione dei messaggi HTTP ricevono in ingresso due parametri:• Un oggetto HttpServletRequest:

• Contenente numerosi metodi di ausilio nell’analisi della richiesta

• Un oggetto HttpServletResponse:• Contenente numerosi metodi di ausilio nella preparazione della

risposta

Page 42: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Introspezione della richiesta HTTPIntrospezione della richiesta HTTP

• Utilizzando l’oggetto HttpServletRequestè possibile accedere in maniera semplice maniera semplice ed efficace ai campi dell’header HTTP:

Page 43: Server-side Programming: Java servlets Parte IIunina.stidue.net/Applicazioni Telematiche/Materiale...La servlet è stata invocata tramite il nome simbolico prescelto! Mapping di servlet

Esecuzione della servletEsecuzione della servlet