Introduzione a Java Technology SAPIENZA Università di Roma Corso di Architetture Software Orientate ai Servizi Chi ha conosciuto quella forma del principio di ragione che apparisce nel tempo puro in quanto è tale, e su cui poggia ogni numerazione e calcolo, ha con ciò appunto conosciuto anche l'intera essenza del tempo [A. Schopenhauer, Il Mondo come Volontà e Rappresentazione]
Java Technology Le sono una tecnologia offerta da Java per l'estensione delle funzionalità di Server che ospitino applicazioni accedute dai Client tramite un modello di comunicazione request-response tipicamente, HTTP HyperText Transfer Protocol sono delegate a processare le request ed emettere le response consistono in moduli di codice Java in esecuzione su un ambiente Server le API sono in un pacchetto incluso in J2EE javax.servlet javax.servlet.http hanno un funzionamento che ricorda le CGI sono dispiegate (deployed) ed eseguite (run) in un Container all'interno del Server non sono thread-safe! Common Gateway Interface 2
Container Infrastruttura software in cui una 1. viene eseguita simile al concetto di Sandbox; 2. scorre il proprio ciclo di vita. 3
Container Infrastruttura software in cui una 1. viene eseguita simile al concetto di Sandbox; 2. scorre il proprio ciclo di vita. Nel resto del corso e nelle esercitazioni verrà adoperato Apache Tomcat bundled in JBoss Application Server 6.0 su distribuzione Linux Ubuntu 4
Gerarchia Le sono in relazione con classi ed interfacce contenute nei package: javax.servlet javax.servlet.http javax.servlet comprende classi ed interfacce indipendenti dal protocollo di comunicazione; estese da classi ed interfacce in javax.servlet.http specifiche per il protocollo HTTP. 5
Java Technology 6
Ciclo di vita delle public void init() invocato dal Container precede qualunque ulteriore invocazione termina prima di qualsiasi ulteriore invocazione tipicamente si effettua overriding di questo metodo per creare le connessioni ad altri oggetti Container-managed, utili durante tutto il resto del ciclo di vita public void destroy() invocato dal Container termina solo dopo che ogni altra invocazione ha terminato la propria esecuzione tipicamente si effettua overriding di questo metodo per rilasciare le risorse occupate prima che la venga distrutta 7
Ciclo di vita delle public void service( Request req, Response res ) gestisce la richiesta del client (req) il parametro req fornisce informazioni contestuali, ad esempio String getremoteaddr() // indirizzo IP del client Enumeration getparameternames() // parametri di invocazione imposta la risposta del server (res) la scrittura sull'output avviene tramite l'oggetto OutputStream associato OutputStream getoutputstream() eseguito dal server in modalità multithread 8
La specializzazione HTTP Per ogni comando (METODO) HTTP 1.0 e 1.1 POST GET HEAD altri (PUT, DELETE, TRACE...) Http definisce metodi nel formato protected void do Metodo ( HttpRequest req, HttpResponse res ) dopost( ) doget( ) dohead( ) doput( ), dodelete( ), dotrace( ),, service( ) 9
GET 10
POST Parametri URL-encoded 11
GET Parametri URL-encoded (query string) 12
HttpRequest HttpResponse HttpRequest estende Request metodi specifici public String getmethod() restituisce il metodo HTTP; ad esempio:» Se la HTTP request è GET http://www.dis.uniroma1.it/index.jsp?question=answer» il metodo restituisce: "GET" public String getrequesturi() restituisce la parte di URL dal nome di dominio alla query string, esclusi» Se la HTTP request è GET http://www.dis.uniroma1.it/index.jsp?question=answer» il metodo restituisce: "/index.jsp" 13
HttpRequest HttpResponse HttpResponse estende Response metodi specifici public String sendredirect(string location) redireziona il browser del client verso la pagina indicata public String senderror(int sc, String msg) restituisce un codice di errore al client (sc sta per status code), con un messaggio HTML definito» si pensi per esempio ad un codice di errore tipico sc := HttpResponse.SC_FORBIDDEN // 403 14
Mantenimento della Sessione HTTP è un protocollo stateless Al di sopra, è stato costruito un sistema di registrazione di variabili di stato relative alla navigazione del client È la Sessione Identifica univocamente il browser in uso sulla macchina client durante la navigazione su una o più pagine residenti sul server Viene inizializzata dal server Può scadere per timeout impostato opzionalmente dal server disabilitazione esplicita Si pensi al meccanismo di login / logout dei siti ad accesso protetto Registrazione / cancellazione della sessione autenticata 15
Mantenimento della Sessione Fisicamente, le variabili di stato vengono salvate su file temporanei del Server L'identificativo della Sessione (e del file sotteso) viene salvato dal client in un cookie, oppure riscritto come parametro di request in tutti i link e le action dei form nelle pagine scritte dal server pratica, quest'ultima, sconsigliabile 16
HttpSession HttpSession è la classe preposta a gestire la sessione HttpRequest espone il metodo HttpSession getsession([boolean create]) il parametro create indica se forzare la creazione di una sessione laddove non fosse stata già inizializzata» per default è true Metodi di HttpSession Object getattribute(string name) void setattribute(string name, Object value) metodi getter e setter per ricevere (risp., impostare) valori in sessione void invalidate() annulla la sessione in corso 17
Packaging e deploying di un progetto Per dispiegare l'applicazione web basata su occorre Web ARchive creare un file WAR con nella sub-directory WEB INF/ file bytecode (*.class) descrittore web.xml nella sub-directory META INF/ file MANIFEST.MF eventuali altri file di utilità spostare il file WAR all'interno della directory $JBOSS_HOME/ server/default/deploy 18
WEB-INF/web.xml 19
Demo (1) 20
Demo (2) 21
Demo (3) 22
Demo (4) 23