In una comunicazione su rete vi sono due figure fondamentali: il client ed il server. Il client è colui che richiede l'esecuzione di determinate azioni, mentre il server esegue queste azioni e risponde al client. Questo modello di comunicazione basato sulla richiesta e sulla risposta costituisce la base delle servlet Java. Una servlet estende le funzionalità di un server, fornendo un modo per generare documenti dinamici; sono sviluppate con le Java Servlet API, un'estensione standard di Java; queste ultime permettono di includere le servlet in svariati server web, poichè sono indipendenti dall'ambiente o dal protocollo. Le funzioni principali svolte dalle servlet sono:
Per queste ragioni risultano efficenti e semplici da utilizzare rispetto alla tradizionale programmazione in CGI.
Il package javax.servlet e il package javax.servlet.http forniscono le classi e le interfacce per la definizione delle servlet.
Per comprendere come una servlet viene eseguita occorre identificare un componente quale la Servlet Engine, che è
un'applicazione server, o parte di essa, che esegue una servlet, invia i dati di richiesta del client alla servlet e la risposta di quest'ultima al client.
Apache JServ è stato progettato per seguire un modello di tipo "three-tier". La servlet Engine non è parte del web server, ma un'applicazione standalone sul server.
Quando viene eseguita una rischiesta che contempla una servlet, il web server agisce come un client richiedendo a sua volta la servlet attraverso la rete (utilizzando l'Apache JServ Protocol,
comunemente noto come protocollo AJP), convertendo i dati in risposta ed inviandoli al client che aveva fatto richiesta.
Quindi a differenza delle pagine dinamiche e statiche, una pagina web generata da una servlet viene costruita solo nel momento in cui il client richiede tale pagina; per questo motivo vengono anche chiamate "pagine attive".
Sul web server esiste un'area detta Servlet Repository, che è una collezione di servlet e può essere una directory o un archivio, come un file zip o jar.
Per ogni servlet viene attivato un thread specifico che inizializza l'oggetto Servlet invocando il metodo init.
Quando una servlet accetta la chiamata da un client, riceve due oggetti:
La comunicazione può essere basata su byte o caratteri. L'interazione con il client avviene attraverso il metodo service il quale delega le richieste http ai seguenti metodi:
Nello svolgimento del laboratorio occorrerà fornire un'implementazione dei primi due metodi o del metodo service.
Le servlet basate su Web estendono tipicamente la classe HttpServlet, che definisce al suo interno i metodi doGet e doPost.
Questi metodi ricevono come argomenti gli oggetti HttpServletRequest(che contiene la richiesta del client) e HttpServletResponse(che conterrà la risposta del server in formato HTML).
La risposta ad una richiesta da parte del client viene fornita attraverso l'oggetto PrintWriter che conterrà al suo interno il codice Html e javascript della pagina web. Come tutti gli oggetti Stream di Java, anche l'oggetto PrintWriter deve essere chiuso al termine del suo utilizzo.
Le servlet sono estensioni di Java Api che permettono di scrivere applicazioni indipendenti eseguite all’interno di un Web server. Rispondono alle richieste dell’utente e permettono di creare pagine Web dinamiche (pagine Attive). Vengono eseguite con thread separati, per cui possono servire richieste in parallelo. Inoltre mantengono la sessione di lavoro con il singolo utente. Per queste ragioni risultano efficenti e semplici da utilizzare rispetto alla tradizionale programmazione in CGI che invece esegue sul medesimo processo esterno Come avviene l’esecuzione di una servlet Quando un client invia una richiesta HTTP al Web server, il server la elabora spezzandola in 10 passi principali di azione, ad ognuno dei quali puó essere associato un diverso modulo del server (caso specifico di Apache). Quando il server, parsificando la richiesta, si accorge che si tratta dell’invocazione di una servlet, invia la richiesta al server di servlet specifico (Tomcat/jserv) che esiste come dispaccer delle richieste per invocare la servlet corretta. La richiesta viene quidi finalmente elaborata e convertita in Http, per essere spedita dal server Web attraverso la rete. Ed infine rispedita verso il client. Si tratta di un sistema Client Server di comunicazione basato su richieste e risposte http Sono coinvolti in questo sistema un Browser e Server WWW. Il browser è l’applicazione client che invoca una servlet totalmente affondata nell’html. In un web server possono convivere diverse servlet, tutte con il proprio alias, Tomcat/jserv ospita un insieme di servlet e si occupa dello smistamento delle richieste alla servlet corretta. Per ogni servlet viene attivato un thread specifico che inizializza l’oggetto Servlet invocando il metodo init(). Il thread persiste per tutta la durata del processo web server Ogni servlet è un thread all’interno del web server.(a differenza di CGI) Ricevuta una richiesta il servlet container (Tomcat/jserv) identifica la servlet S a cui è indirizzata e invoca il metodo service dell’oggetto Servlet S per far eseguire le operazioni richieste. Il metodo service() rappresenta l’nterfaccia del sercondo livello di applicazione anche se bisogna specificare che le servlet non hanno un’interfaccia verso l’utente come cgi. Viene costruita dinamicamente la pagina html che rappresenta la risposta alla richiesta del client. Si costruisce proprio un pacchetto Http di risposta contenente gli header e un body, nell’header si indica di quale MIME Type e’ il body seguente. Le richieste e le risposte vengono inviate tramite il protocollo http secondo lo standard specificato nella
Quindi composte da vari header e dal body che costituisce la pagina di risposta stessa.
Gli oggetti che rappresentano la richiesta e la risposta Http sono creati dal server e passati alla servlet sotto forma di oggetti java:
HttpServletRequest e HttpServletResponse
I metodi di questi oggetti permettono di elaborare la risposta e leggere le informazioni contenute nella richiesta. E’ possibile rispondere differentemente alla richiesta in base al suo tipo :
GET
POST
PUT …
supportano i metodi POST e GET con i metodi delle servlet
doGet(HttpServletRequest rq, HttpServletResponse rs) e
doPost(HttpServletRequest rq, HttpServletResponse rs)
o in generale rispondere allo stesso modo con il metodo
service(HttpServletRequest rq, HttpServletResponse rs)
In conclusione nel corso del laboratori di basi di dati si vedra’ come le servlet mantengono la sessione fra utente e server, garantiscono accesso sicuro a sito web, permettono al client di interagire, per mezzo di loro, con un database e generano dinamicamente pagine html.